最优化方法实验报告Word格式文档下载.docx

上传人:b****5 文档编号:19142062 上传时间:2023-01-04 格式:DOCX 页数:30 大小:1.11MB
下载 相关 举报
最优化方法实验报告Word格式文档下载.docx_第1页
第1页 / 共30页
最优化方法实验报告Word格式文档下载.docx_第2页
第2页 / 共30页
最优化方法实验报告Word格式文档下载.docx_第3页
第3页 / 共30页
最优化方法实验报告Word格式文档下载.docx_第4页
第4页 / 共30页
最优化方法实验报告Word格式文档下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

最优化方法实验报告Word格式文档下载.docx

《最优化方法实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《最优化方法实验报告Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。

最优化方法实验报告Word格式文档下载.docx

无约束非线性最小化

fseminf

半无限问题

linprog

线性课题

quadprog

二次课题

2.方程求解函数

表2方程求解函数表

/

线性方程求解

fsolve

非线性方程求解

fzero

标量非线性方程求解

3.最小二乘(曲线拟合)函数

表3最小二乘函数表

线性最小二乘

lsqlin

有约束线性最小二乘

lsqcurvefit

非线性曲线拟合

lsqnonlin

非线性最小二乘

lsqnonneg

非负线性最小二乘

4.实用函数

表4实用函数表

optimset

设置参数

optimget

5.大型方法的演示函数

表5大型方法的演示函数表

circustent

马戏团帐篷问题—二次课题

molecule

用无约束非线性最小化进行分子组成求解

optdeblur

用有边界线性最小二乘法进行图形处理

6.中型方法的演示函数

表6中型方法的演示函数表

bandemo

香蕉函数的最小化

dfildemo

过滤器设计的有限精度

goaldemo

目标达到举例

optdemo

演示过程菜单

tutdemo

教程演示

下面以我们最常用的线性规划模型求解函数linprog作为典型对优化工具箱进行简单的介绍。

linprog函数

功能:

求解线性规划问题。

在命令窗口,键入doclinprog,得到下图(该图为帮助窗口)

数学模型:

其中f, 

x, 

b, 

beq, 

lb和ub为向量,A 

和Aeq为矩阵。

语法:

x=linprog(f,A,b,Aeq,beq)

x=linprog(f,A,b,Aeq,beq,lb,ub)

x=linprog(f,A,b,Aeq,beq,lb,ub,x0)

x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)

[x,fval]=linprog(...)

[x,fval,exitflag]=linprog(...)

[x,fval,exitflag,output]=linprog(...)

[x,fval,exitflag,output,lambda]=linprog(...)

描述:

x=linprog(f,A,b)求解问题minf'

*x,约束条件为A*x<

=b。

x=linprog(f,A,b,Aeq,beq)求解上面的问题,但增加等式约束,即Aeq*x=beq。

若没有不等式存在,则令A=[]、b=[]。

x=linprog(f,A,b,Aeq,beq,lb,ub)定义设计变量x的下界lb和上界ub,使得x始终在该范围内。

若没有等式约束,令Aeq=[]、beq=[]。

x=linprog(f,A,b,Aeq,beq,lb,ub,x0)设置初值为x0。

该选项只适用于中型问题,缺省时大型算法将忽略初值。

x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的优化参数进行最小化。

[x,fval]=linprog(...)返回解x处的目标函数值fval。

[x,lambda,exitflag]=linprog(...)返回exitflag值,描述函数计算的退出条件。

[x,lambda,exitflag,output]=linprog(...)返回包含优化信息的输出变量output。

[x,fval,exitflag,output,lambda]=linprog(...)将解x处的拉格朗日乘子返回到lambda参数中。

变量:

lambda参数

lambda参数是解x处的拉格朗日乘子。

它有以下一些属性:

 

lambda.lower 

–lambda的下界。

lambda.upper 

–lambda的上界。

lambda.ineqlin 

–lambda的线性不等式。

lambda.eqlin 

–lambda的线性等式。

其它参数意义同前。

算法:

大型优化算法 

大型优化算法采用的是LIPSOL法,该法在进行迭代计算之前首先要进行一系列的预处理。

中型优化算法 

linprog函数使用的是投影法,就象quadprog函数的算法一样。

linprog函数使用的是一种活动集方法,是线性规划中单纯形法的变种。

它通过求解另一个线性规划问题来找到初始可行解。

诊断:

大型优化问题 

算法的第一步涉及到一些约束条件的预处理问题。

有些问题可能导致linprog函数退出,并显示不可行的信息。

在本例中,exitflag参数将被设为负值以表示优化失败。

若Aeq参数中某行的所有元素都为零,但Beq参数中对应的元素不为零,则显示以下退出信息:

Exitingduetoinfeasibility:

anallzerorowintheconstraintmatrixdoesnothaveazeroincorrespondingrighthandsizeentry.

若x的某一个元素没在界内,则给出以下退出信息:

objectivef'

*xisunboundedbelow.

若Aeq参数的某一行中只有一个非零值,则x中的相关值称为奇异变量。

