1

我对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)。但我觉得有更好的方法来做到这一点!谢谢你的帮助 !

4

1 回答 1

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];
于 2013-04-12T17:41:35.043 回答