matlab在优化设计中的应用

更新时间:2024-03-21 05:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

优化原理

①绘图判断优化结果的正误:fplot(fun,[-1,2]);(fun为函数句柄)

1、MATLAB优化概述:

(1)目标函数的极值条件:

①多维函数的极值条件:

令梯度=0---如果该点二阶偏导数矩阵正定---改点为极小值; 必要条件:目标函数在改点梯度为0;

充分条件:在改点的hession矩阵正定,极小值点;负定,极大值点;

2、MATLAB线性规划:

见XianXing_GuiHua.m

(1)线性规划matlab步骤:

提取数学模型---化为matlab标准型---调用函数linprof进行优化; ①matlab标准型:

min f=c’x;Ax<=b,Aeqx=beq,lb<=x<=ub;

<1 如果对目标函数求最大值,应添加负号转化求最小值,约束条件也应化为matlab标准型;

<2 c,x,beq,lb,ub 均为列阵; (2)matlab函数调用:

x=linprog(c,A,b,Aeq,beq,lb,ub);x为最优解对应x的值,其他各项对应上述标准型;

[x,fval,exitflag,output]=linprog(c,A,b,Aeq,beq,lb,ub):fval为目标函数最优解,exitflag为终止迭代的条件信息,output输出有关信息变量; <1 exitflag为1,表示函数收敛到解x;

<2 如果没有Ax<=b,只需令A=[],b=[],对应等式约束也可如此; <3 lb,ub中可以出现无穷inf;

例:c=[-1 -1]';A=[1 -2;1 2];b=[4 8]';lb=[0 0]';ub=[inf

inf]';[x,fval,exitflag,output]=linprog(c,A,b,[],[],lb,ub); (3)绝对值问题:

出现绝对值如min f=|x|+|y|+|z|;可设计非负变量x1,x2作如下替换: x1=(x+|x|)/2, x2=(|x|-x)/2;将目标函数和约束条件全部进行转化;

3、MATLAB非线性规划:

(约束或目标函数之一为非线性); (1)一维最优化方法:

① 一维搜索法的matlab求解---fminbnd:

[x,fval,exitflag,output]=fminbnd(fun,x1,x2,options);(fun为函数

句柄)

适用:min f(x) s.t.x1

<1 如果函数的最小值恰好在边界取得,fminbnd将返回该区间的一个内点,且与其端点的距离不超过2TolX;

<2 有时只能搜索到极小值,并非最小值,可绘图判断正误; <3 标记最值点:plot(x,fval,'r*'); 例:[x,fvla]=fminbnd(@fun,lb,ub); (2)matlab求解无约束优化:

①无约束非线性优化函数fminunc:

[x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0,options); <1 x0为搜寻初值,可以为向量、标量、矩阵;grad为解在x处的梯度值;hessian为解在x处的hessian矩阵;

<2 fminunc可以设置options使用不同的算法对非线性规划问题进行求解; (3)fminsearch:

[x,fval,exitflag,output]=fminsearch(fun,x0,options);

①fminunc最小化问题求解时,要求判断目标函数在优化变量处的梯度和hessian矩阵,仅适用目标函数连续的情况;

②fminsearch函数可以用来求解目标函数不可导问题,包括不连续、在最优解附近出现奇异等问题;

(4)求解多维约束优化fmincon:

①问题格式:min f(x);

c(x)<=0,ceq(x)=0;(非线性约束)

Ax<=b,Aeqx=beq,lb<=x<=ub;(线性约束)

②[x,fval,exitflag,output,lambda,grad,hessian] =fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) <1 lambda为各个约束所对应的拉格朗日乘子; <2 nonlcon中定义了非线性约束c(x),ceq(x): function [c,ceq]=fun2(x) c=…;ceq=…;

例:[x,fval,exitflag]=fmincon(@fun,x0,A,b,[],[],[],[],@fun2)

4、MATLAB其他规划:

(1)二次规划问题quadprog:

该问题也可用fmincon函数解决(其更简单);

①数学模型:min f(x)=1/2*x’*H*x+f’*x;(第一部分为二次型)

Ax<=b,Aeqx=beq,lb<=x<=ub;(线性约束)

②[x,fval,exitflag,output]

=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) (2)多目标规划问题:

①数学模型:min f1(x);

min f2(x);

c(x)<=0,ceq(x)=0;(非线性约束)

Ax<=b,Aeqx=beq,lb<=x<=ub;(线性约束)

②[x,fval,attainfactor,exitflag,output,lambda]

=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) <1 attainflag为解x处的目标规划因子; <2 nolcon函数为编写的非线性约束函数: function [c,ceq]=mycon(x) c=…;ceq=…;

<3 goal为想要达到的目标函数值向量;weight为权重向量,一般取weight=abs(goal);

本文来源:https://www.bwwdw.com/article/q4w8.html

Top