Matlab求解非線性規划,fmincon函數的用法總結


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 \]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM