2

免責事項。私は Mathematica には精通していますが、Matlab には精通していません。初心者の質問でしたら申し訳ありません。

Matlab の solve コマンドを使用すると、次のように Matlab で奇妙なエラーが発生します。

solve(0.2 = (1.4+1/2)^((1.4+1)/(2*(1.4-1)))*(M)/((1+(1.4-1)/2*M^2))^((1.4+1)/(2*(1.4-1))), M)

エラーは次のとおりです。

Error: The expression to the left of the equals sign is not a valid target for an assignment.

Mathematica の同等の Solve コマンド (同じ式を使用) は完全に機能するため、式自体が無効であるとは思いません。さらに、ドキュメント サイトの例を使用しようとすると、同じエラーが発生します: http://www.mathworks.com/help/symbolic/mupad_ref/solve.html

それは構成の問題ですか、それとも私が誤解しているコマンドの構文について何かありますか?

編集: = の代わりに == も試しましたが、別のエラーが発生しました:

Undefined function or variable 'M'.

また、メモとして、Matlab R2011b (7.13.0.564) 64 ビット (glnxa64) を実行しています。

Edit2: syms を使用して最初に提案されたソリューションを試しました:

>> syms M
>> solve(0.2 == (1.4+1/2)^((1.4+1)/(2*(1.4-1)))*(M)/((1+(1.4-1)/2*M^2))^((1.4+1)/(2*(1.4-1))), M)
Error using char
Conversion to char from logical is not possible.

Error in solve>getEqns (line 245)
  vc = char(v);

Error in solve (line 141)
[eqns,vars,options] = getEqns(varargin{:});

Edit3:最も単純な方程式でもこの問題を再現できました

>> syms x
>> solve(x^2 -4 == 0, x)
Error using char
Conversion to char from logical is not possible.

Error in solve>getEqns (line 245)
  vc = char(v);

Error in solve (line 141)
[eqns,vars,options] = getEqns(varargin{:});

さらに、ここで提案されている解決策も試してみました: MATLAB の例が失敗しています

4

2 に答える 2

4

Matlab の fsolve コマンドは、式がゼロに設定されていることを前提としています。数値的に解く場合は、次のことを行いません。

x=solve(2=x+1,x)

むしろ:

x=fsolve(@(x) x+1-2,0)

式がすでにゼロに設定されている場合、@(x) は解いているものであり、0 は最初の推測です。これを含める必要があります。

solve を記号的に使用すると、次のようになります。

syms x
val=solve(x+1-2)

またはあなたのシステムのために:

syms M
solve(-0.2+ (1.4+1/2)^((1.4+1)/(2*(1.4-1)))*(M)/((1+(1.4-1)/2*M^2))^((1.4+1)/(2*(1.4-1))))

ans =
                                     4.7161724968093348297842999805458
                                   0.029173662296926424763929809009225
 - 3.8716404782846254923900841980317 - 3.4984412176176158766571497649425*i
   1.4989673987314948651159693032542 + 5.5784387926679222829321168661041*i
   1.4989673987314948651159693032542 - 5.5784387926679222829321168661041*i
 - 3.8716404782846254923900841980317 + 3.4984412176176158766571497649425*i
于 2013-01-29T18:39:28.680 に答える
2

M を として定義し、代わりにsym使用する必要があります===

syms M
solve(0.2 == (1.4+1/2)^((1.4+1)/(2*(1.4-1)))*(M)/((1+(1.4-1)/2*M^2))^((1.4+1)/(2*(1.4-1))), M)

ans =
                                         4.7161724968093348297842999805458
                                       0.029173662296926424763929809009225
 - 3.8716404782846254923900841980317 - 3.4984412176176158766571497649425*i
   1.4989673987314948651159693032542 + 5.5784387926679222829321168661041*i
   1.4989673987314948651159693032542 - 5.5784387926679222829321168661041*i
 - 3.8716404782846254923900841980317 + 3.4984412176176158766571497649425*i
于 2013-01-29T18:03:46.923 に答える