2016-04-07 15 views
0

に「解決」を使用:これは私は、z(7)及びZ(9)となるようにする2つの方程式の集合である私はこのように定義されたベクトル値関数有するベクトル値関数

eqns [email protected](z) [0.2178*z(7) + 1.96*sin(z(1)) == -0.2*z(9)*cos(z(1)),... 
      0.7*z(9) + 1.5*z(4) + 0.2*z(7)*cos(z(1)) - 0.2*z(2).^2*sin(z(1)) == z(5)] 

を数式の主題。つまり、これら2つの方程式をz(7)= f1(z(1)、z(2)、z(3)、z(4)、z(5) = f 2(z(1)、z(2)、z(3)、z(4)、z(5))。

私はこれを実行しようとしました:

[f1,f2]= solve(eqns,z(7),z(9)) 

が、それは私にエラーなります「『ダブル』タイプ の入力引数のための未定義関数 『Z』を。」

は、すべてのヘルプははるかにシンボリック変数としてzの宣言がない

+3

'z'が定義されていません。あなたの無名関数 'eqns'の中でのみ*利用可能です* – Suever

+1

また、' solve'は[記号表現または記号式として指定された]入力を扱うことを意図しています(http://www.mathworks.com /help/symbolic/solve.html?refresh=true#inputarg_eqn)、これは匿名関数ではありません。 – TroyHaskin

+0

コメントだけです。シンボリックベクトルとして定義されている場合はz: – Sedzani

答えて

1

をappreiatedされ、Matlabのは、それが解決への呼び出しでz(7)z(9)を評価しようとするとzが何であるかを知りません。したがって、zを呼び出しの前に定義し、またeqnsの定義を定義する必要があります。あなたはベクトルとしてzを扱っているので、それはsymではなくsymsを使用してそれを宣言するのが最も簡単です:

z = sym('z',[9,1]); 

コメントで述べたように最後に、solveへの第1の入力は"specified as a symbolic expression or symbolic equation"するので、eqnsを匿名のベクトル値関数として宣言しないでください(例:fsolve)。シンボリック変数を使用して定義するだけで、シンボリック式で構築されます。

言ったことすべてが、このコードは私のための答えを生成します。

z = sym('z',[9,1]); 
z([1,2,4,5]) = sym(rand(4,1)); 
eqns = [0.2178*z(7) + 1.96*sin(z(1)) == -0.2*z(9)*cos(z(1)),... 
     0.7*z(9) + 1.5*z(4) + 0.2*z(7)*cos(z(1)) - 0.2*z(2).^2*sin(z(1)) == z(5)]; 
[f1,f2]= solve(eqns,z(7),z(9)); 
+0

ありがとうトロイ。私はstackoverflowの初めてのユーザーとして、私はあなたの応答のスピードで非常にうれしく驚いていたと言わなければならない。 – Sedzani

+0

@Sedzaniあなたはそれを前払いして、トロイの答えを受け入れることによって、さらに良くすることができます。これにより、StackOverflowコミュニティは、あなたがこの特定の質問のためのヘルプを必要としなくなったことを知ることができます - > [回答の受け取りはどのように受け入れますか?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-解答 - 仕事) – rayryeng

関連する問題