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

问题描述:

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

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。我对符号工具箱并不熟悉。我错过了什么?

我是否期待符号引擎太多?或者,有没有更好的方法来解决上述方程? (一个数值解决方案可以。)

+0

出于好奇,你从哪里得到这些方程?你是否从特定类别的问题中推导出它们?如果我们知道你是如何来到这些方程的,那么更多的人可能会提供帮助。在7.6提供了 – gnovice 2009-02-23 14:55:34

+1

警告:无法找到明确的解决方案。 >解决于140 ans = [空符号] – Dani 2009-02-25 16:51:51

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

您使用的MATLAB版本使用MuPad,因为它是符号计算引擎,但它们用于使用Maple。我有最新的符号工具箱的枫版版本,当我把你的表达了进去,我得到

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

ans = 

[ empty sym ] 

所以我建议,有没有解决这个方程组和新的Mupad象征引擎根本无法很好地处理这个事实。

更新:尝试在Mathematica中通过数值解决这个问题会导致无论我选择什么样的初始值而导致对单数雅可比矩阵的投诉。我根本不知道如何证明你的方程没有解决方案,但我强烈怀疑是这样。

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

它看起来可能是一个错误。它看起来与此相同:

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

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) 

编写代码这样

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

这将是好的。