2013-04-12 68 views
1

我对matlab并不熟悉。我用ode45求解形式dS(t)/ dt = F(S(t))(S(0)给出)的一阶微分方程。但是,然后,我有第二个微分方程来解决这是dX(t)/ dt = G(X(t),S(t))(给出X(0))。 如何使用S上的结果来求解X上的方程?微分方程Matlab

我想要解决方案S(和G)的值S(1)和G(1)。我的第一个想法是相当“天真”。我首先创建一个功能这使我的值S(t)的对于t在[0,1]:

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

这基本上是扩展一个微分方程,以包含更多的参数,这可以很简单地完成。所以如果S:

ds[1] = s[1] - s[2]; 
ds[2] = 3*s[1] + 0.5*s[2]; 

现在我们假设X是2阶微分方程。扩展后的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];