我对matlab并不熟悉。我使用ode45求解形式为dS(t)/ dt = F(S(t))(给定的S(0))的第一微分方程。但是,我有一个要求解的第二个微分方程,即dX(t)/ dt = G(X(t),S(t))(给定的X(0))。 如何在S上使用结果来解决X上的等式?
我想要解S(和G)的值S(1)和G(1)。我的第一个想法很“天真”。我首先创建一个函数,它给出了[0,1]中的t的值S(t):
function dS=equation1(t,S)
dS=F(S);
end
function S=solve1(S0,t)
if t==0
S=S0;
else
[~,V]=ode45(@equation1,[0 t],S0);
S=V(end,:)
end
然后我创建了第二个函数来解决第二个等式:
function dX=equation2(t,X)
dX=G(X,solve1(t));
end
function G=solve2(X0,t)
[~,V]=ode45(@equation2,[0 t],X0);
end
最后,G(1)= solve2(X0,1)和S(1)= solve1(S0,1)。但我觉得有一个更好的方法来做到这一点! 谢谢你的帮助!
答案 0 :(得分:0)
这基本上是在扩展微分方程以包含更多参数,这可以相当简单地完成。所以如果S:
ds[1] = s[1] - s[2];
ds[2] = 3*s[1] + 0.5*s[2];
现在我们说X是二阶微分方程。扩展的X也将包含S(在此表示为x [3]和x [4]):
dx[1] = a1*x[1] + b1*x[2] + c1*x[3] + d1*x[4]
dx[2] = a2*x[1] + b2*x[2] + c2*x[3] + d2*x[4]
dx[3] = x[3] - x[4];
dx[4] = 3*x[3] + 0.5*x[4];