Matlab求解非線性規劃,fmincon函數的用法總結
1.簡介
在matlab中,fmincon函數能夠求解帶約束的非線性多變量函數(Constrained nonlinear multivariable function)的最小值,便可以用來求解非線性規劃問題函數
matlab中,非線性規劃模型的寫法以下 $$ min\ f(x) \ s.t. \begin{equation}
\left{
\begin{array}{lr}
A \cdot x \leq b \ Aeq\cdot x =beq\ c(x)\leq0 \ ceq(x)=0 \ lb \leq x \leq ub
\end{array}
\right.
\end{equation} \ ~\ f(x)是標量函數,x,b,beq是向量,A,Aeq是矩陣 \ c(x)和ceq(x)是向量函數 $$優化
2.基本語法
[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x的返回值是決策向量x的取值,fval的返回值是目標函數f(x)的取值spa
fun是用M文件定義的函數f(x),表明了(非)線性目標函數code
x0是x的初始值io
A,b,Aeq,beq定義了線性約束 ,若是沒有線性約束,則A=[],b=[],Aeq=[],beq=[]function
lb和ub是變量x的下界和上界,若是下界和上界沒有約束,則lb=[],ub=[],也能夠寫成lb的各份量都爲 -inf,ub的各份量都爲infclass
nonlcon是用M文件定義的非線性向量函數約束變量
options定義了優化參數,不填寫表示使用Matlab默認的參數設置語法
3.實例
示例,求下列非線性規劃: $$ min\ f(x)=x_1^2+x_2^2+x_3^2+8\ s.t. \begin{equation}
\left{
\begin{array}{lr}
x_1^2-x_2+x_3^2\geq0\ x_1+x_2^2+x_3^2\leq20\ -x_1-x_2^2+2=0\ x_2+2x_3^2=3\ x_1,x_2,x_3\geq0 \end{array}
\right.
\end{equation} $$ (1)編寫M函數fun1.m 定義目標函數:程序
function f=fun1(x); f=x(1).^2+x(2).^2+x(3).^2+8;
(2)編寫M函數fun2.m定義非線性約束條件:
function [g,h]=fun2(x); g=[-x(1).^2+x(2)-x(3).^2 x(1)+x(2).^2+x(3).^3-20]; h=[-x(1)-x(2).^2+2 x(2)+2*x(3).^2-3];
(3)編寫主程序函數
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')
所得結果爲: $$ x_1=0.5522,x_2=1.2033,x_3=0.9478\ 最小值y=10.651 $$