Math 如何用matlab求这些微分方程的数值解

Math 如何用matlab求这些微分方程的数值解,math,matlab,numerical,differential-equations,Math,Matlab,Numerical,Differential Equations,我有从传染病传播中导出的微分方程。我想得到数值解。这是方程式 t是自变量,范围为[0100]。 初始值为 y1 = 0.99; y2 = 0.01; y3 = 0; 起初,我计划在matlab中使用ode45函数处理这些问题,但是,我不知道如何表达该系列和组合。所以我在这里请求帮助 ** 问题是如何将方程的右侧表示为odefun,odefun是ode45函数中的一个参数。 **Matlab具有计算二项式系数(组合数)的功能,有限序列可以表示为矩阵乘法。我将演示第一个等式中的和是如何工作的。注

我有从传染病传播中导出的微分方程。我想得到数值解。这是方程式

t是自变量,范围为
[0100]
。 初始值为

y1 = 0.99; y2 = 0.01; y3 = 0;
起初,我计划在matlab中使用ode45函数处理这些问题,但是,我不知道如何表达该系列和组合。所以我在这里请求帮助

**

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

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'
其他金额相似

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

此总和的每个项都是具有非常不同量级的数字的乘积,之后求和可能会破坏精度。我会把总和的每一项计算为exp(loglog(a/20+1)+logc(20,a)+a*logy2+(1-a)*log1-y2)+logy1)。我们确信y1>0且y2处于]0,1[从方程中。@Alexandre C.Fair point,这里有数字方面的问题,还有表示和和和二项式系数的更基本的问题。你应该将你的评论作为答案发表。谢谢你的回答。我只能在matlab中找到一个计算二项式系数的函数,nchoosek(n,k)。但输入不能是向量。实际上,我的问题在于如何将方程的右侧转换为odefun,这是ode45函数中的一个参数。也许你现在已经知道了,但是如果你复制粘贴,请仔细检查参数的顺序,因为我现在没有matlab。