MATLAB黄金分割法求一元函数极小值

合集下载

3.7 利用MATLAB求一元函数的极值与最值

3.7 利用MATLAB求一元函数的极值与最值

例1 求函数 y 2x3 6x2 18x 7 在[4, 4]
上的极值,并作图对照。
解:作图输入 >> x=-4:0.1:4;y=2*x.^3-6*x.^2-18*x+7;plot(x,y) 输出图形,由图可知,显然函数y 在[-4,4] 上有极 大值和极小值
求极小值输入:
>>[x1,y1]=fminbnd('2*x^3-6*x^2-18*x+7',-4,4)
第一步 建模:设截去的小正方形的边长为x cm
V x(24 2x)2 (0 x 12)
第二步 优化:
>>f='-x*(24-2*x)^2'; >> fminbnd(f,0,12)
>>ans = 4.0000
上机练习
(1)求y x 1 x 在 5,1 的最小值;
答案:x 5, y 2.5505
(2)设某产品的总成本函数为 Cq 0.25q2 15q 1600 ,
求当产量为多少时,该产品的平均成本最小。
答案:q 80,C80 55
•见配套习题册
3.7利用MATLAB求一元函数的 极值与最值
本节知识目标
会利用MATLAB求解一元函数的极值和最值
MATLAB7.1提供fminbnd函数求一元函数 的极小值点与最小值点,其调用格式如下: f=‘f(x)’;[xmin,ymin]=fminbnd(f,a,b) 表示求函数 在区间 上的极小值,但它只能 给出连续函数的局部最优解; f=‘-f(x)’;[xmax,ymax]=fminbnd(f,a,b) 表示求函数 在区间 上的极大值,这里极大 值要取出输出量ymax的相反数。

MATLAB黄金分割法求一元函数极小值

MATLAB黄金分割法求一元函数极小值

MATLAB黄金分割法求一元函数极小值%This function is used to find a function's minimum by Golden Section. %.注:用于一元函数极小值问题%Nov.27th,2009%Miniment------最小值%array---------迭代变化数组%k-------------迭代次数function [Miniment,array,k]=GoldenSection(y,a,b,E,Flag)if(nargin==0)y=sym('3*x^4-16*x^3+30*x^2-24*x+8');a=0;b=3;E=0.00000001;Flag=1;end%如果Flag==1,程序将给出迭代步骤值和次数值%如果Flag==0,程序将不给出迭代步骤值和次数值clc;symsx;formatlong;lemda=0.618;%清屏,准备数据u=b-lemda*(b-a);%首次插入的左置换区间边界点v=a+lemda*(b-a);%首次插入的右置换区间边界点k=0;%记录迭代次数array(k+1,1)=a;array(k+1,2)=b;%记录迭代的区间%while结构控制在达到输出精度时返回!while(b-a>=E)Yu=subs(y,x,u);Yv=subs(y,x,v);if(Yu==Yv)a=u;b=v;%左右同时缩小搜索区间u=b-lemda*(b-a);v=a+lemda*(b-a);k=k+1;elseif(Yu<Yv)b=v;%从右缩小搜索区间v=u;u=b-lemda*(b-a);k=k+1;elseif(Yu>Yv)a=u;%从左缩小搜索区间u=v;v=a+lemda*(b-a);k=k+1;endarray(k+1,1)=a;array(k+1,2)=b;end%显示输出控制if(Flag==1)fprintf('迭代边界变化过程\n\ta\t\t\t\t\tb');arrayfprintf('迭代次数k=%d\n',k);end%%绘制动画以方便观察!必须位于输出语句前,否则得不到执行!figure(1);clf(1);plot(0:0.1:3,subs(y,x,[0:0.1:3]));hold on;ASize=size(array);h1=plot(array(1,1),0,'r.');h2=plot(array(1,2),0,'r.');for index=1:ASize(1,1);pause(0.5);set(h1,'xdata',array(index,1));set(h2,'xdata',array(index,2));drawnow;end%以下是输出语句Miniment = (a+b)/2;。

MATLAB黄金分割法课程论文--

MATLAB黄金分割法课程论文--

中南林业科技大学本科课程论文学院:理学院专业年级:14级信息与计算科学2班学生姓名:邱文林学号:20144349课程:MATLAB程序设计教程设计题目:基于MATLAB的黄金分割法与抛物线插值法指导教师:龚志伟2016年4月中文摘要为了求解最优化模型的最优解,可使用基于MATLAB算法编程的黄金分割法与抛物线插值法,来实现求解的过程。

黄金分割法是通过所选试点的函数值而逐步缩短单谷区间来搜索最优点,利用迭代进而得出结论。

抛物线插值法亦称二次插值法,是一种多项式插值法,逐次以拟合的二次曲线的极小点,逼近原寻求函数极小点的一种方法。

通过将MATLAB与最优化问题相结合,不仅可以加深对黄金分割法、抛物线插值法的基本理解和算法框图及其步骤的全面理解,也有利于帮助我们掌握MATLAB的使用方法。

关键词:MATLAB,黄金分割法,抛物线插值法,最优解,迭代英文摘要In order to solve the optimization model of the optimal solution, using MATLAB algorithm based on the golden section method and the parabola interpolation method, to realize the process of solving. The golden section method is used to search the most advantage through the function value of the selected pilot, which can be used to search for the most advantage. Parabolic interpolation method, also known as the two interpolation method, is a polynomial interpolation method, successive to fit the two curve of the minimum point, the original search function to find a very small point of the method. By combining MATLAB and optimization problems can not only deepen the comprehensive understanding of the golden section method, the parabola interpolation basic understanding and block diagram of the algorithm and steps, but also conducive to help us to grasp the method of using MATLAB.Key words: MATLAB, golden section method, parabolic interpolation method, optimal solution, iteration目录1. 黄金分割法▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪21.1 算法原理▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪21.2 算法步骤▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪21.3黄金分割法算法框图▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪32. 抛物线插值法▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪42.1 算法原理▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪42.2 算法步骤▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪42.3 抛物线插值法算法框图▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪53. 算法的MATLAB实现▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪63.1黄金分割法程序代码▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪63.2 实例验证▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪63.3 误差分析▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪93.4 抛物线插值法程序代码▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪103.5 实例验证▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪113.6 误差分析▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪123.7黄金分割法与抛物线插值法的对比▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪13 参考文献▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪15引言为了对最优化问题进行求解,为了更好的掌握MATLAB的运用,本文主要介绍一维最优化问题的一维搜索法黄金分割法与抛物线插值法,利用MATLAB算法将其实现。

