Page 173 - 数学建模算法与应用
P. 173
第六章 非线性规划的研究
-47-
M*abs(-x(1)-x(2)^2+2);
或者是利用 Matlab 的求矩阵的极小值和极大值函数编写 test.m 如下:
function g=test(x);
M=50000;
f=x(1)^2+x(2)^2+8;
g=f-M*sum(min([x’;zeros(1,2)]))-M*min(x(1)^2-x(2),0)+...
M*abs(-x(1)-x(2)^2+2);
我们也可以修改罚函数的定义,编写 test.m 如下:
function g=test(x);
M=50000;
f=x(1)^2+x(2)^2+8;
g=f-M*min(min(x),0)-M*min(x(1)^2-x(2),0)+M*(-x(1)-x(2)^2+2)^2;
2. 在 Matlab 命令窗口输入
[x,y]=fminunc(‘test’,rand(2,1))
即可求得问题的解。
(二)Matlab 求约束极值问题
在 Matlab 优化工具箱中,用于求解约束最优化问题的函数有:fminbnd、
fmincon、quadprog、fseminf、fminimax,上面我们已经介绍了函数 fmincon 和
quadprog。
1. fminbnd 函数
求单变量非线性函数在区间上的极小值
, x ∈ [x , x ]
1
2
Matlab 的命令为
[X,FVAL] = FMINBND(FUN,x1,x2,OPTIONS),
它的返回值是极小点 x 和函数的极小值。这里 fun 是用 M 文件定义的函数
或 Matlab 中的单变量数学函数。
2
例 求函数 f (x) = (x - 3) -1, x ∈ [0,5] 的最小值。
解 编写 M 文件 fun5.m
function f=fun5(x);
163

