NO IMAGE

如果目標函式約束條件中包含非線性函式,則稱這種規劃問題為非線性規劃問題,簡寫為NP。二次規劃是非線性規劃中的特例,由於二次規劃有通用的解法,所以單獨討論,而其他的非線性規劃問題沒有通用的解法。
在MATLAB中,非線性規劃的數學模型可以寫為下面的形式:
minf(x)st.Ax≤bAeq⋅x=beqG(x)≤0Ceq(x)=0
min f(x)\\
st.\\
Ax\leq b\\
Aeq\cdot x=beq\\
G(x)\leq 0\\
Ceq(x)=0\\

f(x)是標量函式,A、b、Aeq和beq是相應維數的矩陣和向量,C和Ceq是非線性向量函式。
MATLAB中求解非線性規劃問題的函式是fmincon函式,常用的呼叫格式如下:

x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
[x fval]=fmincon(fun,x0,A,b,Aeq,beq,ub,nonlcon)
x0是x的初始值
nonlcon是用M檔案定義的非線性向量函式C(x)、Ceq(x)

example
minf(x)=x21 x22 8st.x21−x2≥0−x1−x22 x=0x1,x2≥0 
min f(x)=x_1^2 x_2^2 8\\
st.\\
x_1^2-x_2\geq 0\\
-x_1-x_2^2 x=0\\
x_1,x_2\geq 0\

  1. 編寫目標函式M檔案fun1.m
function f=fun1(x)
f=x(1)^2 x(2)^2 8;

2.編寫約束條件函式M檔案fun2.m

function [g h]=fun2(x)
g=-x(1)^2 x(2);
g=-x(1)-x(2)^2 2;

編寫主函式指令碼funmain.m

[x y]=fmincon('fun1',rand(2,1),[],[],[],[],zeros(2,1),[],'fun2')
%x0=rand(2,1)隨機生成一個x0向量作為x的初始值
x=
1.0000
1.0000
y=
10.0000