dvdt = -(A - B*inv(R)*B'*S)'*v - Q*rd
ode45 を使用して微分方程式を行列形式で評価したいと思います。ここでA
、 、B
、Q
およびR
は時変行列、rd
は定数行ベクトル、v
は積分する変数です。この方程式は関数ファイルで定義されます。一方、3D マトリックスS = S(:,:,250)
は、呼び出しファイルで時間とは無関係に取得されます。S(:,:,1)
問題は、私の方程式関数では、ode45 の各時間ステップ (時間ステップ 1、S(:,:,2)
時間ステップ 2、S(:,:,3)
時間ステップ 3 など)ごとに行列 S のそれぞれを使用する必要があることです。このプロセスをどのように実行できるかについてアドバイスをいただけないでしょうか。関数ファイルは次のとおりです。
function dvdt = myfun(t,v,S)
A = A(t); B = B(t); R = R(t); Q = Q(t);
dvdt = -(A - B*inv(R)*B'*S)'*v - Q*rd;
end
呼び出しファイルは次のとおりです。
S = S(:,:,250); % Defined previously in this file
[t,v] = ode45(@(f,v) myfun(t,v,S),f,v0);
前もって感謝します。