Matlab非線性方程求解器fsolve總結(含實例)


Matlab非線性方程求解器fsolve總結(含實例)

轉自:http://blog.sina.com.cn/s/blog_408540af0100aymu.html

 

fsolve是采用最小二乘法來求解非線性方程(組)。它的一般求解方式為:X=FSOLVE(FUN,X0,OPTIONS)

其中,fun是要求解的非線性方程,X0是變量初值,options由optimset函數產生的結構體,用於對優化參數的設置,可以省略(采用默認值)。

 

fsolve可以求解簡單的一維非線性方程,如:x = fsolve(@myfun,[0.5 2 4],optimset('Display','iter')); %求解在初值分別為0.5,2和4時方程的解

其中,函數myfun的定義為:

function F = myfun(x)

F = sin(x);

 

fsolve還可以求解大型的非線性方程組,如

x0 = [51.6;rand;unifrnd(-1,1);rand];

h=optimset;

h.MaxFunEvals=20000;

h.MaxIter=5000;

h.Display='off';

[p,fval] = fsolve(@f,x0,options);

此時,方程組可以寫成矩陣形式:

function F=f(x)

f=[x(1)+x(2)*(1-exp(-(x(3)*(0)^x(4))))-51.61;

x(1)+x(2)*(1-exp(-(x(3)*(9.78)^x(4))))-51.91;

x(1)+x(2)*(1-exp(-(x(3)*(30.68)^x(4))))-53.27;

x(1)+x(2)*(1-exp(-(x(3)*(59.7)^x(4))))-59.68;];
 
 
以上是的非線性方程(組)都是簡單的函數關系式,但是實際應用中的函數,例如在圖像處理中的函數關系可能往往是一個隱函數,所以優化的目標方程可能是一個函數文件的結果,這種時候也是可以用來求解的。
 
 
PS: 個人感悟: 既然人家的目的是求解非線性方程組,那么如果如果需要訓練的參數有幾個,就乖乖地最少列幾個方程進行求解。例如我的文章中有三個參數,那么至少列三個方程,並且這三個方程還不能是相關的。而fminsearch就不需要有這個要求。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM