第10章MATLAB优化设计jsp.docx

上传人:b****1 文档编号:1610339 上传时间:2023-05-01 格式:DOCX 页数:16 大小:49.73KB
下载 相关 举报
第10章MATLAB优化设计jsp.docx_第1页
第1页 / 共16页
第10章MATLAB优化设计jsp.docx_第2页
第2页 / 共16页
第10章MATLAB优化设计jsp.docx_第3页
第3页 / 共16页
第10章MATLAB优化设计jsp.docx_第4页
第4页 / 共16页
第10章MATLAB优化设计jsp.docx_第5页
第5页 / 共16页
第10章MATLAB优化设计jsp.docx_第6页
第6页 / 共16页
第10章MATLAB优化设计jsp.docx_第7页
第7页 / 共16页
第10章MATLAB优化设计jsp.docx_第8页
第8页 / 共16页
第10章MATLAB优化设计jsp.docx_第9页
第9页 / 共16页
第10章MATLAB优化设计jsp.docx_第10页
第10页 / 共16页
第10章MATLAB优化设计jsp.docx_第11页
第11页 / 共16页
第10章MATLAB优化设计jsp.docx_第12页
第12页 / 共16页
第10章MATLAB优化设计jsp.docx_第13页
第13页 / 共16页
第10章MATLAB优化设计jsp.docx_第14页
第14页 / 共16页
第10章MATLAB优化设计jsp.docx_第15页
第15页 / 共16页
第10章MATLAB优化设计jsp.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第10章MATLAB优化设计jsp.docx

《第10章MATLAB优化设计jsp.docx》由会员分享,可在线阅读,更多相关《第10章MATLAB优化设计jsp.docx(16页珍藏版)》请在冰点文库上搜索。

第10章MATLAB优化设计jsp.docx

第10章MATLAB优化设计jsp

第10章优化设计中的应用

在优化问题中,根据变量、目标函数和约束数的不同,可以将问题大致分为:

●线性优化目标函数和约束函数均为线性。

●二次优化目标函数为二次函数,而约束条件为线性方程:

线性优化和二次优化统称为简单优化。

●非线性优化目标函数为非二次的非线性函数,或约束条件为非线性方程。

●多任务目标优化目标函数并非一个时,称为多任务优化问题。

本章将对以上几类优化问题材在MATLAB中的实现作比较详细的讲解。

另外,还将介绍两个利用优化方法解非线性方程的函数。

(一)线性优化

线性优化问题即目标函数和约束条件均为线性的问题

其标准形式为:

MinC'xxRn

Sub.toAx=b

x≥0

