非線性規(guī)劃
非線性規(guī)劃:約束條件和目標(biāo)函數(shù)存在非線性函數(shù)。簡單點(diǎn)說,約束條件和目標(biāo)函數(shù)中至少一個(gè)決策變量不是一次方,例如三角函數(shù)、對數(shù)、多次方等。
線性規(guī)劃和非線性在解決上的不同:線性規(guī)劃可以有通用方法,但是非線性規(guī)劃的求解是沒有特定算的,只能用近似的算法,每種算法都有自己適用的范圍。這些算法有很多,Matlab內(nèi)部已經(jīng)實(shí)現(xiàn)好了,有現(xiàn)成的函數(shù),如果想了解內(nèi)部具體的實(shí)現(xiàn)可以另尋查找,本文就只介紹如何調(diào)用Matlab中的函數(shù)達(dá)成求非線性規(guī)劃。
Matlab函數(shù)
Matlab函數(shù):
[x,value]=fmincon(func,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
參數(shù)解釋:
- func 表示目標(biāo)函數(shù)。
- A 表示不等式約束條件系數(shù)矩陣,b 表示不等式約束條件常數(shù)矩陣。
- Aeq 表示等式約束條件系數(shù)矩陣,beq 表示等式約束條件常數(shù)矩陣。
- lb 表示決策變量的下限數(shù)組,ub表示決策變量的上限數(shù)組。
- x 表示目標(biāo)函數(shù) func 取得最小值時(shí)的決策變量取值數(shù)組。
- value 表示目標(biāo)函數(shù) func 取得的最小值。
- x0表示初始值。
- nonlcon 非線性約束,包括不等式和等式。
- options是優(yōu)化參數(shù)。
Matlab中線性規(guī)劃的標(biāo)準(zhǔn)形式:C(x)和Ceq(x)是非線性約束的不等式和等式。
min
?
f
(
x
)
\min f(x)
minf(x)
s
.
t
.
{
A
x
?
b
A
e
q
?
x
=
b
e
q
l
b
?
x
?
u
b
C
(
x
)
?
0
C
e
q
(
x
)
=
0
s.t. \begin{cases} Ax\leqslant b\\ Aeq\cdot x= beq\\ lb\leqslant x\leqslant ub\\ C(x)\leqslant0\\ Ceq(x)=0\\ \end{cases}
s.t.?
?
??Ax?bAeq?x=beqlb?x?ubC(x)?0Ceq(x)=0?
使用注意:
- 對于不存在的約束用空矩陣[]。
- 使用前需要把目標(biāo)函數(shù)和約束對象化成Matlab標(biāo)準(zhǔn)形式。
- func和nonlcon需要用M文件定義,因?yàn)榉蔷€性涉及多少次冪,線性規(guī)劃中只需要給系數(shù)矩陣即可。
- x0初始值按決策變量維度取實(shí)數(shù)即可,對求解速度會(huì)有影響,例如一下子就選中最小值的點(diǎn)為初始值。
- options可以不填。
- A、b、Aeq、beq依舊是修飾線性約束的。
Matlab使用例子
步驟:按照數(shù)模題目進(jìn)行建模,得到目標(biāo)函數(shù)和約束條件,然后把目標(biāo)函數(shù)和約束條件化為標(biāo)準(zhǔn)形式,再化成matlab里面矩陣形式,最后填入代碼中。
目標(biāo)函數(shù)+約束條件:
m
a
x
z
=
?
x
1
2
?
x
2
2
?
x
3
2
+
6
max\quad z=-{x_1}^2-{x_2}^2-{x_3}^2+6
maxz=?x1?2?x2?2?x3?2+6
s
.
t
.
{
x
1
2
?
x
2
=
0
x
1
?
x
2
2
+
x
3
3
≥
2
x
1
+
x
2
2
?
2
x
3
≤
5
x
1
,
x
2
,
x
3
≥
0
s.t. \begin{cases} {x_1}^2-x_2=0\\ x_1-{x_2}^2+{x_3}^3\geq2\\ x_1+{x_2}^2-2x_3\leq5\\ x_1,x_2,x_3\geq0\\ \end{cases}
s.t.?
?
??x1?2?x2?=0x1??x2?2+x3?3≥2x1?+x2?2?2x3?≤5x1?,x2?,x3?≥0?
Matlab標(biāo)準(zhǔn)格式化:
m
i
n
f
(
x
)
=
x
1
2
+
x
2
2
+
x
3
2
?
6
min\quad f(x)={x_1}^2+{x_2}^2+{x_3}^2-6
minf(x)=x1?2+x2?2+x3?2?6
s
.
t
.
{
x
1
2
?
x
2
+
0
?
x
3
=
0
?
x
1
+
x
2
2
?
x
3
3
+
2
≤
0
x
1
+
x
2
2
?
2
x
3
?
5
≤
0
x
1
,
x
2
,
x
3
≥
0
s.t. \begin{cases} {x_1}^2-x_2+0*x_3=0\\ -x_1+{x_2}^2-{x_3}^3+2\leq0\\ x_1+{x_2}^2-2x_3-5\leq0\\ x_1,x_2,x_3\geq0\\ \end{cases}
s.t.?
?
??x1?2?x2?+0?x3?=0?x1?+x2?2?x3?3+2≤0x1?+x2?2?2x3??5≤0x1?,x2?,x3?≥0?
func.m
function f=func(x)
func=sum(x.^2)-6;
nonlcon.m文章來源:http://www.zghlxwxcb.cn/news/detail-728104.html
function [C,Ceq]=nonlcon(x)
C=[-x(1)+x(2)^2-x(3)^2+2;
x(1)+x(2)^2-2*x(3)-5]
Ceq=[x(1)^2-x(2)]
主文件代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-728104.html
[x,value]=fmincon('func',[2,1,0],[],[],[],[],[0,0,0],[],'nonlcon');
到了這里,關(guān)于數(shù)學(xué)建模| 非線性規(guī)劃(Matlab)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!