利用MATLAB软件求解一元和二元函数的极值

利用MATLAB软件求解一元和二元函数的极值

利用MATLAB软件求解一元和二元函数的极值作者:易强吕希元来源:《课程教育研究》2018年第40期【摘要】本文主要介绍利用MATLAB软件在电脑上来求解微积分里的一元和二元函数的极值的计算问题。

【关键词】MATLAB ;极值 ;输入命令【中图分类号】O172 【文献标识码】A 【文章编号】2095-3089(2018)40-0149-01在微积分的教材中出现比较多的知识点,包括一元函数的性质和计算其极值、最值等问题,尤其更难的是对二元函数f(x,y)极值的计算,难度相当大,传统的计算一般是人们在草稿纸上进行演算,费时费力,而且准确度不高,往往容易计算错误,由于上述的缺点,本文简单介绍用MATLAB来求解,利用它可以很方便,快捷的得到准确结果。

一、M函数文件函数定义的一般格式function [输入变量列表]=函数名(输入变量列表)注释说明语句段 ;% 为 help look for 提供在线帮助信息函数体语句段 ; ;% 函数语句块特定规则:<1> 函数文件第一行必须以单词 function 作为引导词,定义一个函数,必须遵循如下形式:Function <因变量>=<函数名>(<自变量>)<2> 函数文件的文件名必须是<函数名>. m.<3> 程序中的变量均为局部变量,不保存在工作空间中,其变量只在函数运行期间有效,函数文件执行完后,将自动被清除。

二、求一元函数的极值利用 MATLAB 的计算功能,可以很方便求一元函数极值。

例1 求y=■的极值解:输入命令:syms ;x ; ;% 将变量 x 符号化y=(3*x^2+4*x+4)/(x^2+x+1) ; ; ; % 建立函数关系dy=diff(y) ; ; ; % 求导数xz=solve (dy) ; ;% 求函数的驻点:得结果 ; ;xz=[0] ; [-2]由此知道函数有两个驻点x1=0和x2=-2,考查函数在驻点处二阶导数的正负情况:再输入命令:d2y=diff(y,2);z1=limit(d2y,x,0)得结果z1=-2输入命令:z2=limit(d2y,x,-2)得结果 z2=■于是知在x1=0处二阶导数的值为z1=-2,小于0,函数有极大值;在x2=-2处二阶导数的值为z2=■ ,大于0,函数有极小值,如果需要,可顺便求出极值点的函数值:输入命令:y1=limit(y,x,0)得结果:y1=4输入命令:y2=limit(y,x,-2)得结果:y2=■.三、求二元函数的极值利用MATLAB 计算二元函数的极值,主要有以下几步:步骤1. 定义多元函数z=f(x,y).步骤2. 求解偏导数方程组fx(x,y)=0,fy(x,y)=0,得到驻点。

机械优化设计Matlab-优化工具箱基本用法

机械优化设计Matlab-优化工具箱基本用法

Matlab 优化工具箱x = bintprog (f , A, b, Aeq, Beq , x0, options ) 0—1规划 用MATLAB 优化工具箱解线性规划命令:x=linprog(c ,A ,b ) 2、模型:命令:x=linprog(c ,A ,b ,Aeq ,beq ) 注意:若没有不等式:存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ].min z=cX1、模型:3、模型:命令:[1]x=linprog(c,A,b,Aeq,beq,VLB,VUB)[2]x=linprog(c,A,b,Aeq,beq,VLB,VUB, X0)注意:[1] 若没有等式约束,则令Aeq=[ ],beq=[]. [2]其中X0表示初始点4、命令:[x,fval]=linprog(…)返回最优解x及x处的目标函数值fval.例1 max解编写M文件小xxgh1。