其中ARm×n,m≤n(通常m<n=,bRn,CRn均为数值矩阵.

标准形式的线性优化问题简称LP(LinearProgramming)为问题。

其他形式的线性优化问题经过适当的变换均可以化为此种标准型。

线性优化问题在工农业及其他生产部门中应用十分广泛。

在MATLAB中,线性优化问题由lp函数求解。

1.函数介绍

●lp线性规划函数

Øx=lp(f,A,b)解如下形式的线性规划问题。

minf'x

x

Subjectto:

Ax≤b

Øx=lp(f,A,b,vlb,vub)参数vlb,vub给出设计变量的上下边界约束,即vlb≤x≤vub.

Øx=lp(f,A,b,vlb,vub,x0)设置初值x0.

Øx=lp(f,A,b,vlb,vub,x0,N)指出由A、b定义的约束中前N个为等式约束。

Øx=lp(f,A,b,vlb,vub,x0,N,DISPLAY)控制警告信息显示,当时DISPLAY=-1不显示警告信息。

Ø[x,LAMBDA]=lp(f,A,b)返回解的一组拉格朗日积。

Ø[x,LAMBDA,HOW]=lp(f,A,b)返回信息,指出最终迭代的错误条件。

注意当解为无边界或非真实时,lp产生警告信息。

2.应用举例

求下面的优化问题。

Min-5x1+4x2+2x3

Sub.to6x1-x2+x3≤8

X1+2x2+4x3≤10

3≥x1≥-1

2≥x2≥0

x3≥0

此问题即为线性优化的标准型问题。

解:

●MATLAB实现

>>c=[-5,4,2];a=[6,-1,1;1,2,4,];b=[8,10];

>>vlb=[-1,0,0];vub=[3,2];

>>[x,lam]=lp(c,a,b,vlb,vub)

x=

1.3333

0

0

lam=

0.8333

0

0

3.1667

2.8333

0

0

说明x解为最优解;lam说明条件6x1-x2+x3≤8和x2≥0及x3≥0发挥了作用。

下成再看一个实际中的应用问题。

例10.2某车间生产A和B两种产品。

为了生产A和B,所需的原料分别为2个和3个单位,而所需的工时分别为4个和2个单位,现在可以应用的原料为100个单位,工时为120个单位,每生产一台A和B分别可获得利润6元和4元,应当安排生产A、B各多少台,才能获得最大的利润?

●分析:

此问题的数学表达式为,设该车间应安排生产的A、B的数量分别为x1台,x2台,那么问题是求解最大值函数z=6x1+4x2.

x1,x2应满足如下条件:

原材料方面2x1+3x2≤100

工时方面4x1+2x2≤120

非负条件x1,x2≥0

即:

maxz=6x1+4x2minz=-6x1-4x2

Sub.to2x1+3x2≤100Sub.to2x1+3x2≤100

4x1+2x2≤1204x1+2x2≤120

x1,x2≥0x1,x2≥0

经过此变换化为标准型。

●MATLAB实现

c=[-6,-4];

a=[2,3;4,2];

b=[100,120];

vlb=[0,0];

vub=[];

[x,lam]=lp(c,a,b,vib,vub)

(二)二次优化

二次优化问题简称为QP(QuadraticProgramming)问题。

标准形式如下:

Minq(x)=xTGx+qTx

Sub.toA1x1=b1

A2x2≥b2

[B.C.]

其中x∈Rn,GRn×n为对称阵,q∈Rn,下标1表不等式约束,下标2表示不等式约束。

若G正定,则问题为凸二次规划问题,它有惟一的全局解。

在实际问题中遇到的绝大多数都是此类问题。

在MATLAB中,二次优化问题可由函数qp求解。

1.函数介绍

●qp二次规划函数

Øx=qp(H,f,A,b)解决如下形式的二次规划问题

min0.5x'Hx+f'x

x

Sub.to:

Ax≤b

Øx=qp(H,f,A,b,vlb,vub)参数vlb、vub给出设计变量的上下边界约束,

即vlb≤x≤vub

Øx=qp(H,f,A,b,vlb,vub,x0)设置初值x0.

ØX=qp(H,f,A,b,vlb,vub,x0,n)指出由A、b定义的约束中前n个为等式约束。

ØX=qp(H,f,A,b,vlb,vub,x0,n,DISPLAY)控制警告信息显示,当DISPLAY=-1时不显示警告信息。

Ø[x,LAMBDA]qp(H,f,A,b)返回解的一组拉格朗日积LAMBDA.

Ø[x,LAMBDA,HOW]=qp(H,f,A,b)返回信息,指出最终迭代的错误条件。

注意当解为无边界或非真实时,产生警告信息。

2.应用举例

【例10.3】求解如下二次优化问题。

解:

此即为二次优化的标准型。

Sub.tox1+x2≤2

-x1+2x2≤2

2x1+x2≤3

x1,,x2≥0

●MATLAB实现

h=[1,-1;-1,2];

c=[-2;-6]

a=[11;-12;21]

b=[2;2;3]

[x,l]=qp(h,c,a,b,zreros(2,1))

当所给函数并非标准确性型时,需要作一些变换,看下面的例子。

【例10.4】求解如下二次优化问题。

minf(x)=x12+x22-4x1+4

Sub.tox1-x2+2≥0

-x1+x2-1≥0

x1,x2≥0

解:

可以看出目标函数并非标准型,需要作以下变换

其中常数项与优化计算无关。

●MATLAB实现

>>h=[2,0;0,1];

>>c=[-4,0];

>>a=[-1,1;1,-1];

>>b=[2;-1];

>>x=qp(h,c,a,b,zeros(2,1))

x=

1.5000

2.5000

(三)非线性无约束优化问题

1、fmin单变量的最小函数值

格式1:

fmin(’F’,x1,x2)

功能:

返回自变量x在区间(x1,x2)上函数F取最小值时的x值。

F为目标函数的函数名。

格式2:

fmin(’F’,x1,x2,options)

其中:

options为控制参数向量,可查foptions得到具体的值。

如:

options

(1)为负值时,则显示计算过程,默认值options

(1)为0

options

(2)为结果x的误差范围,默认值1.e-4

options(3)为优化函数精度控制,默认值1.e-4

options(4)为违反约束的结束标准,默认值1.e-6

options(5)策略选择,不常用

options(6)优化程序方法选择,值为0时为BFGS算法,值为1时为DFP算法。

options(7)线性查值算法选择,值为0时为混合插值算法,值为1时为立方查找算法。

options(8)函数值显示(目标达到问题中的Labmda)

options(9)若需要检测用户提供的导数,则设为1

options(10)函数和约束求值的数目

options(11)函数导数求值的个数

options(12)约束求值的数目

options(13)约束求值的数目

options(14)函数求值的最大次数

options(15)用于目标-达到问题的特殊目标

options(16)优化过程变量的最小梯度值

options(17)优化过程变量的最小梯度值

options(18)步长设置(默认为1或更小)

例1:

求п的近似值

fmin(‘cos’,3,4)

例2:

计算函数

在(0,1)范围内的最小值点

fmin(‘(x^3+cos(x)+x*log(x))/exp(x))’,0,1)

