如何解决如何用matlab获得这些微分方程的数值解
|| 我有从流行病传播衍生出来的微分方程。我想获得数值解。这是方程式 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\'
其他金额相似。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。