最优化方法实验报告(1)

合集下载

最优化方法实验报告

最优化方法实验报告

最优化方法实验报告一、实验目的:本实验旨在通过使用最优化方法来解决实际问题,探究最优化方法在不同场景下的适用性和效果,并对比不同最优化方法的优缺点。

二、实验原理:三、实验过程:1.准备工作确定要解决的问题,并确定问题的数学模型。

例如,可以选择一个具有约束条件的优化问题,如线性规划问题。

2.实验步骤(1)选择最优化方法根据实际问题的特点选择适合的最优化方法。

例如,如果问题具有多个局部最优解,可以选择遗传算法来避免陷入局部最优。

(2)实现算法根据选择的最优化方法,编写相应的算法实现代码。

可以使用编程语言如Python来实现算法。

(3)进行实验使用实际数据或人工生成的数据来测试算法的效果。

根据实验结果评估算法的性能,并对比不同算法的效果。

3.结果分析通过对比不同算法的效果,分析各种方法的优缺点,评估其适用性和可靠性。

四、实验结果与讨论:在本次实验中,我们选择了一个线性规划问题作为例子,使用了遗传算法和优化算法来求解。

具体问题为:有两种产品A和B,产品A的利润为5元,产品B的利润为10元。

每天可以生产的产品总数为50。

产品A的生产量不超过30,产品B的生产量不超过20。

求解在满足以上约束条件下,如何安排生产计划使得总利润最大。

我们首先使用了优化算法来求解。

通过编写代码,使用优化算法来最大化总利润。

结果发现,在满足约束条件的情况下,总利润最大为350元。

然后,我们使用了遗传算法来求解。

遗传算法是一种模仿生物进化过程的算法,通过选择、交叉和变异等操作来优化解。

在实验中,我们设置了一组初始解作为遗传算法的种群,并通过不断迭代优化解。

结果发现,在相同的迭代次数下,遗传算法得到的结果比优化算法更优,总利润最大为400元。

通过对比两种算法的结果,我们发现遗传算法相对于优化算法在该问题上具有更好的性能。

遗传算法通过不断迭代寻找更好的解,能够更好地避免陷入局部最优。

五、实验结论:本实验通过使用最优化方法来解决一个实际问题,对比了优化算法和遗传算法的效果。

最优化算法实验报告

最优化算法实验报告

基于Matlab的共轭梯度算法指导老师:姓名:学号:班级:日期:基于Matlab的共轭梯度算法一、实验目的及要求(1)熟悉使用共轭梯度法求解无约束非线性规划问题的原理;(2)在掌握原理的基础上熟练运用此方法解决问题(3)学会利用计算机语言编写程序来辅助解决数学问题;(4)解决问题的同时分析问题,力求达到理论与实践的统一;(5)编写规范的实验报告.实验内容二、实验原理1.基本思想:把共轭性与最速下降方法相结合,利用已知点处的梯度构造一组共轭方向,并沿这组方向进行搜索,求出目标函数的极小点。

根据共轭方向的基本性质,这种方法具有二次终止性。

在各种优化算法中,共轭梯度法是非常重要的一种。

其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。

