你好,欢迎访问远方教程PC版!
广告位招租
网站首页 >> 统计之窗 >> MATLAB专区 >> 文章内容

Matlab技巧16:应用matlab求解约束优化问题

[日期:2016-04-06]   来源:远方教程  作者:远方教程   阅读:5161次[字体: ] 访问[旧版]
 捐赠远方教程 

一. 问题分析
f(x)=x1*x2*x3-x1^6+x2^3+x2*x3-x4^2
s.t
   x1-x2+3x2<=6
   x1+45x2+x4=7
   x2*x3*x4-50>=0
   x2^2+x4^2=14
  目标函数为多元约束函数,约束条件既有线性约束又有非线性约束 所以应用fmincon函数来寻求优化,寻找函数最小值。由于非线性不等式约束不能用矩阵表示,要用程序表示,所以创建m文件其中写入非线性不等式约束及非线性等式约束,留作引用。
二. 数学模型
F(x)为目标函数 求最小值
x1 x2 x3 x4 为未知量
目标函数受约束于 x1-x2+3x2<=6
                 x1+45x2+x4=7
                 x2*x3*x4-50>=0
                 x2^2+x4^2=14

三. fmincon应用方法
  这个函数的基本形式为
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
其中fun为你要求最小值的函数,可以单写一个文件设置函数,也可是m文件。
1.如果fun中有N个变量,如x y z, 或者是X1, X2,X3, 什么的,自己排个顺序,在fun中统一都是用x(1),x(2)....x(n) 表示的。
2. x0, 表示初始的猜测值,大小要与变量数目相同
3. A b 为线性不等约束,A*x <= b, A应为n*n阶矩阵。
4  Aeq beq为线性相等约束,Aeq*x = beq。 Aeq beq同上可求
5  lb ub为变量的上下边界, 正负无穷用 -Inf和Inf表示, lb ub应为n阶数组
6  nonlcon 为非线性约束,可分为两部分,非线性不等约束 c,非线性相等约束,ceq
可按下面的例子设置
function [c,ceq] = nonlcon1(x)
c = []
ceq = []
7, 最后是options, 可以用OPTIMSET函数设置,具体可见OPTIMSET函数的帮助文件。
四. 计算程序

运用edit 编辑m文件
此为目标函数m文件
function y=fun(x)
y=x(1)*x(2)*x(3)-x(1)^6+x(2)^3+x(2)*x(3)-x(4)^2
此为非线性约束条件m文件
function [c,ceq]=conf(x)
c(1)=x(2)*x(3)*x(4)*(-1)+50
ceq(1)=14-x(2)^2-x(4)^2

在command window 中输入
线性约束 x0初始点 及fmincon函数
A=[1 2 0 0];
b=[6];
Aeq=[1 45 0 1];
beq=[7];
x0=[1 1 1 1];
[x,fval]=fmincon(@fun,x0,A,b,Aeq,beq,[],[],@conf)
五. 计算结果分析

x =

    6.1275   -0.0637 -209.6575    3.7411


fval =

 -5.2848e+004
 

图片展示
 
相关评论
站长推荐