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)的取值
fun是用M文件定義的函數f(x),代表了(非)線性目標函數
x0是x的初始值
A,b,Aeq,beq定義了線性約束 ,如果沒有線性約束,則A=[],b=[],Aeq=[],beq=[]
lb和ub是變量x的下界和上界,如果下界和上界沒有約束,則lb=[],ub=[],也可以寫成lb的各分量都為 -inf,ub的各分量都為inf
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 \]