matlab6——數值微分和方程求解(三)非線性方程求解、極值計算

非線性方程數值求解

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章