2.程序流图:三、实验代码通过查阅相关资料,编写一个基于Matlab的共轭梯度算法,具体代码如下:function f=grad_2d(x0,t)%用共轭梯度法求已知函数f(x1,x2)=x1^2+2*x2^2-4*x1-2*x1*x2的极值点%已知初始点坐标:x0%已知收敛精度:t%求得已知函数的极值:fx=x0;syms xi yi a; %定义自变量,步长为符号变量f=xi^2+2*yi^2-4*yi-2*xi*yi; %创建符号表达式ffx=diff(f,xi); %求表达式f对xi的一阶求导fy=diff(f,yi); %求表达式f对yi的一阶求导fx=subs(fx,{xi,yi},x0); %代入初始点坐标计算对xi的一阶求导实值fy=subs(fy,{xi,yi},x0); %代入初始点坐标计算对yi的一阶求导实值fi=[fx,fy]; %初始点梯度向量count=0; %搜索次数初始为0while double(sqrt(fx^2+fy^2))>t %搜索精度不满足已知条件s=-fi; %第一次搜索的方向为负梯度方向if count<=0s=-fi;elses=s1;endx=x+a*s; %进行一次搜索后的点坐标f=subs(f,{xi,yi},x); %构造一元搜索的一元函数φ(a)f1=diff(f); %对函数φ(a)进行求导f1=solve(f1); %得到最佳步长aif f1~=0ai=double(f1); %强制转换数据类型为双精度数值elsebreak %若a=0,则直接跳出循环,此点即为极值点endx=subs(x,a,ai); %得到一次搜索后的点坐标值f=xi^2+2*yi^2-4*xi-2*xi*yi;fxi=diff(f,xi);fyi=diff(f,yi);fxi=subs(fxi,{xi,yi},x);fyi=subs(fyi,{xi,yi},x);fii=[fxi,fyi]; %下一点梯度向量d=(fxi^2+fyi^2)/(fx^2+fy^2);s1=-fii+d*s; %下一点搜索的方向向量count=count+1; %搜索次数加1fx=fxi;fy=fyi; %搜索后终点坐标变为下一次搜索的始点坐标endx,f=subs(f,{xi,yi},x),count %输出极值点,极小值以及搜索次数end四、实验结果在命令窗口输入:f=grad_2d([1,1],0.0000001)输出结果如下:x =4.0000 2.0000f =-8.0000count = 75f =-8.0000当在命令窗口输入如下命令时:f=grad_2d([2,1],0.0000001)x =4.0000 2.0000f =-8.0000count =22f =-8.0000当在命令窗口输入如下命令时:f=grad_2d([2,1],0.001)x = 3.9996 1.9999f =-8.0000count =12f =-8.0000由以上结果可知:(1.)初始点不同搜索次数不同(2.)无论初始点为多少,精度相同时最终结果极值点都是(4.0000,2.0000)(3.)当初始点相同时,若精度不一样搜索次数和最终结果会有差异但大致相同。

最优化(实验一)

最优化(实验一)

桂林电子科技大学数学与计算科学学院实验报告最优解为:x=(2,0,1,0); 最优函数值为:-8。

()()123123123max23.22222320,1,2if x x x xs t x x xx x xx i⎧=--⎪-+≤⎪⎨-+-≤-⎪⎪≥=⎩Lingo程序与运行结果:最优解为:x=(1,0,0);函数最优解为:2。

()()1231212312max 564.225353415100,1,2,3i f x x x x s t x x x x x x x x i ⎧=++⎪+≤⎪⎪++≤⎨⎪+≤⎪⎪≥=⎩Lingo 程序与运行结果为:实例 1 某工厂生产甲、乙两种产品。

已知生产甲种产品t 1需耗A 种矿石t 10、B 种矿石t 5、煤t 4;生产乙种产品t 1需耗A 种矿石t 4、B 种矿石t 4、煤t 9。

每t 1甲种产品的利润是600元,每t 1乙种产品的利润是1000元。

工厂在生产这两种产品的计划中要求消耗A 种矿石不超过t 300、B 种矿石不超过t 200、煤不超过t 360。

甲、乙两种产品应各生产多少,能使利润总额达到最大?化为数学线性规划模型为:()12121212max 6001000.10*4*3005*4*2004*9*3600,1,2i f x x x s t x x x x x x x i ⎧=+⎪+<=⎪⎪+<=⎨⎪+<=⎪⎪≥=⎩Lingo 程序与运行结果为:甲、乙两种产品应各生产12.41379t 、34.48276t ,能使利润总额达到最大,最大利润为:41931.03。

实例2 设有A 1,A 2两个香蕉基地,产量分别为60吨和80吨,联合供应B 1,B 2,B 3三个销地的销售量经预测分别为50吨、50吨和40吨。

