问题描述
||
我有从流行病传播衍生出来的微分方程。我想获得数值解。这是方程式
t是一个自变量,范围为
[0,100]
。
初始值为
y1 = 0.99; y2 = 0.01; y3 = 0;
起初,我计划在matlab中使用ode45函数来处理这些问题,但是,我不知道如何表达系列和组合。所以我在这里寻求帮助。
**
问题在于如何将等式的右侧表示为odefun,它是ode45函数中的一个参数。
**
解决方法
function demo(a_in)
X = [0;0;0];
T = [0:.1:100];
a = a_in; % for nested scope
[Xout,Tout ]= ode45( @myFunc,T,X );
function [dxdt] = myFunc( t,x )
% nested function accesses \"a\"
dxdt = 0*x + a;
% Todo: real value of dxdt.
end
end
那怎么办,您只需要在上面的数学中填写dxdt?数字四舍五入是否重要还有待观察...
编辑:由于1 = y1 + y2 + y3约束,因此存在一个严重的问题。由于您有一个IVP,给出了3个初始值和3个一阶ODE,这甚至允许吗?如果该约束是方程式的自然结果,则可能不需要。
,Matlab具有计算二项式系数(组合数)的功能,有限级数可以表示为矩阵乘法。我将在第一个方程式中说明如何求和。注意使用算术运算符的逐元素\“点\\”形式。
用总和中的常数系数计算行向量coefs
:
octave-3.0.0:33> a = 0:20;
octave-3.0.0:34> coefs = log2(a * 0.05 + 1) .* bincoeff(20,a);
变量组合成另一个向量:
octave-3.0.0:35> y1 = 0.99;
octave-3.0.0:36> y2 = 0.01;
octave-3.0.0:37> z = (y2 .^ a) .* ((1 - y2) .^ a) .* (y1 .^ a);
然后将总和评估为内部乘积:
octave-3.0.0:38> coefs * z\'
其他金额相似。