2

Matlab のシンボリック ツールボックスを使用して、未知数 x、y、z の 3 つの連立非線形方程式を解こうとしています。次のコードの何が問題になっていますか?

solve( '(x/4 + y/2 + z/4)*(1/(8*x) + 1/(16*y) + 1/(8*z))  = 0.5774',  ...
       '(x/4 + y/4 + z/2)*(1/(4*x) + 1/(16*y) + 1/(16*z)) = 0.5774',  ...
       '(x/2 + y/4 + z/4)*(1/(8*x) + 1/(8*y)  + 1/(16*z)) = 0.5774' )    

次のエラーが表示されます。

??? Error using ==> subsref
Index exceeds matrix dimensions.

Error in ==> sym.subsref at 16
  y = builtin('subsref',struct(x),a);

Error in ==> solve at 191
      S.(char(symvars(j))) = R(:,j);

Matlab バージョン 7.7.0.471 を使用しています。私はシンボリック ツールボックスにまったく慣れていません。私は何が欠けていますか?

シンボリック エンジンに期待しすぎていませんか? または、上記の方程式を解くためのより良い方法はありますか? (数値解法で十分です。)

4

4 に答える 4

3

あなたの構文は正しいですが、あなたの連立方程式には解決策があるとは思いません。それらをMathematicaにプッシュすると、通常は解決策がないことを示す空のリストが返されました。

使用しているMATLABのバージョンは、記号計算エンジンとしてMuPadを使用していますが、以前はMapleを使用していました。シンボリックツールボックスのMapleバージョンの最新バージョンがあり、それにあなたの式を入れると、

Warning: Explicit solution could not be found.
 In solve at 140

ans =

[ empty sym ]

したがって、この連立方程式には解決策がなく、新しいMupadシンボリックエンジンはこの事実を非常にエレガントに処理しないことをお勧めします。

更新:Mathematicaでこれを数値的に解こうとすると、私がどの開始値を選択しても、単一のJacobianについての不満が生じます。私はあなたの方程式に解がないことを証明する方法を単に知りませんが、これが事実であると強く疑っています。

于 2009-02-23T10:46:18.137 に答える
0

コードでMikeが提案したことが起こっているかどうかを確認する 1 つの方法は、ソルブの問題のある行にブレーク ポイントを設定し、そこで使用されている変数のサイズを確認することです。1 つまたは複数のサイズが 0 である可能性があります。数学的に本当に解が存在しないかどうかを判断することに関しては、私はあなたを助けることができません。数学の大学院生を探します。

于 2009-02-28T17:01:06.650 に答える