两个产地到三个销地的单位运价如下表所示:表1(单位运费:元/吨)问每个产地向每个销地各发货多少,才能使总的运费最少?化为数学线性规划模型:()()111213212223111213212223112112221323min 600300400400700300.608035050400,1,2,1,2,3ij f x x x x x x x s t x x x x x x x x x x x x x i j ⎧=+++++⎪++=⎪⎪++=⎪⎪+=⎨⎪+=⎪⎪+=⎪≥==⎪⎩Lingo 程序与运行结果为:A1到B2发货50t ,A1到B3发货10t ,A2到B1发货50t ,A2到B3发货30t ,才能使总的运费最少,最少值为48000。

最优化算法-第1次实验内容 ( 1 )

最优化算法-第1次实验内容 ( 1 )

《最优化算法》实验指导书1一、实验名称:Lingo软件的介绍及使用二、实验目的:熟悉LINGO软件的使用方法、功能,会求解一般线性规划问题和简单非线性规划模型。

针对实际问题,会建立线性规划模型并求解。

三、实验内容1、熟悉LINGO软件的启动步骤。

2、熟悉LINGO软件的各菜单、命令按钮的作用。

3、学会如何使用LINGO的帮助文件。

4、学会输入线性规划模型和简单非线性规划模型的基本格式,并能看懂求解结果。

四、实验步骤1启动LINGO软件的步骤。

当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。

在主窗口内的标题为LINGO Model –LINGO1的窗口是LINGO的默认模型窗口,建立的模型都要在该窗口内编码实现。

LINGO包含了内置的建模语言,允许以简练、直观的方式描述较大规模的优化问题。

模型中所需数据可以以一定的格式保存在独立的文件中。

下面举两个例子。

2、示例:用LINGO求解线性规划12121212min z2x2x2x5x12 s.t.x2x10x,x0=++≥⎧⎪+≤⎨⎪≥⎩则在LINGO的模型窗口中输入如下代码:min=2*x1+2*x2;2*x1+5*x2>=12;x1+2*x2<=10;注:(1)在输入目标函数时,因变量Z可不要输,只输“=”及后面表达式;(2)用*号表示乘号(3)每一个约束条件或目标函数后用分号“;”结束;(4)非负约束可以不要输入,软件默认变量是非负的。

(5)可以用“!”开始写说明语句,但说明语句后也要用分号“;”结束。

然后点击工具条上的运行图标,屏幕上出现Rows= 3 Vars= 2 No. integer vars= 0 ( all are linear) Nonzeros= 8 Constraint nonz= 4( 1 are +- 1) Density=0.889 Smallest and largest elements in abs value= 1.00000 12.0000 No. < : 1 No. =: 0 No. > : 1, Obj=MIN, GUBs <= 1Single cols= 0(以上这段是对模型的描述)Optimal solution found at step(最优解在第1步被找到): 1Objective value(目标函数值): 4.800000(下列显示的是最优解)Variable(变量) Value(值) Reduced Cost(缩减成本系数)X1 0.0000000 1.200000X2 2.400000 0.0000000(下列显示的是松驰变量或剩余变量)Row Slack or Surplus Dual Price(行)(松弛变量或剩余变量)(检验数,对偶问题的解)1 4.800000 -1.0000002 0.0000000 -0.40000003 5.200000 0.0000000结论:原规划的最优解是x1=0,x2=2.4;最优值为4.8注释:Reduced cost 是指缩减成本系数,基变量的一定为0,对非基变量表示该变量每增加一个单位,目标函数值减少的量(对求解max的函数而言)。

最优化方法实验

最优化方法实验

《最优化方法》实验报告实验序号:01 实验项目名称:线性规划及MATLAB应用《最优化方法》实验报告实验序号:02 实验项目名称:0.618黄金分割法的应用结果分析:根据以上结果可知,在区间[0,3]上,函数g(x)=x^3-2*x+1的最小值点在x=0.9271处,此时最小值为0。