这里,x中该成分的值可以用Aeq和Beq算得。

若算得的值与另一个约束条件相矛盾,则给出以下退出信息:

Singletonvariablesinequalityconstraintsarenotfeasible.

若奇异变量可以求解但其解超出上界或下界,则给出以下退出信息:

singletonvariablesintheequalityconstraintsarenotwithinbounds.

应用实例

这是matlab帮助窗口里给出的一个例子:

Findxthatminimizes

f(x)=–5x1–4x2–6x3,

subjectto

x1–x2+x3≤20

3x1+2x2+4x3≤42

3x1+2x2≤30

0≤x1,0≤x2,0≤x3.

First,enterthecoefficients

f=[-5;

-4;

-6];

A=[1-11

324

320];

b=[20;

42;

30];

lb=zeros(3,1);

Next,callalinearprogrammingroutine.

[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb);

ExaminethesolutionandLagrangemultipliers:

x,lambda.ineqlin,lambda.lower

x=

0.0000

15.0000

3.0000

ans=

1.5000

0.5000

1.0000

下面在来用linprog解我们最优化考试的题:

Minf(x)=-3x1+x2+x3;

S.T.x1–2*x2+x3<

=11

-4*x1+x2+2*x3–x4=3

-2*x1+x3=1

X1,x2,x3,x4>

=0;

在matlabcommandwindow中键入以下指令:

f=[-3;

1;

1];

>

A=[1-21;

4-1-2];

b=[11;

-3];

Aeq=[-201];

beq=1;

lb=zeros(3,1);

[x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb)

Optimizationterminated.

x=

4.0000

9.0000

fval=

-2.0000

exitflag=

1

实验二  一维搜索方法的MATLAB实现(2学时)

通过本次实验应使学生掌握如何使用MATLAB软件进行一维搜索,并学会对具体问题进行分析。

1、0.618法的MATLAB实现

2、Fibonacci法的MATLAB实现

本次实验是学生初次使用MATLAB进行优化问题的实验,本次实验就是要通过对一些具体问题的分析学会软件的操作并加深对理论知识的理解。

具体问题的步长因子的确定,理解、掌握精度与效率的关系。

0.618法和Fibonacci法都是分割方法,其基本思想是通过取试探点和进行函数值的比较,使包含极小点的搜索区间不断缩短,当区间长度缩短到一定程度时,区间上每个点的函数值均接近极小值,从而各点可以看作为极小点的近似。

这类方法仅需计算函数值,不涉及导数,又称直接法。

他们用途很广,尤其适用于非光滑及导数表达式复杂或写不出的情形。

注意,这些方法要求所考虑区间上的目标函数是单峰函数,如果这个条件不满足,我们可以把所考虑的区间分成若干个小区间,在每个区间上的函数式单峰的。

这样,我们在每个小区间上求极小点,然后选取其中的最小点。

一0.618法

1.0.618法方法原理:

0.618法的基本思想是通过取试探点使包含极小点的区间(不确定区间)不断缩短,当区间长度小到一定程度时,区间上各点的函数值均接近极小值,因此任意一点都可作为极小点的近似.

0.618法计算试探点的公式:

2.0.618法的算法步骤:

置初始区间

及精度要求

计算试探点

计算函数值

.计算公式是

.

则停止计算.否则,当

时,转步骤

;

转步骤

返回步骤

MATLAB实现:

3.代码及数值算例:

(1)程序源代码:

function[X,FMIN,K]=find0618(f,a1,b1,e)

%[X,FMIN,K]=find0618(f,a1,b1,e)0.618法一维搜索

%f目标函数

%a1,b1初始区间

%e精度要求

%X极小点

%FMIN极小值

%K迭代次数

%2014张超

a=a1;

b=b1;

k=1;

r=a+0.328*(b-a);

u=a+0.618*(b-a);

while1

iff(r)>

f(u)

if(b-r)<

=e

u;

break;

else

a=r;

b=b;

r=u;

end

elseif(u-a)<

r;

else

a=a;

b=u;

u=r;

r=a+0.382*(b-a);

end

k=k+1;

X=(r+u)/2;

FMIN=double(f(X));

K=k;

(2)数值算例:

Minf(x)=2*x*x–x–1;

初始区间

精度e<

=0.16.

键入命令并输出结果:

symsx

f(x)=2*x^2-x-1;

a1=-1;

b1=1;

e=0.16;

[X,FMIN,K]=find0618(f,a1,b1,e)

X=

0.2258

FMIN=

-1.1238

K=

6

二Fibonacci法

1.Fibonacci法基本原理和步骤

思想:

搜索区间长度缩短率采用Fibonacci数

1123581321345589……

2.代码及数值算例:

function[X,Fmin,K]=fibonacci(f,a0,b0,e)

%fibonacci()Fibonacci法求极小值

%X极值点

%Fmin极小值

%K需要用到第K个Fibonacci数

%a0,b0初始搜索区间

%e精度

%张超编写于2014/04/01

a=a0;

