2

我正在尝试使用 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

4 回答 4

3

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

您使用的 MATLAB 版本使用 MuPad 作为符号计算引擎,但他们曾经使用 Maple。我有符号工具箱的 Maple 版本的最新版本,当我把你的表情放进去时,我得到了

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

ans =

[ empty sym ]

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

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

于 2009-02-23T10:46:18.137 回答
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)
于 2009-03-24T14:56:19.570 回答
0

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

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

于 2009-03-04T13:29:42.897 回答
0

检查Mike建议的内容是否在您的代码中发生的一种方法是在solve 中的违规行设置一个断点并检查那里使用的变量的大小。很有可能,一个或多个的大小为 0。至于确定数学上是否真的没有解决方案,我无能为力。找一个数学研究生。

于 2009-02-28T17:01:06.650 回答