m如下:c=[-0.4 —0。

28 —0.32 —0.72 -0.64 -0。

6];A=[0。

01 0.01 0.01 0.03 0。

03 0.03;0。

02 0 0 0。

05 0 0;0 0。

02 0 0 0。

05 0;0 0 0.03 0 0 0。

08];b=[850;700;100;900];Aeq=[]; beq=[];vlb=[0;0;0;0;0;0];vub=[];[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)例2解: 编写M文件xxgh2.m如下:c=[6 3 4];A=[0 1 0];b=[50];Aeq=[1 1 1];beq=[120];vlb=[30,0,20];vub=[];[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub例3 (任务分配问题)某车间有甲、乙两台机床,可用于加工三种工件。

假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表.问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?解设在甲车床上加工工件1、2、3的数量分别为x1、x2、x3,在乙车床上加工工件1、2、3的数量分别为x4、x5、x6。

求函数最大值黄金分割法matlab程序

求函数最大值黄金分割法matlab程序

黄金分割法是一种用于求解函数最大值的数值优化算法。

它利用黄金比例的特性,在搜索过程中逐步减小搜索范围,找到函数的最大值。

本文将介绍黄金分割法的原理和实现方法,并给出利用Matlab编写的程序示例。

一、黄金分割法的原理黄金分割法基于黄金比例的性质,即将一段线段分割成两部分,使整段线段与较短部分的比值等于较短部分与较长部分的比值。

利用这一特性,在搜索过程中逐步减小搜索范围,最终找到函数的最大值。

二、黄金分割法的实现1. 确定初始搜索范围:根据实际问题确定函数的定义域,确定搜索范围[a, b]。

2. 计算黄金分割点:根据搜索范围[a, b]计算黄金分割点x1和x2,使得搜索范围按照黄金比例减小。

3. 计算函数值:计算函数在x1和x2处的取值f(x1)和f(x2)。

4. 更新搜索范围:比较f(x1)和f(x2)的大小,确定新的搜索范围[a, b]。

5. 重复步骤2-4,直到满足收敛条件或达到迭代次数上限。

三、Matlab程序示例以下是利用Matlab编写的黄金分割法程序示例:```matlabfunction [x_opt, f_opt] = golden_section_method(f, a, b, tol, max_iter)phi = (1 + sqrt(5)) / 2; 黄金比例x1 = b - (b - a) / phi;x2 = a + (b - a) / phi;f1 = feval(f, x1);f2 = feval(f, x2);iter = 0;while (b - a) > tol iter < max_iterif f1 < f2a = x1;x1 = x2;f1 = f2;x2 = a + (b - a) / phi;f2 = feval(f, x2);elseb = x2;x2 = x1;f2 = f1;x1 = b - (b - a) / phi;f1 = feval(f, x1);enditer = iter + 1;endx_opt = (a + b) / 2;f_opt = feval(f, x_opt);end```四、结语黄金分割法是一种简单而有效的数值优化算法,可以用于求解函数的最大值。

最优化方法实验报告(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计算函数最大值及最小值

matlab计算函数最大值及最小值

matlab计算函数最大值及最小值在MATLAB中,有几种方法可以计算一个函数的最大值和最小值。

下面将介绍几种常用的方法。

1.通过绘制函数图像找到最大值和最小值:首先,可以通过绘制函数图像来观察函数的最大值和最小值所在的位置。

可以使用plot函数来绘制函数的图像。

例如,我们想计算函数y=x^3-2x的最大值和最小值:```x=-10:0.1:10;y=x.^3-2*x;plot(x, y)```通过观察图像,可以确定函数的最大值和最小值的位置。

2. 使用fminbnd函数找到函数的最小值:MATLAB中的fminbnd函数可以用于寻找函数的最小值。

该函数使用了黄金分割算法。

例如,我们想计算函数y=x^3-2x的最小值:```[x, y] = fminbnd(f, -10, 10);```这段代码将返回函数的最小值y以及对应的x值。

3. 使用fmincon函数找到函数的最小值(约束最优化):如果函数有特定的约束条件,可以使用fmincon函数来计算函数的最小值。

fmincon函数基于无约束的最优化算法,并添加了约束条件。

例如,我们想计算函数y=x^2的最小值,但限制x的范围在0到1之间:```x0=0.5;%初始解A=[];b=[];Aeq = [];beq = [];lb = 0; % x的下限ub = 1; % x的上限[x, y] = fmincon(f, x0, A, b, Aeq, beq, lb, ub);```这段代码将返回函数的最小值y以及对应的x值。

4. 使用max和min函数找到向量或矩阵的最大值和最小值:如果需要计算向量或矩阵的最大值和最小值,可以使用MATLAB中的max和min函数。

例如,计算向量x=[1,2,3,4,5]的最大值和最小值:```x=[1,2,3,4,5];max_value = max(x);min_value = min(x);```这段代码将返回向量x的最大值和最小值。

黄金分割法上机报告

黄金分割法上机报告

1. 黄金分割法1.1黄金分割法简介黄金分割法适用于单谷函数求极小值问题,且函数可以不连续。

黄金分割法是建立在区间消去法原理基础上的试探方法,即在搜索区间[],a b内适当插入两点1α、2α,并计算其函数值。

1α、2α将区间分成三段。

应用函数的单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间得以缩短。

然后再在保留下来的区间上作同样的处置,如此迭代下去,使搜索区间无限缩小,从而得到极小点的数值近似解。

黄金分割法能使相邻两次都具有相同的缩短率0.618,故黄金分割法又称作0.618法。

1.2黄金分割法的计算框图2.应用MATLAB求解实例2.1 算法的MATLAB实现在MATLAB中编程实现的黄金分割法函数为:minHJ。

功能:用黄金分割法求解一维函数的极值。

调用格式:[x,minf]=minHJ(f,a,b,eps)其中,f:目标函数;a:极值区间的左端点;b:极值区间的右端点;eps:精度;x:目标函数取最小值时的自变量值;minf:目标函数的最小值。

2.2 一维搜索方法程序考核题minf(t)=t4 -5t3+4t2-6t+60最优解:t*=3.2796,f(t*)=22.65902.3 建立MATLAB语言程序(1)在M文件编辑器中输入下列MATLAB程序代码:function [x,minf]=minHJ(f,a,b,eps)format long;if nargin==3eps=1.0e-6;endl=a+0.382*(b-a); % 试探点u=a+0.618*(b-a); % 试探点k=1;tol=b-a;while tol>eps&&k<100000fl=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);format short;(2)在MATLAB命令窗口中输入:syms t;f=t^4-5*t^3+4*t^2-6*t+60;[x,fx]=minHJ(f,-10,10)2.4 程序运行结果x=3.2797 % 极小值点fx=22.6590 % 在极小值点处的函数值图2 黄金分割法运算结果2.5结果讨论从以上计算可以看出,利用MATLAB语言程序的求解方法可以满足收敛精度要求,与解析法求解的结果基本一致。

基于Matlab用遗传算法求一元函数最值问题(附源码)

基于Matlab用遗传算法求一元函数最值问题(附源码)

基于Matlab⽤遗传算法求⼀元函数最值问题(附源码)问题:求y=10cos(5x x)+7sin(x-5)+10x x的最⼩值要求:(1)⽤遗传算法编程求解问题(2)编程语⾔⽤MATLAB 或C(3)输出问题的最优解及最⼤值,并绘图显⽰⽅法⼀function.mclear all;close all;clc;x=-1:0.01:0;y=10.*cos(5.*x.*x)+7.*sin(x-5.0)+10.*x.*x;figureplot(x,y)grid onxlabel('x')ylabel('f(x)')title('f(x)=10*cos(5*x*x)+7*sin(x-5)+10*x*x')%%f(x)=10*cos(5*x*x)+7*sin(x-5)+10*x*x1)运⾏结果函数取(-1,0)定义域,能够显⽰出的X=-0.7733时,Y=-0.4888,图像如下⽅法⼆func.mclear all;close all;clc;x=-1:0.01:0;y=10.*cos(5.*x.*x)+7.*sin(x-5.0)+10.*x.*x;figureplot(x,y)grid onxlabel('x')ylabel('f(x)')title('f(x)=10*cos(5*x*x)+7*sin(x-5)+10*x*x')%%f(x)=10*cos(5*x*x)+7*sin(x-5)+10*x*xmain.mclear all; %清除所有变量close all; %清图clc; %清屏nvars = 1;LB = -1;UB = 0;[t,fval] =ga(@test,1,[],[],[],[],LB,UB)fplot(@(x)(10.*cos(5.*x.*x)+7.*sin(x-5)+10.*x.*x),[-1 0]);hold on;plot(t,fval,'*');function y = test(x)y = 10*cos(5*x*x)+7*sin(x-5)+10*x*xendsimple_fitness.m%⽬标函数x = -1:0.01:0;%y=10*cos(5*x*x)+7*sin(x-5)+10*x*x;y=10.*cos(5.*x.*x)+7.*sin(x-5)+10.*x.*x;plot(x,y);%%%%%%%%%%%%%%%初始化参数%%%%%%%%%%%%%%%clear all; %清除所有变量close all; %清图clc; %清屏NP=50; %种群规模(数量)L = 20; %⼆进制位串长度Pc = 0.8; %交叉率Pm = 0.1; %变异率G = 100; %最⼤遗传代数Xs = 1; %上限Xx = -0; %下限f = randi([0,1],NP,L);%随机获得初始种群xB =[];%%%%%%%%%%%%%%%遗传算法循环%%%%%%%%%%%%%%%for k = 1:G%%%%%%%%%%%%%%%将⼆进制解码为定义域范围内⼗进制%%%%%%%%%%%%%%%for i = 1:NPU = f(i,:);m = 0;for j = 1:Lm = U(j)*2^(j-1)+m;endx(i) = Xx+m*(Xs-Xx)/(2^L-1);Fit(i) = 1/func1(x(i));endmaxFit = max(Fit);minFit = min(Fit);rr = find(Fit==maxFit);fBest = f(rr(1,1),:);xBest = x(rr(1,1));xB(i)=xBest;Fit = (Fit-minFit)/(maxFit-minFit);%%%%%%%%%%%%%%%基于轮盘赌的复制操作%%%%%%%%%%%%%%% sum_Fit = sum(Fit);fitvalue = Fit./sum_Fit;fitvalue = cumsum(fitvalue);ms = sort(rand(NP,1));fiti = 1;newi = 1;while newi <= NPif (ms(newi)) < fitvalue(fiti)nf(newi,:) = f(fiti,:);newi = newi + 1;elsefiti = fiti+1;endend%%%%%%%%%%%%%%%基于概率的交叉操作%%%%%%%%%%%%%%% for i=1:2:NPp = rand;if p < Pcq = randi(1,1,L);for j = 1:Lif q(j)==1;temp = nf(i+1,j);nf(i+1,j) = nf(i,j);nf(i,j) = temp;endendendend%%%%%%%%%%%%%%%基于概率的变异操作%%%%%%%%%%%%%%% i= 1;while i<= round(NP*Pm)h = randi([1,NP]);for j = 1:round(L*Pm)g = randi([1,L]);nf(h,g) =~ nf(h,g);endi=i+1;endf=nf;f(1,:) = fBest;trace(k) = maxFit;endxBest;fBestt=func1(xBest);subplot(1,2,1)plot(trace)xlabel('迭代次数')ylabel('⽬标函数值')title('适应度进化曲线')subplot(1,2,2)fplot(@(x)(10.*cos(5.*x.*x)+7.*sin(x-5)+10.*x.*x),[-1 0]);hold on;plot(xBest,func1(xBest),'*');%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%function result = func1(x)%fit = x+10*sin(5*x)+7*cos(4*x);fit = 10.*cos(5.*x.*x)+7.*sin(x-5)+10.*x.*x;result = fit;end1)运⾏结果适应度曲线函数图像。

