非線性方程數值求解
1.單變量非線性方程求解
x=fzero(filename,x0):
filename是待求根方程左端的函數表達式,x0是初始值。
ps:用該函數求解方程時,初始值選取十分重要,可以在確定初始值之前繪製圖形大體曲線,確定零點大體位置,然後再估計初值。
2.非線性方程組的求解
x=fsolve(filename,x0,option)
x爲返回的近似解,filename是待求根方程左端的函數表達式,x0是初值。
option用於設置優化工具箱的優化參數,可以調用optimset函數來完成。例如,Display參數設置爲‘off’時不顯示中間結果。
f=@(x) [sin(x(1))+x(2)+x(3)^2*exp(x(1)),x(1)+x(2)+x(3),x(1)*x(2)*x(3)];
x=fsolve(f,[1,1,1],optimset('Display','off'))
%驗證:
f(x)
x = 0.022381577931908 -0.022380302441219 -0.000001275490689
ans = 1.0e-06 * -0.593080249610492 -0.000000000001322 0.000638901555530
%結果很小所以比較精確
函數極值的計算
函數極值包括極大值和極小值,或者叫最大值和最小值。MATLAB只考慮最小值 問題的計算,如果要求f(x)的最大值,可以通過求-f(x)的最小值來解決。
無約束最優化問題
函數調用:
[xmin,fmin]=fminbnd(filename,x1,x2,option) [xmin,fmin]=fminsearch(filename,x0,option) [xmin,fmin]=fminunc(filename,x0,option)
- xmin表示極小值點,fmin表示最小值
- filename是定義的目標函數。
- option爲優化參數,可以通過optimset函數來設置。
- 第一個函數的輸入變量xl、x2分別表示被研究區間的左、右邊界。
- 後兩個函數的輸入變量x0是一個向量,表示極值點的初值。
例子:
f=@(x) x-1./x+5;
[xmin,fmin]=fminbnd(f,-10,-1)
[xmin,fmin]=fminbnd(f,1,10)
結果:
xmin = -9.999946678462546
fmin =-4.899946145244328
xmin =1.000053455645318
fmin =5.000106908433283
有約束最優化問題
即求取一組x,使得目標函數f(x)爲最小,且滿足約束條件G(x)≤0。記號s.t.是英文subject to的縮寫,表示x要滿足後面的約束條件。
(約束條件可以進一步細化爲:線性不等式約束、線性等式約束、非線性不等式約束、非線性等式約束以及x的下界和上界。)
函數調用:
[xmin,fmin]=fmincon(filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)
- 其中,xmin、fmin、filename、x0和option的含義與求最小值函數相同。
- 其餘參數爲約束條件,包括線性不等式約束、線性等式約束、x的下界和上界以及定義非線性約束的函數。如果某個約束不存在,則用空矩陣來表示。
例題:
f=@(x) 0.4*x(2)+x(1)^2+x(2)^2-x(1)*x(2)+1/30*x(1)^3;
x0=[0.5;0.5];
A=[-1,-0.5;-0.5,-1];
b=[-0.4;-0.5];
lb=[0;0];
option=optimset('Display','off');
[xmin,fmin]=fmincon(f,x0,A,b,[],[],lb,[],[],option)%沒有的條件就用空矩陣代替
結果:
xmin =
0.339562825416758
0.330218614948690
fmin =0.245609812236434