0

私は簡単な問題を抱えていますが、かなり簡単な解決策があることを願っています。次のような関数があります。

function [dx] = myFunction(x)

xは、システムの構成 (位置と運動量) を含む 4 つの要素をもつ列ベクトルです。ode45次のように、この構成空間でいくつかの粒子を数値的に統合するために使用しようとしています。

[Tout,Yout] = ode45(@(x,t)myFunction(x),[t0 tfinal],x0);

これを試すたびに失敗し、次のエラーが表示されます。

Index exceeds matrix dimensions
Error in myFunction (line 9)
x2 = x(2);

ode45は、期待される 4 つの要素のベクトルではなく、1 つの要素x=0をに渡しています。これがインデックスエラーの原因です。なぜこれが起こっているのですか、どうすれば修正できますか? どうも使い方が間違っているようです。myFunctionmyFunctionode45

4

1 に答える 1

0

ODE 積分関数の形式はy' = f(t,y)です。つまり、最初の入力引数として時間を、2 番目の入力引数として状態ベクトルを取らなければなりません (ODE がまれに状態ベクトルを省略できる場合があります)。時間のみに依存します)。あなたはこれをしていません。myFunction状態ベクトルのみを入力として使用しても問題ありません。ただし、無名関数を誤って定義したため、 に時間が経過しxていmyFunctionます。逆tにする必要がありxます:

[Tout,Yout] = ode45(@(t,x)myFunction(x),[t0 tfinal],x0);

うまくいけば、それですべてが解決します。

于 2013-11-24T16:59:35.727 に答える