1

私はmatlabに精通していません。ode45 を使用して、dS(t)/dt = F(S(t)) (与えられた S(0)) の形式の 1 次微分方程式を解きます。しかし、次に、dX(t)/dt = G(X(t),S(t)) (X(0) が与えられた) という 2 番目の微分方程式を解く必要があります。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

次に、2 番目の方程式を解く 2 番目の関数を作成します。

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 が 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];
于 2013-04-12T17:41:35.043 に答える