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
   168   169   170   171   172   173   174   175   176   177   178