我有来自流行病传播的微分方程。我想获得数值解。这是方程,
t是一个自变量,范围从[0,100]
。
初始值为
y1 = 0.99; y2 = 0.01; y3 = 0;
首先,我计划在matlab中处理这些ode45函数,但是,我不知道如何表达系列和组合。所以我在这里寻求帮助。
**
**
答案 0 :(得分:2)
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'
其他总和相似。
答案 1 :(得分:1)
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?如果该约束是方程的自然结果,则可能不需要它。