《机械优化设计》复习题 答案 (2)

《机械优化设计》复习题 答案 (2)

机械优化设计复习题解答一、填空题1、用最速下降法求fX=100x 2- x 12 2+1- x 1 2的最优解时,设X 0=,T ,第一步迭代的搜索方向为 -47,-50T ;2、机械优化设计采用数学规划法,其核心一是寻找搜索方向,二是计算最优步长;3、当优化问题是凸规划的情况下,任何局部最优解就是全域最优解;4、应用进退法来确定搜索区间时,最后得到的三点,即为搜索区间的始点、中间点和终点,它们的函数值形成 高-低-高 趋势;5、包含n 个设计变量的优化问题,称为 n 维优化问题;6、函数C X B HX X T T++21的梯度为B ; 7、设G 为n×n 对称正定矩阵,若n 维空间中有两个非零向量d 0,d 1,满足d 0T Gd 1=0,则d 0、d 1之间存在共轭关系;8、 设计变量 、 目标函数 、 约束条件 是优化设计问题数学模型的基本要素;9、对于无约束二元函数),(21x x f ,若在),(x 20100x x 点处取得极小值,其必要条件是f(x 10,x 20)=0 ,充分条件是2fx 10,x 20)=0正定 ;10、 K-T 条件可以叙述为在极值点处目标函数的梯度为起作用的各约束函数梯度的非负线性组合; 11、用黄金分割法求一元函数3610)(2+-=x x x f 的极小点,初始搜索区间]10,10[],[-=b a ,经第一次区间消去后得到的新区间为 10 ; 12、优化设计问题的数学模型的基本要素有设计变量、 目标函数 、 约束条件;13、牛顿法的搜索方向d k = ,其计算量大 ,且要求初始点在极小点 附近 位置; 14、将函数fX=x 12+x 22-x 1x 2-10x 1-4x 2+60表示成C X B HX X T T++21的形式 12[x 1x 2][2−1−12][x 1x 2]+[−10−4][x 1x 2]+60 ;15、存在矩阵H,向量 d 1,向量 d 2,当满足d 1T Hd 2=0,向量 d 1和向量 d 2是关于H 共轭; 16、采用外点法求解约束优化问题时,将约束优化问题转化为外点形式时引入的惩罚因子r 数列,具有单调递增特点;17、采用数学规划法求解多元函数极值点时,根据迭代公式需要进行一维搜索,即求最优步长;1k k H g --二、选择题1、下面C 方法需要求海赛矩阵; A 、最速下降法 B 、共轭梯度法 C 、牛顿型法 D 、DFP 法2、对于约束问题根据目标函数等值线和约束曲线,判断()1[1,1]T X =为 ,()251[,]22TX =为 ;D A .内点;内点 B. 外点;外点 C. 内点;外点 D. 外点;内点3、内点惩罚函数法可用于求解B 优化问题; A 无约束优化问题B 只含有不等式约束的优化问题C 只含有等式的优化问题D 含有不等式和等式约束的优化问题4、对于一维搜索,搜索区间为a,b,中间插入两个点a 1、b 1,a 1<b 1,计算出fa 1<fb 1,则缩短后的搜索区间为D ; A a 1,b 1 B b 1,b C a 1,b D a,b 15、D 不是优化设计问题数学模型的基本要素; A 设计变量 B 约束条件 C 目标函数 D 最佳步长6、变尺度法的迭代公式为x k+1=x k -αk H k ▽fx k ,下列不属于H k 必须满足的条件的是C ;A. Hk之间有简单的迭代形式B.拟牛顿条件C.与海塞矩阵正交D.对称正定7、函数)(Xf在某点的梯度方向为函数在该点的A;A、最速上升方向B、上升方向C、最速下降方向D、下降方向8、下面四种无约束优化方法中,D在构成搜索方向时没有使用到目标函数的一阶或二阶导数;A 梯度法B 牛顿法C 变尺度法D 坐标轮换法9、设)(Xf为定义在凸集R上且具有连续二阶导数的函数,则)(Xf在R上为凸函数的充分必要条件是海塞矩阵GX在R上处处B;A 正定B 半正定C 负定D 半负定10、下列关于最常用的一维搜索试探方法——黄金分割法的叙述,错误的是D,假设要求在区间a,b插入两点α1、α2,且α1<α2;A、其缩短率为B、α1=b-λb-aC、α1=a+λb-aD、在该方法中缩短搜索区间采用的是外推法;11、与梯度成锐角的方向为函数值A方向,与负梯度成锐角的方向为函数值B方向,与梯度成直角的方向为函数值 C方向;A、上升B、下降C 、不变D 、为零12、二维目标函数的无约束极小点就是 B ; A 、等值线族的一个共同中心 B 、梯度为0的点C 、全局最优解D 、海塞矩阵正定的点13、最速下降法相邻两搜索方向d k 和d k+1必为 B 向量; A 相切 B 正交 C 成锐角 D 共轭14、下列关于内点惩罚函数法的叙述,错误的是A ; A 可用来求解含不等式约束和等式约束的最优化问题; B 惩罚因子是不断递减的正值C 初始点应选择一个离约束边界较远的点;D 初始点必须在可行域内 三、问答题看讲义1、试述两种一维搜索方法的原理,它们之间有何区别2、惩罚函数法求解约束优化问题的基本原理是什么3、试述数值解法求最佳步长因子的基本思路;4、试述求解无约束优化问题的最速下降法与牛顿型方法的优缺点;5、写出用数学规划法求解优化设计问题的数值迭代公式,并说明公式中各变量的意义,并说明迭代公式的意义;6、什么是共轭方向满足什么关系共轭与正交是什么关系 四、解答题1、试用梯度法求目标函数fX=+ x 1x 2-2x 1的最优解,设初始点x 0=-2,4T ,选代精度ε=迭代一步;解:首先计算目标函数的梯度函数 f =[3∗x1−x2−2x2−x1],计算当前迭代点的 梯度向量值 f(X (0))=[−3∗2−4−24+2]=[−126]梯度法的搜索方向为 S (k )=−f , 因此在迭代点x 0 的搜索方向为12,-6T在此方向上新的迭代点为:X (k+1)=X (k )+αS (k )=X (0)+αS (0)=[−24]+α[12−6]=[−2+12α4−6α]把新的迭代点带入目标函数,目标函数将成为一个关于单变量α的函数F(α) f(X (k+1))=f ([−2+12α4−6α])=1.5(−2+12α)2+0.5(4−6α)2−(−2+12α)(4−6α)− 2(−2+12α)=F(α) 令dF(α)dα=−180+612α=0,可以求出当前搜索方向上的最优步长α=517≈0.2941新的迭代点为X (0)+αS (0)= [1.52922.2354]当前梯度向量的长度‖f ‖=√12x12+6x6=13.4164>ε, 因此继续进行迭代; 第一迭代步完成;2、试用牛顿法求f X =x 1-22+x 1-2x 22的最优解,设初始点x 0=2,1T ; 解1:注:题目出题不当,初始点已经是最优点,解2是修改题目后解法; 牛顿法的搜索方向为S (k)=−2(f )−1(f),因此首先求出当前迭代点x 0的梯度向量、海色矩阵及其逆矩阵(f )=[4∗x1 − 4∗x2 − 48∗x2 − 4∗x1](f (x (0)))=[00]2(f )=[4−4−48] 2(f )−1= 14[2111]S (k)=−2(f )−1(f )=[00]不用搜索,当前点就是最优点;解2:上述解法不是典型的牛顿方法,原因在于题目的初始点选择不当;以下修改求解题目的初始点,以体现牛顿方法的典型步骤;以非最优点x 0=1,2T 作为初始点,重新采用牛顿法计算牛顿法的搜索方向为S (k)=−2(f )−1(f),因此首先求出当前迭代点x 0的梯度向量、以及海色矩阵及其逆矩阵梯度函数:(f )=[4∗x1 − 4∗x2 − 48∗x2 − 4∗x1]初始点梯度向量:(f (x (0)))=[−812]海色矩阵:2(f )=[4−4−48]海色矩阵逆矩阵:2(f )−1 = 14[2111]当前步的搜索方向为: S (k)=−2(f )−1(f)=− 14[2111][−812]=[−11] 新的迭代点位于当前的搜索方向上 : X (k+1)=X (k )+αS (k )=X (0)+αS (0) =[12]+α[−11]=[1−α2+α]把新的迭代点带入目标函数,目标函数将成为一个关于单变量α的函数F(α) f(X (k+1))=f ([1−α2+α])=(α + 1)2 + (3α + 3)2=F(α) 令dF(α)dα=20α+ 20=0,可以求出当前搜索方向上的最优步长α=−1新的迭代点为 X (1)=X (0)+αS (0)= [12] –[−11]= [21]当前梯度向量的长度‖f ‖=√12x12+8x8=14.4222>ε, 因此继续进行迭代; 第二迭代步:(f )=[4∗x1 − 4∗x2 − 48∗x2 − 4∗x1](f (x (1)))=[0]‖f ‖=0<ε因此不用继续计算,第一步迭代已经到达最优点;这正是牛顿法的二次收敛性;对正定二次函数,牛顿法一步即可求出最优点; 3、设有函数 fX=x 12+2x 22-2x 1x 2-4x 1,试利用极值条件求其极值点和极值; 解:首先利用极值必要条件(f )=[00]找出可能的极值点:令(f )=[2∗x1 − 2∗x2 − 44∗x2 − 2∗x1]=[00]求得[x1x2]=[42],是可能的极值点;再利用充分条件2(f )正定或负定确认极值点;2(f )=[2−2−24]|2|=2>0|2−2−24|=8−4=4>0 因此2(f )正定, X ∗=[x1x2]=[42]是极小点,极值为fX=-84、求目标函数f X =x 12+x 1x 2+2x 22 +4x 1+6x 2+10的极值和极值点; 解法同上5、试证明函数 f X =2x 12+5x 22 +x 32+2x 3x 2+2x 3x 1-6x 2+3在点1,1,-2T 处具有极小值; 解: 必要条件:(f )=[ 4∗x1 + 2∗x310∗x2 + 2∗x3 − 62∗x1 + 2∗x2 + 2∗x3]将点1,1,-2T 带入上式,可得(f )=[ 000]充分条件2(f )=[4020102222] |4|=4>0|40010|=40>0|4020102222|=80−40−16=24>0 2(f )正定;因此函数在点1,1,-2T 处具有极小值 6、给定约束优化问题min fX=x 1-32+x 2-22 . g 1X=-x 12-x 22+5≥0 g 2X=-x 1-2x 2+4≥0 g 3X= x 1≥0 g 4X=x 2≥0验证在点T X ]2[,1=Kuhn-Tucker 条件成立; 解:首先,找出在点T X ]2[,1=起作用约束: g 1X =0 g 2X =0 g 3X =2 g 4X =1因此起作用约束为g 1X 、g 2X;然后,计算目标函数、起作用约束函数的梯度,检查目标函数梯度是否可以表示为起作用约束函数梯度的非负线性组合;(f )=[2∗x1 − 6 2∗x2 − 4]=[−2−2](g1)=[ −2∗x1 −2∗x2]=[−4−2], (g2)=[−1−2]求解线性组合系数 (f )=λ1?(g1)+λ2?(g2) [−2−2]=λ1[−4−2]+λ2[−1 −2] 得到 λ1=13,λ2=23, 均大于0因此在点T X ]2[,1=Kuhn-Tucker 条件成立 7、设非线性规划问题用K-T 条件验证[]TX 0,1*=为其约束最优点;解法同上8、已知目标函数为fX= x 1+x 2,受约束于:g 1X=-x 12+x 2≥0 g 2X=x 1≥0 写出内点罚函数; 解:内点罚函数的一般公式为其中: r 1>r 2 >r 3… >r k … >0 是一个递减的正值数列 r k=Cr k-1, 0<C <1 因此 罚函数为:(X,r(k ))=x1+x2+r(k )(1−x12+x2+1x1) 9、已知目标函数为fX= x 1-12+x 2+22受约束于:g 1X=-x 2-x 1-1≥0g 2X=2-x 1-x 2≥0 g 3X=x 1≥0 g 4X=x 2≥0试写出内点罚函数; 解法同上10、如图,有一块边长为6m 的正方形铝板,四角截去相等的边长为x 的方块并折转,造一个无盖的箱子,问如何截法x 取何值才能获得最大容器的箱子;试写出这一优化问题的数学模型以及用MATLAB 软件求解的程序;11、某厂生产一个容积为8000cm 3的平底无盖的圆柱形容器,要求设计此容器消耗原材料最少,试写出这一优化问题的数学模型以及用MATLAB 软件求解的程序;12、一根长l 的铅丝截成两段,一段弯成圆圈,另一段弯折成方形,问应以怎样的比例截断铅丝,才能使圆和方形的面积之和为最大,试写出这一优化设计问题的数学模型以及用MATLAB软件求解的程序;13、求表面积为300m2的体积最大的圆柱体体积;试写出这一优化设计问题的数学模型以及用MATLAB软件求解的程序;14、薄铁板宽20cm,折成梯形槽,求梯形侧边多长及底角多大,才会使槽的断面积最大;写出这一优化设计问题的数学模型,并用matlab软件的优化工具箱求解写出M文件和求解命令;15、已知梯形截面管道的参数是:底边长度为c,高度为h,面积A=64516mm2,斜边与底边的夹角为θ,见图1;管道内液体的流速与管道截面的周长s的倒数成比例关系s只包括底边和两侧边,不计顶边;试按照使液体流速最大确定该管道的参数;写出这一优化设计问题的数学模型;并用matlab软件的优化工具箱求解写出M文件和求解命令;16、某电线电缆车间生产力缆和话缆两种产品;力缆每米需用材料9kg,3个工时,消耗电能4kW·h,可得利润60元;话缆每米需用材料4kg,10个工时,消耗电能5kW·h,可得利润120元;若每天材料可供应360kg,有300个工时消耗电能200kW·h可利用;如要获得最大利润,每天应生产力缆、话缆各多少米写出该优化问题的数学模型以及用MATLAB软件求解的程序;。

matlab函数求极值

matlab函数求极值

1
0.95
0.9
0.85
0.8
0.75
0.7
0.65
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
2、 多元函数的极值
函数命令:fminsearch 调用格式:[x,feval,exitflag,output]=fminsearch(fun,x0,optipons) % 求在x0附近的极值 例4:求 f ( x, y) 100( y x 2 ) 2 (1 x) 2 的极小值.
Simpson算法计算积分 Lobatto算法计算积分
ax,tol) %二重积分
ymax,zmin,zmax,tol)
%三重积分
例1:求I=
e
1 0
x2
dx
.
(1)利用quad,quadl计算 format long I=quad('exp(-x.^2)',0,1,1e-8) Il=quadl('exp(-x.^2)',0,1,1e-8) I= 0.74682413285445 Il = 0.74682413398845
y = 1 ./ ((x-.3).^2 + .01) + 1 ./ ((x-.9).^2 + .04) - 6; if nargout==2, out1 = x; out2 = y; else out1 = y; end [x,y]=fminbnd(@humps,0.5,0.8) x= 0.6370 y= 11.2528 xx=0:0.001:2; yy=humps(xx); plot(xx,yy)
4、数值积分

