Matlabでode45を試しています。パラメータをode関数に渡す方法を学びましたが、まだ質問があります。車の軌道(速度プロファイル)を計算したいとします。たとえばgetAcceleration
、車の加速度だけでなく、適切なギアも与える関数があります。[acceleration, gear] = getAcceleration(speed,modelStructure)
ここmodelStructure
で、は車のモデルを表します。
ode関数は次のようになります。
function [dy] = car(t,y,modelStructure)
dy = zeros(2,1);
dy(1) = y(2);
[dy(2),gear] = getAcceleration(y(1),modelStructure);
次に、このようにOde45インテグレーターを呼び出します。
tInit = 0;
tEnd = 5,
[t,y] = ode45(@car,[tInit tEnd], [speedInitial,accelerationInitial],options,modelStructure);
問題は、ベクトル格納ギアを取得するにはどうすればよいですか?私はのようなものを持っているべきですか、それともベクトル内にある[t,y,gear]=ode45(....)
べきですか?gear
y
私は自分のコードに取り組んでおり、イベント関数を使用して、車の「ギア」の変更を(イベントとして)取得できるようになりました。今、私は同じコードに関連する新しい問題を抱えています。de'dy'ベクトルを評価すると、さらに値Zを取得できると想像してください。これにより、加速度計算(getAcceleration)の呼び出しを大幅に高速化できます。
function [dy] = car(t,y,modelStructure)
dy = zeros(2,1);
dy(1) = y(2);
[dy(2),Z(t)] = getAcceleration(y(1),modelStructure,Z(t-1));
また、初期条件でZを計算できると仮定します。問題は、Z導関数を計算できないことです。
Z値を渡して、それを統合せずにステッピングをスローする方法はありますか?
みんなありがとう。