如何用matlab获得这些微分方程的数值解

时间:2011-05-25 05:01:34

标签: math matlab numerical differential-equations

我有来自流行病传播的微分方程。我想获得数值解。这是方程,

enter image description here

t是一个自变量,范围从[0,100]。 初始值为

y1 = 0.99; y2 = 0.01; y3 = 0;

首先,我计划在matlab中处理这些ode45函数,但是,我不知道如何表达系列和组合。所以我在这里寻求帮助。

**

问题是如何将方程的右侧表示为odefun,这是ode45函数中的一个参数。

**

2 个答案:

答案 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?如果该约束是方程的自然结果,则可能不需要它。