Matlab符号工具箱:我的代码出了什么问题?

时间:2009-02-23 10:08:31

标签: matlab equation symbolic-math

我正在尝试用Matlab的符号工具箱解决未知数x,y,z中的三个同时非线性方程。以下代码有什么问题?

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 个答案:

答案 0 :(得分:3)

你的语法是正确的,但我不认为你的方程组有一个解决方案。当我通过Mathematica推送它时,它返回一个空列表,通常表明没有解决方案。

您正在使用的MATLAB版本使用MuPad作为它的符号计算引擎,但他们过去常常使用Maple。我有符号工具箱的Maple版本的最新版本,当我把你的表达式放入其中时,我得到了

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

ans =

[ empty sym ]

所以我建议没有这个方程组的解决方案,新的Mupad符号引擎根本不能很好地处理这个事实。

更新:尝试在Mathematica中以数字方式解决此问题会导致对单一雅可比行列式的抱怨,无论我选择什么起始值。我根本不知道如何证明你的方程没有解,但我强烈怀疑是这种情况。

答案 1 :(得分:0)

检查代码中是否出现Mike建议的一种方法是在求解中的违规行设置断点并检查其中使用的变量的大小。机会是,一个或多个大小为0.为了确定数学上是否真的没有解决方案,我无法帮助你。找一个数学研究生。

答案 2 :(得分:0)

看起来它可能是一个错误。它看起来像这样:

http://www.mathworks.com/support/bugreports/details.html?rp=501052

答案 3 :(得分:0)

像这样编写代码

solve ('x+y+1','x+2*y-5');

那没关系。

   xx=[0:.1:5];
   yy=.2; 
   for i=1:50; 
       yy(i+1)= yy(i)+.1*yy(i)*(1-yy(i); 
   end; 
   plot(xx,yy)