1

我有从流行病传播中得出的微分方程。我想获得数值解。这是方程式,

在此处输入图像描述

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

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

起初,我打算在matlab中用ode45函数处理这些,但是我不知道如何表达系列和组合。所以我在这里寻求帮助。

**

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

**

4

2 回答 2

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'

其他金额类似。

于 2011-05-25T07:20:34.160 回答
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?如果该约束是方程式的自然结果,则可能不需要它。

于 2011-05-30T22:47:25.823 回答