私は次の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 をソルバーの出力に追加する方法を知っている人はいますか?
私は次の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 をソルバーの出力に追加する方法を知っている人はいますか?
これには 2 つの方法があります。最も一般的で、通常は最速の方法は、統合関数 (RHSODE
この場合) を利用し、統合の実行後に関数を評価することf
です。コードに多くの詳細を提供していませんが、次のようになります。
ydot = RHSODE(t,y);
z = f(y,ydot);
ここでt
とy
は からの出力ですode23tb
。これには、 と の両方RHSODE
をf
ベクトル化する必要があります (または、上記を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