第二题:P50 例题3.1程序:function [t,f]=golden3(a,b) %黄金分割函数的m文件t2=a+0.382*(b-a);f2=2*(t2)^2-(t2)-1;t1=a+0.618*(b-a); %按照黄金分割点赋值,更准确可直接算f1=2*(t1)^2-(t1)-1;while abs(t1-t2)>0.16; %判定是否满足精度if f1<f2a=t2;t2=t1;f2=f1;t1=a+0.618*(b-a);f1=2*(t1)^2-(t1)-1;elseb=t1;t1=t2;f1=f2;t2=a+0.382*(b-a);f2=2*(t2)^2-(t2)-1;endendt=(t1+t2)/2; %满足条件取区间中间值输出第四题:P64 T3程序:function [t,d]=newtow2(t0)t0=2.5;t=t0-(4*(t0)^3-12*(t0)^2-12*(t0)-16)/(12*(t0)^2-24*(t0)-12);k=1;T(1)=t;while abs(t-t0)>0.000005t0=t;t=t0-(4*(t0)^3-12*(t0)^2-12*(t0)-16)/(12*(t0)^2-24*(t0)-12); k=k+1;T(k)=t;endt1=t0;d=(t1)^4-4*(t1)^3-6*(t1)^2-16*(t1)+4;kTend运行结果:当x(0)=2.5当x(0)=3四.实验小结:1.通过这次实验,加深了对0.618法的理解。

2.在学习0.618法的过程中,又巩固了倒数、求解函数值等相关知识。

最优化方法实验报告(1)

最优化方法实验报告(1)

最优化方法实验报告(1)最优化方法实验报告Numerical Linear Algebra And Its Applications学生所在学院:理学院学生所在班级:计算数学10-1学生姓名:甘纯指导教师:单锐教务处2013年5月实验一实验名称:熟悉matlab基本功能实验时间: 2013年05月10日星期三实验成绩:一、实验目的:在本次实验中,通过亲临使用MATLAB,对该软件做一全面了解并掌握重点内容。

二、实验内容:1. 全面了解MATLAB系统2. 实验常用工具的具体操作和功能实验二实验名称:一维搜索方法的MATLAB实现实验时间: 2013年05月10日星期三实验成绩:一、实验目的:通过上机利用Matlab数学软件进行一维搜索,并学会对具体问题进行分析。

并且熟悉Matlab软件的实用方法,并且做到学习与使用并存,增加学习的实际动手性,不再让学习局限于书本和纸上,而是利用计算机学习来增加我们的学习兴趣。

二、实验背景:(一)0.618法(黄金分割法),它是一种基于区间收缩的极小点搜索算法,当用进退法确定搜索区间后,我们只知道极小点包含于搜索区间内,但是具体哪个点,无法得知。

1、算法原理黄金分割法的思想很直接,既然极小点包含于搜索区间内,那么可以不断的缩小搜索区间,就可以使搜索区间的端点逼近到极小点。

2、算法步骤用黄金分割法求无约束问题min (),f x x R ∈的基本步骤如下:(1)选定初始区间11[,]a b 及精度0ε>,计算试探点:11110.382*()a b a λ=+-11110.618*()a b a μ=+-。

(2)若k k b a ε-<,则停止计算。

否则当()()k k f f λμ>时转步骤(3)。

当()()k k f f λμ≤转步骤(4)。

(3)置11111110.382*()k kk k k k k k k k a b b a b a λλμμ+++++++=??=??=??=+-?转步骤(5)(4)置11111110.382*()k k k k k k k k k k a a b a b a μμλλ+++++++=??=??=??=+-?转步骤(5)(5)令1k k =+,转步骤(2)。

最优化实验报告(单纯形法的matlab程序,lingo程序)

最优化实验报告(单纯形法的matlab程序,lingo程序)