2、fmins多变量最小函数值

格式1:

x=fmins(’F’,x0)

格式2:

x=fmins(’F’,x0,options)

例3:

计算

的最小值点。

x=fmins(’2*x

(1)^3+4*x

(1)*x

(2)^3-10*x

(1)*x

(2)^2’,[0,0])

3、fminu多变量最小值时函数的变量值

格式1:

x=fminu(’F’,x0),以矩阵x0为初值,求函数F的最小值

格式2:

x=fminu(’F’,x0,options)

格式3:

x=fminu(’F’,x0,options,‘gradfun’),gradfun为点x的偏导函数Df/dx

注意:

默认的算法为二次三次混合线搜索过程的BFGSQuasi-Newton方法

例:

求函数

的最小值

fun=‘exp(x

(1)*(4*x

(1)^2+2*x

(2)^2+4(x

(1)*x

(2)+2*x

(2)+1)’

x0=[-11]

options=[]

[x,options]=fminu(fun,x0,options)

x%最优解

options(8)%解处的函数值

options(10)%函数的调用次数

例分别用BFGS方法和DFP方法求解如下函数的最小值点

pfun.m

functionf=pfun(x)

f=(x

(1)+x

(2)^2+5*(x(3)-x(4))^2+(x

(2)-2*x(3))^4+10*(x

(1)-x(4))^4)

x0=[3,-1,0,1]

●BFGS方法:

BFGS方法是一个著名的解无约束最优化问题的拟牛顿方法。

采用混合插值法:

options(6)=0

options(7)=0

fminu(‘pfun’,x0,options)

采用立方插值法:

options(6)=0

options(7)=1

fminu(‘pfun’,x0,options)

●DFP方法:

采用混合插值法:

options(6)=1

options(7)=0

fminu(‘pfun’,x0,options)

采用立方插值法:

options(6)=1

options(7)=1

fminu(‘pfun’,x0,options)

 

(四)最小二乘优化问题

非线性最小二乘问事处题材,简称LS(LeastSqaures)问题,它的标准形式如下:

minF(x)=∑ri(x)=r’'r,x∈Rn,mn

其中r=r(x)=(r1(x)r2(x)…,rm(x))'称为剩余量,某些ri(x)为非线性函数。

最小二乘问题大量应用实际拟合问题中,它固然可以用无约束优化的方法解,然而,由于此问题目标函数的特殊结构,因此可以对某些方法进行改造,使之更简单或更有效。

另外,也可由此构造一些针对此问题的特殊方法。

在MATLAB中,最小二乘问题的求解可由函数leastsq进行。

1、leastsq

(1)函数介绍

●leastsq解决非线性最小二乘问题。

●leastsq可解决以下形式的问题:

Øminsum{fun(x)2}函数fun和x可以为向量或矩阵。

(2)使用说明

Øx=leastsq('fun',x0)以x0为初值,寻找M文件中fun(x)返回的函数值的平方和的最小值,fun返回目标函数的向量。

注意,fun返回fun(x),而非平方和。

Øx=leastsq('fun',x0,options)函数输入选择参数由向量options定义。

●options

(2)为解x的精度要求参数。

●options(3)为求解过程的目标函数的精度要求参数,参见helpfoptions。

Øx=leastsq('fun',x,options,'gradfun')输入参数函数gradfun可以返回在点x(以列保存)的偏导数函数dF/dx,gf=gradrun(x).

ØX=leastsp('fun',x,options,'gradfun',p1,p2…)输入参数p1,p2…并直接输给函数run和gradfun,形式为fun(x,xdata,p1,p2…)和gradfun(x,xdata,p1,p2…)。

使用options和gradfun默放值时输入空矩阵。

Ø[x,options,F,J]=ieastsp('fun',x0…)返回F在解x处函数fun(x)的值和在解点处的Jacobi矩阵J。

2、curvefit

(1)函数介绍

curvefit解非线性小二乘问题。

curvefit解决形如下式的问题:

minsum{(fun(x,xdata)-ydata)2}

x

其中fun.xdata和ydata为向量。

(2)函数说明

Øx=xurvefit('fun',x0,xdata,ydata)以x0为初值寻找非线性方程fun(x,xdata)对数据ydata的小二乘最佳系数x。

run为计算以x和xdata为参数的函数,返回目标函数值向量F=fun(x,xdata)。

Øx=curvefit('fun',x0,xdata,ydata,options)函数输入选择参数由向量options定义。

如:

options

(2)为解x的精度要求参数。

options(3)为求解过程的目标函数的精度要求参数,参见helpfoptions.

Øx=curvefit('fun',x,xdata,ydata,options,'gradfun')函数gradfun是返回在解点x处(以列保存)的编导数函数dF/dx,即gf=gradfun(x,xdata,ydata).

ØX=curvefit('fun',x,xdata,ydata,options,'gradfun’,p1,p2,…)参数p1、p2,…直接输出给函数fun和gradfun,即fun(x,xdata,p1,p2,…)和gradfun(x,xdata,p1,p2…)。

使用options和gradfun默认值时输入空矩阵。

Ø[x,options,F,J]=curvefit('fun',x0,xdata,ydata,…)返回F在解x处函数fun(x,xdata)-ydata的值、Jacobi矩阵J和在解点处的fun值。

(五)强制约束问题

除了自由约束外,还有一种带有约束条件的优化问题,即为强约束问题。

本节介绍“罚函数法”在求解非线性优化问题中的MATLAB实现。

1、函数介绍

●constr求解多变量的强约束最小值问题

调用格式:

Øx=constr(‘fun’,x0)

Øx=constr(‘fun’,x0,options)

Øx=constr(‘fun’,x0,options,vlb,vub)

Øx=constr(‘fun’,x0,options,vlb,vub,‘gradfun’)

Øx=constr(‘fun’,x0,options,vlb,vub,‘gradfun’,p1,p2,……)

(1)函数返回两个函数值F和约束矩阵G[F,G]=fun(x)

(2)x0为初值

(3)options,可选参数,同前

(3)vlb,vub为x的上下限

(4)函数gradfun返回函数的偏导数和在x的约束的偏导[GF,GC]=gradfun(x)

(5)p1,p2等是输入函数的参数值,直接输入给函数fun(x,p1,p2)和gradfun(x,p1,p2)

Ø[x,options]=constr(‘fun’,x0,……)

能够返回使用优化方法的参数值

2、举例

funf=‘f=exp(x

(1)*(4*x

(1)^2+2*x

(2)^2+4(x

(1)*x

(2)+2*x

(2)+1)’

fung=‘g=[1.5+x

(1)*x

(2)-x

(1)-x

(2)-x

(1)*x

(2)-10]’

fun=[funf,fung]

x0=[-11]

options=[]

[x,options]=constr(‘fun’,x0,options)

options(8)%查看解处的函数值

解处的约束:

g=[1.5+x

(1)*x

(2)-x

(1)-x

(2)-x

(1)*x

(2)-10]

例边界问题:

funf=‘f=exp(x

(1)*(4*x

(1)^2+2*x

(2)^2+4(x

(1)*x

(2)+2*x

(2)+1)’

fung=‘g=[1.5+x

(1)*x

(2)-x

(1)-x

(2)-x

(1)*x

(2)-10]’

fun=[funf,fung]

x0=[-11]%初值

options=[]%默认参数

vlb=zeros(1,2)%边界

vub=[]

[x,options]=constr(‘fun’,x0,options,vlb,vub)

options(8)%查看解处的函数值

解处的约束:

g=[1.5+x

(1)*x

(2)-x

(1)-x

(2)-x

(1)*x

(2)-10]

例:

用户提供导数:

 

funf=‘f=exp(x

(1)*(4*x

(1)^2+2*x

(2)^2+4(x

(1)*x

(2)+2*x

(2)+1)’

fung=‘g=[1.5+x

(1)*x

(2)-x

(1)-x

(2)-x

(1)*x

(2)-10]’

fun=[funf,fung]

x0=[-11]%初值

options=[]%默认参数

%偏导数

dfdx1=’exp(x

(1)*(4*x

(1)^2+2*x

(2)^2+4(x

(1)*x

(2)+2*x

(2)+1)+4*exp(x

(1))*(2*x

(1)*x

(2));’

dfdx2=’4*exp(x

(1)*(x

(1)+x

(2)+0.5);’

GF=[dfdx1,dfdx2]

FC=’[x

(2)-1,-x

(2);x

(1)-1,-x

(1)];’

grad=[GF,FC]

[x,options]=constr(‘fun’,x0,options,[],[],grad)

options(8)%查看解处的函数值

g=[1.5+x

(1)*x

(2)-x

(1)-x

(2)-x

(1)*x

(2)-10]%解处的约束值

 

例:

加上一个等式:

x1+x2=0

funf=‘f=exp(x

(1)*(4*x

(1)^2+2*x

(2)^2+4(x

(1)*x

(2)+2*x

(2)+1)’

fung=‘g=[1.5+x

(1)*x

(2)-x

(1)-x

(2)-x

(1)*x

(2)-10]’

fun=[funf,fung]

x0=[-11]&初值

options(13)=1%默认参数

[x,options]=constr(‘fun’,x0,options)

options(8)%查看解处的函数值

 

(六)目标-达到问题的优化

attgoal求解多任务-到达优化问题

x=attgoal(‘fun’,x0,goal,weight)

x=attgoal(‘fun’,x0,goal,weight,options)

[x,options]=attgoal(‘fun’,x0,goal,weight,options,vlb,vub)

[x,options]=attgoal(‘fun’,x0,goal,weight,options,vlb,vub,’gradfun’)

[x,options]=attgoal(‘fun’,x0,goal,weight,options,vlb,vub,’gradfun’,p1,p2,……)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2