黄金分割法进退法求极小值matlab程序

黄金分割法进退法求极小值matlab程序

%%%%%%%%%%%%%%%%%%%%%%%%%%-----进退法求合适区间-------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear;syms x; %创建一个符号变量h=diff(f(x),x); %求对x的一阶导数x0=10;g=subs(h,x0); %在x0处h的值%%%%%%%%---------初始值在极小值点左侧的时候-------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if g<0step=10;x1=x0+step;if f(x1)<=f(x0)step=2*step;x2=x1+step;while f(x1)>f(x2)x0=x1;x1=x2;step=2*step;x2=x1+step;endelsestep=0.5*step;x2=x1-step;while f(x0)>f(x2)x0=x0+0.5*step;x2=x2+step;endenda=x0;b=x2;disp(['f(x)极小值点所在区间为(',num2str(a),',',num2str(b),')']);end%%%%%%%%%%%%%%%%%%%%当极小值点在初始点右侧时%%%%%%%%%%%if g>0step=6;x1=x0-step;%以下方法仅仅适用于初始值在极小值点右侧的时候if f(x1)<=f(x0)step=2*step;x2=x1-step;while f(x1)>f(x2)x0=x1;x1=x2;step=2*step;x2=x1-step;endstep=0.5*step;x2=x1+step;while f(x0)>f(x2)x0=x0-0.5*step;x2=x2-step;endenda=x2;b=x0;disp(['f(x)极小值点所在区间为(',num2str(a),',',num2str(b),')']);end%%%%%%%%%%%%%%%%%%%%----------当极小值点就是初始点时---------------%%%%%%%%%%%if g==0xm=x0;fm=f(x0);disp(['使用黄金分割法可得到f(x)在xm=',num2str(xm),'处取最小值fm=',num2str(fm)]);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----黄金分割法求极值-------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%e=10^(-6);x2=a+0.618*(b-a);f2=f(x2);x1=a+0.382*(b-a);f1=f(x1);while abs(b-a)>eif f1<f2b=x2;x2=x1;f2=f1;x1=a+0.382*(b-a);f1=f(x1);else if f1==f2a=x1;b=x2;x2=a+0.618*(b-a);f2=f(x2);x1=a+0.382*(b-a);f1=f(x1);elsea=x1;x1=x2;f1=f2;x2=a+0.618*(b-a);f2=f(x2);endendxm=0.5*(b+a);fm=f(xm);disp(['使用黄金分割法可得到f(x)在xm=',num2str(xm),'处取最小值fm=',num2str(fm)]);自定义函数程序为:function y=f(x)y=3*x^2+2*x+5;%y=10*x^2+15*x+7;运行结果为:f(x)极小值点所在区间为(-8,10)使用黄金分割法可得到f(x)在xm=-0.33334处取最小值fm=4.6667。

