matlab非线性优化求解,用MATLAB求解非线性优化问题
實驗十五用MATLAB求解非線性優化問題
一、實驗目的:
了解Matlab的優化工具箱,利用Matlab求解非線性優化問題。
二、相關知識
非線性優化包括相當豐富的內容,我們這里就Matlab提供的一些函數來介紹相關函數的用法及其所能解決的問題。
(一)非線性一元函數的最小值
Matlab命令為fminbnd(),其使用格式為:
X=fminbnd(fun,x1,x2)
[X,fval,exitflag,output]= fminbnd(fun,x1,x2)
其中:fun為目標函數,x1,x2為變量得邊界約束,即x1≤x≤x2,X為返回得滿足fun取得最小值的x的值,而fval則為此時的目標函數值。exitflag>0表示計算收斂,exitflag=0表示超過了最大的迭代次數,exitflag<0表示計算不收斂,返回值output有3個分量,其中iterations是優化過程中迭代次數,funcCount 是代入函數值的次數,algorithm是優化所采用的算法。
例1:求函數
2
5321
()
sin()
x
x x x
f x
e x
++-
=
+-在區間[2,2]
-的最小值和相應的x值。
解決此問題的Matlab程序為:
clear
fun='(x^5+x^3+x^2-1)/(exp(x^2)+sin(-x))'
ezplot(fun,[-2,2])
[X,fval,exitflag,output]= fminbnd(fun,-2,2)
結果為:
X = 0.2176
fval =-1.1312
exitflag = 1
output = iterations: 13
funcCount: 13
algorithm: 'golden section search, parabolic interpolation'
(二)無約束非線性多元變量的優化
這里我們介紹兩個命令:fminsearch()和fminunc(),前者適合處理階次低但是間斷點多的函數,后者則對于高階連續的函數比較有效。
命令fminsearch()的格式為:
X= fminsearch(fun,X0)
[X,fval,exitflag,output]= fminsearch(fun,X0,options)
該命令求解目標函數fun的最小值和相應的x值,X0為x的初始值,fval為返回的函數值,exitflag=1表示優化結果收斂,exitflag=0表示超過了最大迭代次數。返回值output有3個分量,其中iterations是優化過程中迭代次數,funcCount是代入函數值的次數,algorithm是優化所采用的算法。Options是一個結構,里面有控制優化過程的各種參數,參考optimset()命令來設置,一般情況下我們不必改動它,即使用缺省設置就可以了。
例2:求函數
2
(,)sin cos
f x y x y
=+的最小值以及最小值點。
完成該計算的Matlab程序如下:
clear
fun1='sin(x)+cos(y)'
fun2='sin(x(1))+cos(x(2))'
ezmesh(fun1)
[X,fval]=fminsearch(fun2,[0,0])
X = -1.5708 3.1416
fval = -2.0000
其中語句ezmesh()是為了畫出函數的圖形,注意這里fun1和fun2的不同,考慮如果用相同的是否可行。
命令fminunc()的格式為:
X=fminunc(fun,X0)
[X,fval,exitflag,output,grad,hessian]=fminunc(fun,X0,options)
總結
以上是生活随笔為你收集整理的matlab非线性优化求解,用MATLAB求解非线性优化问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法的时间复杂度表示法(大O表示法)
- 下一篇: 高学历就意味着高薪资?低学历转行3D建模