2014-01-21 156 views
0

請幫助。我想我錯過了一些東西,因爲fsolve太耗時間了。我想解決非線性系統,我有以下形式的系統:使用fsolve解決非線性系統

A = [x+y*3+10; 
    x-z*6-15; 
    x^2+y+z-16] 

要使用fsolve我需要創建和替換功能與V(I)的每個變量,像:

function z=evaltub(v) 
z(1) = v(1)+v(2)*3+10; 
z(2) = v(1)-v(3)+6-15; 
z(3) = v(1)^2+v(2)+v(3)-16; 

,然後使用

x = fsolve(@evaltub,[1 1 1]) 

的問題是,對於大型系統替換用v(i)每可變需要花費大量的時間。 還有另一種使用fsolve的方法嗎?

fsolve找到了答案,我的問題是,我需要修改公式與fsolve使用它們,它需要太多的時間,當系統大

我嘗試使用命令解決,但是當有有10多個方程式,它沒有得到答案。我得到的消息:

Warning: Explicit solution could not be found 
+0

這個問題似乎是兩個獨立的問題。你應該選擇一個。 「我嘗試使用命令solve,但是當有10多個方程式時,它無法得到答案」 - 這對我們沒有幫助,因爲你沒有提供這種情況下的代碼。返回的是什麼?錯誤消息?什麼是exitflag輸出(參見文檔)等於?你確定這個系統真的有根嗎?你有沒有調整fsolve的許多選項?怎麼樣? – horchler

+0

對不起。當我使用解決方案時,我得到'警告:明確的解決方案無法找到'的消息我猜是因爲系統太大而無法在沒有初步猜測的情況下解決?我沒有調整fsolve上的任何選項,它的工作原理是正確的,但修改方程式以使用fsolve需要很長時間 – user3199900

回答

1

我沒有看到你所說的第一時間關注solve,而不是fsolve我讀了你的問題。是的,solve通常對系統的規模更爲敏感,並且隨着數量變量的增加可能會變得非常緩慢或者找不到解決方案。如果沒有看到您的代碼,我不能多說。

至於莊家採用fsolve容易,你可以做這樣的事情:

function out=evaltub(in) 
x = in(1); 
y = in(2); 
z = in(3); 
A = [x+y*3+10; 
    x-z*6-15; 
    x^2+y+z-16]; 
out = A; % You could just rename A to out 

或者多一點巧妙:

function out=evaltub(in) 
inCell = num2cell(in); 
[x,y,z] = inCell{:}; 
A = [x+y*3+10; 
    x-z*6-15; 
    x^2+y+z-16]; 
out = A; % You could just rename A to out 
+0

謝謝!這真的很有幫助 – user3199900