黄金分割法

黄金分割法

黄金分割法黄金分割法也叫0.618法,它是一种基于区间收缩的极小值点搜索算法,当用进退法确定搜索区间后,我们只知道极小值点包含于搜索区间内,但是具体是哪个点,无法得知。

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

[]a,b 为搜索区间,黄金分割法首先根据黄金比例产生两个内点12,x x 。

120.382*()0.618*()x a b a x a b a =+-=+-然后根据()1f x ,()2f x 的大小关系来重新选择搜索区间。

(1) 若()()12f x f x <,则搜索区间变为1[,]x b ;(2) 若()()12f x f x >,则搜索区间变为2[,]a x 。

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 ff λμ>时转步骤(3)。

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

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

3. 算法的MATLAB 实现在MATLAB 中编程实现黄金分割法的函数为:min HJ 。

功能:用黄金分割法求解一维函数的极值。

调用格式:[,min ]min (,,,)x f HJ f a b eps =其中,f :为目标函数;a :极值区间的左端点;b :极值区间的右端点;e p s :精度;x :目标函数取最小值时的自变量值;m i n f :目标函数的最小值。

用黄金分割法求函数

用黄金分割法求函数

用黄金分割法求函数黄金分割法(Golden Section Method)是一种非常有效的数学搜索方法,用于求解单纯形最优化问题,即求解某个函数在给定范围内的极值。

