【发布时间】:2015-04-01 06:38:20
【问题描述】:
我有 9 个具有时间相关系数的方程 g
% MY M file
function dy =tarak(t,y)
G= 3.16;
g = 0.1*exp(-((t-200)/90).^2);
dy=zeros(9,1);
dy(1)=-2*2*y(1)+2*G*y(5)+2*g*y(7);
dy(2)=2*y(1)-2*G*y(5);
dy(3)=2*y(1)-2*g*y(7);
dy(4)=-2*y(4)+g*y(9);
dy(5)=-2*y(5)+G*(y(2)-y(1))+g*y(8);
dy(6)=-2*y(6)-G*y(9);
dy(7)=-2*y(7)+g*(y(3)-y(1))+G*y(8);
dy(8)=-G*y(7)-g*y(5);
dy(9)=G*y(6)-g*y(4);
然后在命令窗口中:
[T,Y] = ode45(@tarak,[0 ,500],[0 0 1 0 0 0 0 0 0])
其中系数G = 3.16和g = 0.1*exp(-((t-200)/90).^2)是一个时间相关系数和时间t = 0:500;初始条件[0 0 1 0 0 0 0 0 0]。
我的输出 y(1)、y(2) 得到了错误的负值。有人可以尝试用ode45 解决上述方程,以便我可以比较结果。
【问题讨论】:
-
你从哪里得到这些组件必须保持积极的态度?这不取决于 y(5) 和 y(7) 吗?
-
嗨 Lutzl , Y(1) ,Y(2), Y(3) 是概率,因此不能是负数,我的朋友在 C 中解决了上面的方程并做对了。你也得到了负值?
-
不,看答案。代码在 python 中,但这不重要。您应该发布更完整的代码,看看是否有任何容易辨别的问题。
-
亲爱的 Lutzl,谢谢!你的情节似乎与我正在寻找的结果一致。你在 python 中使用过 Odeint 吗?
-
Matlab 代码没问题,但您需要使用公差,因为您的第一个状态的顺序为 1e-8,而 ode45 的默认绝对公差为 1e-6。
标签: matlab ode differential-equations