2009-02-23 105 views
2

我想用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

回答

3

你的語法是正確的,但我不認爲你的方程組有一個解決方案。當我通過Mathematica推送它們時,它返回一個空列表,通常表示沒有解決方案。

您使用的MATLAB版本使用MuPad,因爲它是符號計算引擎,但它們用於使用Maple。我有最新的符號工具箱的楓版版本,當我把你的表達了進去,我得到

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

ans = 

[ empty sym ] 

所以我建議,有沒有解決這個方程組和新的Mupad象徵引擎根本無法很好地處理這個事實。

更新:嘗試在Mathematica中通過數值解決這個問題會導致無論我選擇什麼樣的初始值而導致對單數雅可比矩陣的投訴。我根本不知道如何證明你的方程沒有解決方案,但我強烈懷疑是這樣。

0

檢查代碼中發生的Mike建議的一種方法是在求解中的違規行上設置一個斷點,並檢查那裏使用的變量的大小。機會是,一個或多個的大小爲0.至於確定數學是否真的沒有解決方案,我無法幫助你。找一個數學研究生。

0
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) 
0

編寫代碼這樣

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

這將是好的。