它基于连续可微函数利用函数极值定理和比例原则来进行搜索,具有较高的准确性和可行性。

当求解函数时,黄金分割法可以用来指导其评估解的分支和缩减搜索空间的步骤。

首先,将搜索空间划分为两部分,分别称为左右区域,其中左区域的终点为最大搜索区域,右区域的终点为最小搜索区域。

然后,将左右两个区域依次拆分为具有相同比例的两个子区域(黄金分割法要求左右拆分比是1:Φ,即左右子区域面积之比是1: Φ)。

然后,将每个子区域的中点作为评估点,按照函数值在评估点处的大小,来决定是继续将左右区域拆分,还是收缩搜索区域。

如此,就可以继续进行比较,直到搜索区域减小到一定程度,从而得到函数的极大值或极小值,从而完成对函数的求解。

以上就是黄金分割法的基本思路,接下来要介绍的就是它在实际求函数问题上的应用方法。

首先,用户需要根据函数极值定理,得到搜索范围初始两端点的位置,并确定搜索区域[a,b]上的最小搜索区间。

然后,用户需要选取一个中点Xm = (a + b) / 2,并对该中点进行评估,比较左右区间函数值大小,根据函数值的大小来选取下一步要进行极值搜索的区域。

因为函数值的比较只能在搜索范围内发生,所以需要一直重复该步骤,直到搜索空间减小到一个确定的精度范围内。

