2

私は次のMatlab ODEコードを持っています:

[t,y,~,~,ie] = ode23tb(@(t,y) RHSODE(t,y),[0,t_end], [i0;v0],options);

ODE ソルバーが、z = f(y,dy/dt) となるような y と dy/dt の関数である結果 z も提供してくれることを望みます。

そのような z をソルバーの出力に追加する方法を知っている人はいますか?

4

1 に答える 1

4

これには 2 つの方法があります。最も一般的で、通常は最速の方法は、統合関数 (RHSODEこの場合) を利用し、統合の実行後に関数を評価することfです。コードに多くの詳細を提供していませんが、次のようになります。

ydot = RHSODE(t,y);
z = f(y,ydot);

ここでtyは からの出力ですode23tb。これには、 と の両方RHSODEfベクトル化する必要があります (または、上記をforループでラップできます)。

zもう 1 つの方法では、積分関数 内に追加の方程式 (または がベクトルの場合は方程式) を作成する必要がありますRHSODE。通常ode23tb、この関数には何でも統合されるため、これを打ち消すfには係数を掛ける必要があります。t繰り返しますが、コードは次のようになります。

function ydot = RHSODE(t,y)
ydot0 = ... % Your original ODE(s)
z = f(y,ydot);
ydot = [ydot0;z*t]; % Make column vector
于 2014-01-28T03:55:10.653 に答える