Matlab非线性规划之fmincon()函数 您所在的位置:网站首页 matlab函数有哪些 Matlab非线性规划之fmincon()函数

Matlab非线性规划之fmincon()函数

#Matlab非线性规划之fmincon()函数| 来源: 网络整理| 查看: 265

关于非线性规划

非线性规划问题是指目标函数或者约束条件中包含非线性函数的规划问题。 前面我们学到的线性规划更多的是理想状况或者说只有在习题中,为了便于我们理解,引导我们进入规划模型的一种情况。相比之下,非线性规划会更加贴近实际的生活。那这节我们先通过一个类似于线性规划中linprog()函数的fmincon()来体会一下这类问题的解决过程。

一、fmincon()的基本形式

在这里插入图片描述 基本形式如下:x = fmincon(‘fun’,x0,A,b,Aeq,beq,lb,ub,‘nonlcon’,options) ; (1)‘fun’为目标函数,注意需要单引号,或者@,或者直接在定义时写成匿名函数即可,后面的nonlcon为非线性约束(包括等式和不等式),形式要求同fun; (2)x0表示决策变量的初始值,可以随机取一组符合约束条件的数据值,一般来讲没什么影响; (3)A,b,Aeq,beq分别表示线性的不等式约束和等式约束,Ax fun=@(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2; >> x0=[0,0]; >> A=[1,-2]; >> b=1; >> Aeq=[2,1]; >> beq=1; >> [x,y]=fmincon(fun,x0,A,b,Aeq,beq)

结果如下

x = 0.4149 0.1701 y = 0.3427 3.带有非线性约束的求最值

上面两题只有目标函数是非线性的,那么接下来的题目其约束条件也是非线性的,我们又该怎么办呢?

目标函数 f (x) = x1^2 + x2^2 + x3^2 + 8求最小值 x1^2 − x2 + x3 ^2 ≥ 0%非线性不等式约束 x1 + x2^2 + x3 ^3 ≤ 20%非线性不等式约束 − x1 − x2^2 + 2 = 0%非线性等式约束 x2 + 2x3^2 = 3x1%非线性等式约束 x1,x2 , x3 ≥ 0

做法如下 先编写两个函数,一个为目标函数,另一个为非线性约束条件,最后调用

function f=fun1(x) f=sum(x.^2)+8; end function [g,h]=fun2(x) g=[-x(1)^2+x(2)-x(3)^2 x(1)+x(2)^2+x(3)^2-20]; h=[-x(1)-x(2)^2+2 x(2)+2*x(3)^2-3x1]; end [x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2') %rand(3,1)表示一个三行一列且每个元素属于0到1的矩阵,及快速生成符合本题条件的x0 %zeros3(3,1)生成一个三行一列的零矩阵用以表示决策变量的下界

结果如下

x = 0.7472 1.1193 0.7490 y = 10.3722 4.非线性约束

最后一个例子我们目标函数为fun = 100*(x2-x12)2+(1-x1)^2 在以(1/3,1/3)为圆心,1/3为半径的边界约束条件下求其最小值 约束条件还有` 0 ≤ x (1) ≤ 0.5 , 0.2≤x(2)≤0.8

function f=fun1(x) f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; end function [g,h]=fun2(x) g=(x(1)-1/3)^2+(x(2)-1/3)^2-1/9; h=[]; end [x,y]=fmincon('fun1',[1/3,1/3],[],[],[],[],lb,ub,'fun2')

结果如下`

x = 0.5000 0.2500 y = 0.2500 总结 以上就是我们这次所有的例题求解了。 非线性规划求最值的fmincon函数其实和线性规划的improg大同小异,关键是对非线性约束条件的把握,即nonlcon,以及option(一般情况下我们不用管,默认值就可以了,有需求具体查阅使用即可)。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有