2017-12-22 9 views
1

私はMATLABには新しく、ode45()関数を使用して2つの関数を統合しようとしています。私のコード:Ode45 in MATLAB

[w,x] = ode45(@(w,x) (TSII - TFII) * w , [0 2], 0); 

TSIITFIIは私の2つの関数の値を含む列ベクトル1x151です。 wはまだ価値がありませんが、私はそれをゼロの長さ1x151でいっぱいの列ベクトルにしようとしましたが、それは私の問題を解決しませんでした。

@(W,X)(TSII-TFII)*W returns a vector of length 151, but the length of initial conditions vector is 1

は、私は、次のエラーメッセージが表示されます。

@(W,X)(TSII-TFII)*Wによって返されたベクトルと初期条件ベクトルの要素数は同じでなければなりません。

初期条件ベクトルをTSIITFIIと同じ長さに変更することはできますか?

または、ode45()のループを使用して151の値を設定する必要がありますか?

答えて

0

私は少し推測が、それを試してみています:

ode45()は位置xで関数値を補間するためにあなたの無名関数@(w,x)をしたいと思います。 TSIIとTFIIが表形式の関数値であれば、期待通りの結果を返しません。

TSIIの代わりに[interp1][1](TSII,x)のようなものを使用してください。あなたの関数は次のようになります。

@(w,x) (interp1(TSII,x) - interp1(TFII,x)) .* w 

また要素毎の乗算のため.*に注意してください。

+0

詳細については、この質問/回答を参照してください。https://stackoverflow.com/q/19732442/2278029 – horchler

関連する問題