最优化实验报告(单纯形法的matlab程序,lingo程序)实验一:线性规划单纯形算法一、实验目的通过实验熟悉单纯形法的原理,掌握Matlab 循环语句的应用,提高编程的能力和技巧。

二、实验用仪器设备、器材或软件环境Windows Xp 操作系统 ,Matlab6.5,计算机三、算法对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始基本可行解。

设初始基为B,然后执行如下步骤:(1).解B Bx b =,求得1Bx B b -=,0,N B B x f c x ==令计算目标函数值 1(1,2,...,)i m B bi -=i 以b 记的第个分量(2).计算单纯形乘子w, B wB C =,得到1B wC B -=,对于非基变量,计算判别数1i i i B i i z c c B p c σ-=-=-,令 max{}k i i i Rz c σ∈=-,R 为非基变量集合若判别数0k σ≤ ,则得到一个最优基本可行解,运算结束;否则,转到下一步(3).解k k By p =,得到1k k y B p -=;若0k y ≤,即k y 的每个分量均非正数,则停止计算,问题不存在有限最优解,否则,进行步骤(4). (4).确定下标r,使{}min ,0t rrktktk b b tk y y t y y >=>且r B x 为离基变量。

k x 为进基变量,用k p 替换r B p ,得到新的基矩阵B ,返回步骤(1)。

对于极大化问题,可以给出完全类似的步骤,只是确定进基变量的准则不同。

对于极大化问题,应令min{}k k j j z c z c -=-四、计算框图是否是否开始初始可行解B令1,0,BN B B x B b b x f c x -====计算单纯形乘子1B w c B -=,计算判别数,i j j wp c j R σ=-∈(非基变量)令max{,}kj j R σσ=∈0?k σ≤得到最优解解方程kk By p =,得到1k k y B p -=。

最优化方法实验报告

最优化方法实验报告

最优化方法实验报告optimization method Experiment Report学生所在学院:理学院学生所在班级:信息1学生姓名:教务处20014年5 月最优化方法实验报告书说明:1.下面程序在MATLAB R2012a 中均能正常运行。

2.程序之间有关联。

实验一熟悉MATLAB基本功能(2学时)实验的目的和要求:在本次实验中,通过亲临使用MATLAB,对该软件做一全面了解并掌握重点内容。

实验内容:1、全面了解MATLAB系统2、实验常用工具的具体操作和功能学习建议:本次实验在全面了解软件系统基础之上,学习和熟悉一些MATLAB的基础用途,重点掌握优化工具箱函数选用的内容。

重点和难点:优化工具箱函数选用。

利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。

具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。

另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际5.大型方法的演示函数下面以我们最常用的线性规划模型求解函数linprog作为典型对优化工具箱进行简单的介绍。

linprog函数功能:求解线性规划问题。

在命令窗口,键入doc linprog,得到下图(该图为帮助窗口)数学模型:其中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)求解问题 min f'*x,约束条件为A*x <= b。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最优化方法实验报告Numerical Linear Algebra And Its Applications学生所在学院:理学院学生所在班级:计算数学10-1学生姓名:甘纯指导教师:单锐教务处2013年5月实验一实验名称:熟悉matlab基本功能实验时间: 2013年05月10日星期三实验成绩:一、实验目的:在本次实验中,通过亲临使用MATLAB,对该软件做一全面了解并掌握重点内容。

二、实验内容:1. 全面了解MATLAB系统2. 实验常用工具的具体操作和功能实验二实验名称:一维搜索方法的MATLAB实现实验时间: 2013年05月10日星期三实验成绩:一、实验目的:通过上机利用Matlab数学软件进行一维搜索,并学会对具体问题进行分析。

并且熟悉Matlab软件的实用方法,并且做到学习与使用并存,增加学习的实际动手性,不再让学习局限于书本和纸上,而是利用计算机学习来增加我们的学习兴趣。

二、实验背景:(一)0.618法(黄金分割法),它是一种基于区间收缩的极小点搜索算法,当用进退法确定搜索区间后,我们只知道极小点包含于搜索区间内,但是具体哪个点,无法得知。

