为什么以下表达式会导致错误?

时间:2013-01-29 17:59:53

标签: matlab

声明。我熟悉Mathematica但不熟悉Matlab,所以如果这是一个新手问题,我很抱歉。

我在Matlab上使用Matlab的solve命令得到了一个奇怪的错误:

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命令(使用相同的表达式)工作正常,因此我认为我的表达式本身无效。 此外,当我尝试使用doc网站上的示例时,我收到了同样的错误: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 examples are failing

2 个答案:

答案 0 :(得分:4)

Matlab的fsolve命令假定表达式设置为零。如果以数字方式解决,你就不会这样做:

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

而是:

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

当等式已经设置为零时,@(x)就是你要解决的问题,0是初始猜测。你必须包括哪些。

象征性地使用解决方案,它看起来像这样:

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

答案 1 :(得分: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