b=b0;

F=[11];

i=1;

whileF(i)<

=(b-a)/e

F(i+2)=F(i)+F(i+1);

i=i+1;

m=i;

r=a+F(m-2)/F(m)*(b-a);

u=a+F(m-1)/F(m)*(b-a);

fork=1:

m-3

iff(r)<

r=a+F(m-k-2)/F(m-k)*(b-a);

u=a+F(m-k-1)/F(m-k)*(b-a);

X=(r+u)/2;

Fmin=double(f(X));

K=m;

Minf(x)=x*x–x+2;

=0.08.

容易验证,在此区间上的函数为严格凸函数。

为了进行

比较我们给出其精确解:

t*=0.5,f(t*)=1.75。

f(x)=x^2-x+2;

b1=3;

e=0.08;

[X,FMIN,K]=fibonacci(f,a1,b1,e)

0.5273

1.7507

10

实验三  无约束最优化方法的MATLAB实现(2学时)

通过本次实验使学生进一步熟悉掌握使用MATLAB软件,并能利用该软件进行无约束最优化方法的计算。

1、最速下降法的MATLAB实现

2、牛顿法的MATLAB实现

3、共轭梯度法的MATLAB实现

本次实验就是要通过对一些具体问题的分析进一步熟悉软件的操作并加深对理论知识的理解。

通过同一个具体问题用不同的方法解决的比较,加深理解恰当选用优化问题解决方法的重要性。

一最速下降法

1.最速下降法基本原理和步骤

寻求最速下降方向即负梯度方向

function[X,FMIN,K]=zuisuxiajiang(f,x,x0,e)

%[X,FMIN,N]=zuisuxiajiang()法求解无约束问题

%FMIN极小值

%f问题函数

%x变量

%x0初始点

%e终止误差

%张超编写于2014/04/15

count=0;

td=jacobian(f,x)'

whilenorm(subs(td,x,x0))>

e

P=-subs(td,x,x0);

symsr

y=x0+r*P;

ft(r)=subs(f,x,y);

[r0]=fibonacci(ft,0,100,0.01);

x0=x0+r0*P;

count=count+1;

X=x0;

FMIN=subs(f,x,x0);

K=count;

二牛顿法

1.牛顿法基本原理和步骤

在第k次迭代的迭代点x(k)邻域内,用一个二次函数(如二阶泰勒多项式)去近似代替原目标函数f(x),然后求出该二次函数的极小点作为对原目标函数求优的下一个迭代点,依次类推,通过多次重复迭代,使迭代点逐步逼近原目标函数的极小点。

设f(x)二次连续可微,在点x(k)处的Hesse矩阵正定。

(2)程序源代码:

function[X,FMIN,K]=ysNewton(f,x,x0,e)

%[X,FMIN,N]=ysNewton()原始牛顿法求解无约束问题

%张超编写于2014/04/15

H=jacobian(td'

x);

P=-subs(H,x,x0)^(-1)*subs(td,x,x0);

x0=x0+P;

牛顿法对于二次正定函数只需做一次迭代就得到最优解。

特别在极小点附近,收敛性很好速度也很快。

但牛顿法也有缺点,它要求初始点离最优解不远,若初始点选的离最优解太远时,牛顿法并不能保证其收敛,甚至也不是下降方向。

为了克服牛顿法的缺点,人们保留了从牛顿法中选取牛顿方向作为搜索方向,摒弃其步长恒取1的作法,而用一维搜索确定最优步长来构造算法。

(3)程序源代码:

function[X,FMIN,K]=xzNewton(f,x,x0,e)

%[X,FMIN,N]=xzNewton()带步长牛顿法求解无约束问题

三共轭梯度法

1.共轭梯度法基本原理和步骤

思想:

将共轭性和最速下降方向相结合,利用已知迭代点处的梯度方向构造一组共轭方向,并沿此方向进行搜索,求出函数的极小点。

function[X,FMIN,K]=gongetidu(f,x,x0,e)

%[X,FMIN,N]=gongetidu()共轭梯度法求解无约束问题

count=1;

ifnorm(subs(td,x,x0))>

r0=-subs(td,x,x0)'

*P/(P'

*H*P);

x0;

whilenorm(double(subs(td,x,x0)))>

b0=subs(td,x,x0)'

*subs(td,x,x0)/(P'

*P);

P=-subs(td,x,x0)+b0*P;

四一个算例

分别用上述三中方法计算下题,并比较各算法.

Minf(x)=(x1-2)^2+(x1–2*x2)^2

初始点x0=(0,3)T

允许误差e=0.1

symsx1x2

f=(x1-2)^2+(x1-2*x2)^2;

x=[x1;

x2];

x0=[0;

3];

e=0.1;

[X,FMIN,N]=zuisuxiajiang(f,x,x0,e)

1.9763

0.9818

7.2076e-04

N=

[X,FMIN,N]=ysNewton(f,x,x0,e)

2

0

[X,FMIN,N]=gongetidu(f,x,x0,e)

N

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

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1