1、算法原理黄金分割法的思想很直接,既然极小点包含于搜索区间内,那么可以不断的缩小搜索区间,就可以使搜索区间的端点逼近到极小点。

2、算法步骤用黄金分割法求无约束问题min (),f x x R ∈的基本步骤如下: (1)选定初始区间11[,]a b 及精度0ε>,计算试探点:11110.382*()a b a λ=+-11110.618*()a b a μ=+-。

(2)若k k b a ε-<,则停止计算。

否则当()()k k f f λμ>时转步骤(3)。

当()()k k f f λμ≤转步骤(4)。

(3)置11111110.382*()k kk k k k k k k k a b b a b a λλμμ+++++++=⎧⎪=⎪⎨=⎪⎪=+-⎩转步骤(5)(4)置11111110.382*()k k k k k k k k k k a a b a b a μμλλ+++++++=⎧⎪=⎪⎨=⎪⎪=+-⎩转步骤(5)(5)令1k k =+,转步骤(2)。

(二)斐波那契法: 1、算法原理斐波那契法也是一种区间收缩算法,但是和黄金分割法不同的是,黄金分割法每次收缩只改变搜索区间的一个端点,而斐波那契法同时改变搜索区间的两个端点,是一种双向收缩法。

2、算法步骤(1)选取初始数据,确定单峰区间],[00b a ,给出搜索精度0>δ,由δ≤-nF ab 确定搜索次数n 。

(2) 00,,1b b a a k ===,计算最初两个搜索点,按(3)计算1t 和2t 。

(3) while 1-<n k)(),(2211t f f t f f == if 21f f <)()()1(;;1122a b k n F k n F a t t t t a ----+===else)()()1(;;2211b a k n F k n F b t t t t b ----+===end1+=k ken(4) 当进行至1-=n k 时,)(2121b a t t +==这就无法借比较函数值)(1t f 和)(2t f 的大小确定最终区间,为此,取⎪⎪⎩⎪⎪⎨⎧-++=+=))(21()(2112a b a t b a t ε其中ε为任意小的数。

在1t 和2t 这两点中,以函数值较小者为近似极小点,相应的函数值为近似极小值。

并得最终区间],[1t a 或],[2b t 。

由上述分析可知,斐波那契法使用对称搜索的方法,逐步缩短所考察的区间,它能以尽量少的函数求值次数,达到预定的某一缩短率。

(三)三点二次插值法:1、算法原理该算法在搜索区间中不断用低次(通常不超过三次)插值多项式来近似目标函数,并逐步用插值多项式的极小点来逼近)(x ϕ的极小点,当函数具有比较好的解析性质时,插值方法比直接方法(如0.618或Fibonacci 法)效果更好。

2、算法步骤(1)取初始点321ααα<<,计算3,2,1i i i ==),(αϕϕ并满足)()()(321αϕαϕαϕ<>,置精度要求ε(迭代终止条件)。

(2 ) 计算[]0A 2A 213132321=-+-+-=,)()()(ααϕααϕααϕ,则置22ϕαϕαα==)(, 停止计算(3)计算A 322212212312322ϕααϕααϕααα)()()(-+-+-=若1αα<或)),((33ααααα∉>则置22,ϕϕαα== 停止计算 (4)计算)(αϕϕ=,若εαα<-2停止计算(α作为极小点) (5)如果),(32ααα∈ 则若,2ϕϕ<则置:αϕααϕϕαα====222121,,,否则置ϕϕαα==33,;否则),(21ααα∈则若,2ϕϕ<则置:αϕααϕϕαα====222323,,,否则置ϕϕαα==11,。

(6)转(2)三、实验内容:1. 0.618法的MATLAB 实现2. Fibonacci 法的MATLAB 实现 3.二次插值法的MATLAB 实现 四、实验过程: 1.0.618法的函数:function [x,minf] = minHJ(f,a,b,eps) if nargin == 3 eps = 1.0e-6; endl = a + 0.382*(b-a); u = a + 0.618*(b-a); k=1; tol = b-a;while tol>eps && k<100000 fl = subs(f , findsym(f), l); fu = subs(f , findsym(f), u); if fl > fu a = l;l = u;u = a + 0.618*(b - a);elseb = u;u = l;l = a + 0.382*(b-a);endk = k+1;tol = abs(b - a);endif k == 100000disp('找不到最小值!');x = NaN;minf = NaN;return;endx = (a+b)/2;minf = subs(f, findsym(f),x);2.Fibonacci法的函数:function [x,minf] = minFBNQ(f,a,b,delta,eps) if nargin == 4eps = 1.0e-6;endF = ones(2,1);N = (b-a)/eps;c = F(2) - N;n = 2;while c<0n = n+1;F(n) = F(n-1) + F(n-2);c = F(n) - N;endl = a + F(n-2)*(b-a)/F(n);u = a + F(n-1)*(b-a)/F(n);k=1;while 1fl = subs(f , findsym(f), l);fu = subs(f , findsym(f), u);if fl > fua = l;l = u;u = a + F(n-k-1)*(b-a)/F(n-k);if (k == n - 3)break;elsek = k+1;endelseb = u;u = l;l = a + F(n-k-2)*(b-a)/F(n-k);if ( k == n-3 )break;elsek = k+1;endendendif k == 100000disp('找不到最小值!');x = NaN;minf = NaN;return;endu = l + delta;fl = subs(f , findsym(f), l);fu = subs(f , findsym(f), u);if fl > fua = l;elseb = l;endx = (a+b)/2;minf = subs(f , findsym(f), x);3.二次插值法函数:function [min,minf]=minTP(a1,a2,a3,f,eps)if nargin==4eps=10^(-2);endf1=subs(f,findsym(f),a1);f2=subs(f,findsym(f),a2);f3=subs(f,findsym(f),a3);if (f1<f2)||(f2>f3)disp('输入三点不符合三点二次插值的要求');endax=((a2^2-a3^2)*f1+(a3^2-a1^2)*f2+(a1^2-a2^2)*f3)/(2*((a2-a3)*f1+(a3-a1)*f2+(a1-a2)*f3)); fax=subs(f,findsym(f),ax);while(abs(fax-f2)>eps)if ax>a2if fax<=f2a1=a2;a2=ax;f1=f2;f2=fax;elsea3=ax;f3=fax;endelseif fax<=f2a3=a2;a2=ax;f3=f2;f2=fax;elsea1=ax;f1=fax;endendax=((a2^2-a3^2)*f1+(a3^2-a1^2)*f2+(a1^2-a2^2)*f3)/(2*((a2-a3)*f1+(a3-a1)*f2+(a1-a2)*f3)); fax=subs(f,findsym(f),ax);endmin=ax;minf=subs(f,findsym(f),ax);format short;五、实验结果(总结/方案)黄金分割法求解极值实例。

用黄金分割法求解下面函数的最小值:]10,10[,52)(24-∈+--==t t t t t f 其中在command window 中输入:>>syms t;f=t^4-t^2-2*t+5;[x,fx]=minHJ(f,-10,10)结果为:x= 1.0000fx= 3.00002.Fibonacci 法Fibonacci 法求解极值实例。

用Fibonacci 法求解下面函数的最小值:]10,10[,52)(24-∈+--==t t t t t f 其中在command window中输入:>>syms t;f=t^4-t^2-2*t+5;[x,fx]=minFBNQ(f,-10,10,0.05)结果为:x= 1.0000fx= 3.00003.二次插值法在command window中输入:>> syms t;f=t^3-3*t+2;a1=0;a2=2;a3=3;[min,minf]=minTP(a1,a2,a3,f,0.0001)结果为:min =0.9983minf =8.9463e-006。

相关文档
最新文档