最后,在搜索范围内求解函数,得到函数极值所在位置,完成函数求解。

由于黄金分割法具有高可行性,相对高的准确性和用时短,因此它在求函数中被广泛应用。

例如,它可作为解決路径計算、最佳路径搜索和布置系统时的优化手段之一;也可用于应用。

用MATLAB求极值

用MATLAB求极值

用MATLAB求极值灵活的运用MATLAB的计算功能,可以很容易地求得函数的极值。

例3.6.1 求223441x xyx x++=++的极值解首先建立函数关系:s yms sy=(3*x^2+4*x+4)/( x^2+x+1); ↙然后求函数的驻点:dy=diff(y); ↙xz=solve(dy) ↙xz=[0] [-2]知道函数有两个驻点x1=0和x2=-2,考察函数在驻点处二阶导数的正负情况:d2y=diff(y,2); ↙z1=limit(d2y,x,0) ↙z1=-2z2=limit(d2y,x,-2) ↙z2=2/9于是知在x1=0处二阶导数的值为z1=-2,小于0,函数有极大值;在x2=-2处二阶导数的值为z2=2/9,大于0,函数有极小值。

如果需要,可顺便求出极值点处的函数值:y1=limit(y,x,0) ↙y1=4y2=limit(y,x,-2) ↙y2=8/3事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。

而借助MATLAB的作图功能,我们很容易做到这一点。

例3.6.2画出上例中函数的图形解syms x ↙y=(3*x^2+4*x+4)/( x^2+x+1); ↙得到如下图形ezplot(y) ↙如何用MATLAB求函数的极值点和最大值比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值?求极值:syms x y>> y=x^3+x^2+1>> diff(y) %求导ans =3*x^2 + 2*x>> solve(ans)%求导函数为零的点ans =-2/3极值有两点。

求最大值,既求-y的最小值:>> f=@(x)(-x^3-x^2-1)f = @(x)(-x^3-x^2-1)>> x=fminunc(f,-3,3)% 在-3;-3范围内找Warning: Gradient must be provided for trust-region method;using line-search method instead.> In fminunc at 354Optimization terminated: relative infinity-norm of gradient less than options.TolFun.x =-0.6667>> f(x)ans =-1.1481在规定范围内的最大值是1.1481由于函数的局限性,求出的极值可能是局部最小(大)值。

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

MATLAB黄金分割法求一元函数极小值
%This function is used to find a function's minimum by Golden Section.
%.注:用于一元函数极小值问题
%Nov.27th,2009
%Miniment------最小值
%array---------迭代变化数组
%k-------------迭代次数
function [Miniment,array,k]=GoldenSection(y,a,b,E,Flag)
if(nargin==0)
y=sym('3*x^4-16*x^3+30*x^2-24*x+8');
a=0;b=3;E=0.00000001;Flag=1;
end
%如果Flag==1,程序将给出迭代步骤值和次数值
%如果Flag==0,程序将不给出迭代步骤值和次数值
clc;syms x;format long;lemda=0.618;%清屏,准备数据
u=b-lemda*(b-a);%首次插入的左置换区间边界点
v=a+lemda*(b-a);%首次插入的右置换区间边界点
k=0;%记录迭代次数
array(k+1,1)=a;array(k+1,2)=b;%记录迭代的区间
%while结构控制在达到输出精度时返回!
while(b-a>=E)
Yu=subs(y,x,u);
Yv=subs(y,x,v);
if(Yu==Yv)
a=u;b=v;%左右同时缩小搜索区间
u=b-lemda*(b-a);
v=a+lemda*(b-a);
k=k+1;
elseif(Yu<Yv)
b=v;%从右缩小搜索区间
v=u;
u=b-lemda*(b-a);
k=k+1;
elseif(Yu>Yv)
a=u;%从左缩小搜索区间
u=v;
v=a+lemda*(b-a);
k=k+1;
end
array(k+1,1)=a;array(k+1,2)=b;
end
%显示输出控制
if(Flag==1)
fprintf('迭代边界变化过程\n\ta\t\t\t\t\tb');array
fprintf('迭代次数k=%d\n',k);
end
%%绘制动画以方便观察!必须位于输出语句前,否则得不到执行!figure(1);clf(1);
plot(0:0.1:3,subs(y,x,[0:0.1:3]));
hold on;
ASize=size(array);
h1=plot(array(1,1),0,'r.');
h2=plot(array(1,2),0,'r.');
for index=1:ASize(1,1);
pause(0.5);
set(h1,'xdata',array(index,1));
set(h2,'xdata',array(index,2));
drawnow;
end
%以下是输出语句Miniment = (a+b)/2;。

相关文档
最新文档