黄金分割法的MATLAB程序算例
- 格式:docx
- 大小:12.40 KB
- 文档页数:1
机械优化设计matlab优化设计程序学校:班级:学号:姓名:指导老师:一.进退法求最优点所在区间1.算例:函数:f=x(1)^3+x(2)^2-10*x(1)*x(2)+1;初始参数:x0=0,step=0.01,st=[0,0],sd=[1,1];2.编程代码:function [lb,ub]=jintuifa(x0,step0,st,sd)% lb为区间下限,up为区间上限% x0初始探测点,step0是初始探测步长,st初始搜索点,sd是初始搜索方向step=step0;f0=jintui(x0,st,sd);x1=x0+step0;f1=jintui(x1,st,sd);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2;f1=f0;f0=f2;endendendend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd)f=objfun(st+a.*sd);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=objfun(x)f=x(1)^3+x(2)^2-10*x(1)*x(2)+1;end3.运行结果二.黄金分割法求最求最优值1.eg:函数:f=x^2+2*x;初始参数:a=-3,b=5,e=0.0001;2.编程代码:function [ans,sp]=golden(a,b,e)%[a,b]初始区间,e为最小区间长度要求%ans为最优解,sp为所需迭代次数a(1)=a;b(1)=b;L=e;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;m(1)=feval('f1',t(1));n(1)=feval('f1',u(1));while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endm(k+1)=feval('f1',t(k+1));n(k+1)=feval('f1',u(k+1));ans=feval('f1',t(k+1));k=k+1;endans=(a(k)+b(k))/2;sp=k-1;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function y=f1(x)y=x^2+2*x;end3.运行结果三.无约束优化方法——坐标轮换法1.eg:函数:min f(x)=4*(x(1)-5)^2+(x(2)-6)^2;初始参数:初始点x为[8,9];2.编程代码:function [x,f]=lunhuan(x0)%输入初始点x0[8,9]%输出最优解点x,与最优解值fp=1;h=0.000001;x=x0;while(p>h)%做精度比较w=x(1);q=x(2);d1=[1,0];a1=golden('objfun',x,d1);%黄金分割法求最佳步长 x=x+a1*d1;d2=[0,1];a2=golden('objfun',x,d2);x=x+a2*d2;p=sqrt((x(1)-w)^2+(x(2)-q)^2);endf=objfun(x);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=objfun(x)%函数名f=4*(x(1)-5)^2+(x(2)-6)^2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [lb,ub]=jintuifa(st,sd)%进退法函数x0=0;step0=0.000001;step=step0;f0=jintui(x0,st,sd);x1=x0+step0;f1=jintui(x1,st,sd);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2;f1=f0;f0=f2;endendendend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd)f=objfun(st+a.*sd);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ans=golden(f_name,st,sd)[a,b]=jintuifa(st,sd); %进退法求最佳步长区间a(1)=a;b(1)=b;L=0.1;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;p=st+t(1)*sd;q=st+u(1)*sd;m(1)=feval(f_name,p);n(1)=feval(f_name,q);while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endw=st+t(k+1)*sd;z=st+u(k+1)*sd;m(k+1)=feval(f_name,w);n(k+1)=feval(f_name,z);ans=feval(f_name,w);k=k+1;endt(k)=0;u(k)=0;m(k)=0;n(k)=0;p=[a',b',t',u',m',n'];ans=(a(k)+b(k))/2;end3.运行结果四.无约束优化方法——鲍威尔法1.eg:函数:min f(x)=4*(x(1)-5)^2+(x(2)-6)^2;初始参数:初始点x为[8,9],初始搜索方向[0,1],[1,0];2.编程代码:function [x,f]=powill(x0,d1,d2)%输入x0为初始点,d1,d2为两个线性无关向量for k=1:2w=x0(1);q=x0(2);a1=golden('objfun',x0,d1);x1=x0+a1*d1;a2=golden('objfun',x1,d2);x2=x1+a2*d2;d1=d2;d2=x2-x0;a3=golden('objfun',x2,d2);x3=x2+a3*d2;x0=x3;endx=x0;f=objfun(x);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=objfun(x)f=4*(x(1)-5)^2+(x(2)-6)^2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [lb,ub]=jintuifa(st,sd)x0=0;step0=0.0001;step=step0;f0=jintui(x0,st,sd);x1=x0+step0;f1=jintui(x1,st,sd);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2;f1=f0;f0=f2;endendend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd)f=objfun(st+a.*sd);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ans=golden(f_name,st,sd)[a,b]=jintuifa(st,sd);a(1)=a;b(1)=b;L=0.1;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;p=st+t(1)*sd;q=st+u(1)*sd;m(1)=feval(f_name,p);n(1)=feval(f_name,q);while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endw=st+t(k+1)*sd;z=st+u(k+1)*sd;m(k+1)=feval(f_name,w);n(k+1)=feval(f_name,z);ans=feval(f_name,w);k=k+1;endend3.运行结果五.有约束优化方法——复合形法1.eg:函数:min f(x)=x1^2+x2^2-x1*x2-10*x1-4*x2+60 St:g1(x)=-x1≤0g2(x)=-x2≤0g3(x)=x1-6≤0g4(x)=x2-8≤0g5(x)=x1+x2-11≤02.编程代码:function fuhexing(n,b,h,xb1,xb2)%元素数n,初始可行点b,精度h,xb1横坐标上下界,xb2为纵坐标上下界if (rem(n,2)==0)k=n+n/2;elsek=n+(n+1)/2;end%取k值A=kexingdian(k,xb1,xb2,b');%确定可行点A=mubiao(A,n,k,h);%求出目标函数并排序比较,得出最优解End %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function A=mubiao(A,n,k,h)for i=1:kA(3,i)=objfun(A(:,i));endB=A';%根据目标函数值排序A=sortrows(B,3)';p=0;for j=1:kx=(objfun(A(:,j))-objfun(A(:,1)))^2;p=p+x;endo=sqrt(p/(k-1));%收敛条件if(o<h)%判断所求点是否为最优点disp('最优点为')xz(1)=A(1,1);xz(2)=A(2,1);disp(xz);disp('其函数值为')f=A(3,1);disp(f);elsexr=Xcpanduan(A,k,n,h,1.3);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function A=kexingdian(k,xb1,xb2,b)A=zeros(3,k);A(1,1)=b(1);A(2,1)=b(2);for i=2:kA(1,i)=xb1(1)+rand(1)*(xb1(2)-xb1(1));A(2,i)=xb2(1)+rand(1)*(xb2(2)-xb2(1));%产生j个顶点endt=0;for j=1:kif(A(1,j)+A(2,j)<=11&&A(1,j)<=6&&A(2,j)<=8)%判断是否有不可行点t=t+1;T(:,t)=A(:,j);endendif(t<k)%计算出可行点的中心位置xcxc=zhongxindian(T,t);endt=0;for j=1:k%利用中心点将原不可行点逼近为可行点while(A(1,j)+A(2,j)>11||A(1,j)>6||A(2,j)>8)A(:,j)=xc+0.5*(A(:,j)-xc);endendendx=x0;f=objfun(x);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function f=objfun(x)f= x1^2+x2^2-x1*x2-10*x1-4*x2+60;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function xc=Xcpanduan(A,k,n,h,a)for i=1:k-1T(:,i)=A(:,i);endxc=zhongxindian(T,k-1);%计算除最坏点以外的可行点中心坐标if(xc(1)+xc(2)<=11&&xc(1)<=6&&xc(2)<=8)%判断xc是否可行xr=Xrpanduan(xc,A,a,n,k,h);A(:,k)=xr;else%不可行时,即重新确定初始可行点fuhexing(n,h,A(:,1),xr);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function xc=zhongxindian(T,t)xc=[0;0;0];for i=1:txc=xc+T(:,i);endxc=xc/t;%求解中心点end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function xr=Xrpanduan(xc,A,a,n,k,h)xr=xc+a*(xc-A(:,k));while(xr(1)+xr(2)>11||xr(1)>6||xr(2)>8)%判断xr 是否可行若不可行,则持续迭代a=0.5*a;xr=xc+a*(xc-A(:,k));endxr=ercipanduan(a,xr,A(:,k),A,n,k,xc,h,xr);%可行时进入下一判断end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function xr=ercipanduan(a,p,b,A,n,k,xc,h,t)if(objfun(p)>=objfun(b))%判断反射点和最坏点函数值的大小if(a<=1e-10)A(:,k)=A(:,k-1);xr=Xcpanduan(A,k,n,h,a);disp(xr);elsea=0.5*a;xr=Xrpanduan(xc,A,a,n,k,h);%返回中心点判断,持续迭代endelseA(:,k)=p;%以反射点取代最坏点进行循环mubiao(A,n,k,h);xr=t;endend3.运行结果五.有约束优化方法——混合惩罚法1.eg:函数:min f(x)=(x(4)-x(1))^2+(x(5)-x(2))^2+(x(6)-x(3))^2;St:g1=x(1)^2+x(2)^2+x(3)^2-5;g2=(x(4)-3)^2+x(5)^2-1;g3=x(6)-8;g4=4-x(6);2.编程代码function [x,f]=hunhechengfa(x0,r0,c,h1,h2)k=1;z=0;A(:,1)=x0;r(1)=r0;while (z==0)k=k+1;x=lunhuan(x0,r(k-1));A(:,k)=x;r(k)=c*r(k-1);z=shoulian(A,r,h1,h2,k);if(z==1)break;endx0=x;enddisp('最优解点x=');disp(x);disp('最优值=');f=fhanshu(x);disp(f);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function z=shoulian(A,r,h1,h2,k)%判断收敛条件U=abs(objfun(A(:,k),r(k))-objfun(A(:,k-1),r(k-1))/obj fun(A(:,k-1),r(k-1)));V=0;for i=2:kV=V+(A(1,k)-A(1,k-1))^2;endV=sqrt(V);if(U<=h1&&V<=h2)z=1;elsez=0;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function p=objfun(x,r)%φ函数g1=x(1)^2+x(2)^2+x(3)^2-5;g2=(x(4)-3)^2+x(5)^2-1;g3=x(6)-8;g4=4-x(6);j=sqrt(r);u=r*(1/g1+1/g2+1/g3+1/g4);v=(g1^2+g2^2+g3^2+g4^2)/j;p=fhanshu(x)-u+v;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function f=fhanshu(x)%目标函数f=(x(4)-x(1))^2+(x(5)-x(2))^2+(x(6)-x(3))^2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function x=lunhuan(x0,r)%轮换法p=1;h=0.01;d=zeros(6,6);a=zeros(6,1);x=x0;for i=1:6for j=1:6if(i==j)d(i,j)=1;endendendwhile(p>h)t=x;v=0;for k=1:6a(k)=golden(x,d(:,k),r);c=d(:,k);x=x-a(k)*c';v=v+(x(k)-t(k))^2;endp=sqrt(v);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ans=golden(st,sd,r)%黄金分割法求最佳步长 [g,h]=jintuifa(st,sd,r);a(1)=g;b(1)=h;L=0.01;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;p=st+t(1)*sd';q=st+u(1)*sd';m(1)=objfun(p,r);n(1)=objfun(q,r);while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endw=st+t(k+1)*sd';z=st+u(k+1)*sd';m(k+1)=objfun(w,r);n(k+1)=objfun(z,r);k=k+1;endans=(a(k)+b(k))/2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd,r)%代入步长f=objfun(st+a.*sd',r);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [lb,ub]=jintuifa(st,sd,r)%进退法求最佳步长区间x0=0;step0=0.001;step=step0;f0=jintui(x0,st,sd,r);x1=x0+step0;f1=jintui(x1,st,sd,r);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd,r);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd,r);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2; f1=f0; f0=f2;endendend3.运行结果。
黄金分割法求极小点例题黄金分割法是一种优化算法,用于求解函数的极小点。
它基于黄金比例的特性,通过不断缩小搜索范围来逼近极小点。
下面我将给出一个例题,并从多个角度进行解答。
假设我们要求解函数 f(x) = x^2 + 2x + 1 的极小点。
首先,我们需要确定搜索范围。
由于该函数是一个二次函数,开口向上,因此极小点位于函数的顶点处。
为了简化问题,我们可以选择一个合适的搜索范围,比如 [-10, 10]。
接下来,我们可以使用黄金分割法进行迭代计算。
黄金分割法的基本思想是在搜索范围内选择两个距离极点较远的点,并通过比较函数值来缩小搜索范围。
首先,我们选择搜索范围内的两个初始点,可以选择两个距离较远的点,比如 -10 和 10。
然后,根据黄金分割比例,我们可以计算出两个新的点,分别是 -10 + (10 (-10)) 0.382 ≈ -1.18 和 -10 + (10 (-10)) 0.618 ≈ 1.18。
接下来,我们分别计算这两个新点的函数值。
f(-1.18) ≈ (-1.18)^2 + 2 (-1.18) + 1 ≈ 1.5724。
f(1.18) ≈ (1.18)^2 + 2 (1.18) + 1 ≈ 5.5724。
根据比较函数值的结果,我们可以确定新的搜索范围是 [-1.18, 10]。
然后,我们再次根据黄金分割比例计算出两个新的点,分别是-1.18 + (10 (-1.18)) 0.382 ≈ 2.2364 和 -1.18 + (10 (-1.18)) 0.618 ≈ 6.9436。
再次计算这两个新点的函数值。
f(2.2364) ≈ (2.2364)^2 + 2 (2.2364) + 1 ≈ 10.4722。
f(6.9436) ≈ (6.9436)^2 + 2 (6.9436) + 1 ≈ 63.4722。
根据比较函数值的结果,我们确定新的搜索范围是 [-1.18,2.2364]。
我们可以继续进行迭代计算,直到搜索范围足够小,或者满足特定的停止条件。
MATLAB中的非线性优化算法详解在计算机科学和工程领域,非线性优化是一个非常重要的问题。
它涉及到在给定一些约束条件下,寻找使得目标函数取得最优值的变量取值。
MATLAB作为一种强大的数值计算工具,提供了多种非线性优化算法来解决这个问题。
本文将详细介绍一些常用的非线性优化算法,并探讨它们的特点和适用场景。
1. 数学背景在介绍非线性优化算法之前,我们先来了解一下非线性优化的基本数学背景。
一个非线性优化问题可以表示为以下形式:minimize f(x)subject to g(x) ≤ 0h(x) = 0其中,f(x)是目标函数,g(x)是不等式约束条件,h(x)是等式约束条件。
x是优化变量。
目标是找到x使得f(x)取得最小值,并且满足约束条件。
2. 黄金分割法黄金分割法是一种经典的非线性优化算法。
它基于一个简单的原则:将搜索区间按照黄金分割比例分为两段,并选择一个更优的区间进行下一次迭代。
该算法的思想简单明了,但是它的收敛速度比较慢,特别是对于高维问题。
因此,该算法在实际应用中较少使用。
3. 拟牛顿法拟牛顿法是一类比较常用的非线性优化算法。
它通过近似目标函数的梯度信息来进行迭代优化。
拟牛顿法的核心思想是构造一个Hessian矩阵的近似矩阵,来更新搜索方向和步长。
其中,DFP算法和BFGS算法是拟牛顿法的两种典型实现。
DFP算法是由Davidon、Fletcher和Powell于1959年提出的,它通过不断迭代来逼近最优解。
该算法的优点是收敛性比较好,但是它需要存储中间结果,占用了较多的内存。
BFGS算法是由Broyden、Fletcher、Goldfarb和Shanno于1970年提出的。
它是一种变种的拟牛顿法,通过逼近Hessian矩阵的逆矩阵来求解最优解。
BFGS算法在存储方面比DFP算法更加高效,但是它的计算复杂度相对较高。
4. 信赖域法信赖域法是一种迭代优化算法,用于解决非线性优化问题。
它将非线性优化问题转化为一个二次规划问题,并通过求解这个二次规划问题来逼近最优解。
老三论由控制论、信息论和系统论统称。
新三论指突变理论、耗散结构理论和协同论。
美国数学家维纳的“控制论”,美国数学家申农的“信息论”,美籍奥地利理论生物学家和哲学家贝塔朗菲的“系统论”;比利时化学家普里高津的“耗散结构理论”,德国物理学家哈肯的“协同论”,法国数学家托姆的“突变理论”。
老三论(系统论、控制论和信息论)及其意义:20世纪40年代,由于自然科学、工程技术、社会科学和思维科学的相互渗透与交融汇流,产生了具有高度抽象性和广泛综合性的系统论、控制论和信息论。
系统论是研究系统的模式、性能、行为和规律的一门科学。
它为人们认识各种系统的组成、结构、性能、行为和发展规律提供了一般方法论的指导。
系统论的创始人是美籍奥地利理论生物学家和哲学家路德维格·贝塔朗菲。
系统是由若干相互联系的基本要素构成的,它是具有确定的特性和功能的有机整体。
人们研究和认识系统的目的之一,就在于有效地控制和管理系统。
控制论则为人们对系统的管理和控制提供了一般方法论的指导,它是数学、自动控制、电子技术、数理逻辑、生物科学等学科和技术相互渗透而形成的综合性科学。
控制论的思想渊源可以追溯到遥远的古代。
但是,控制论作为一个相对独立的科学学科的形成却起始于本世纪20~30年代,而1948年美国数学家维纳出版了《控制论》一书,标志着控制论的正式诞生。
几十年来,控制论在纵深方向得到了很大发展,已应用到人类社会各个领域,如经济控制论、社会控制论和人口控制论等。
为了正确地认识并有效地控制系统,必须了解和掌握系统的各种信息的流动与交换,信息论为此提供了一般方法论的指导。
语言是人与人之间的信息交流的工具,文字扩大了信息交流的范围,19世纪电话和电报的发明和应用使信息交流进入了电气化时代。
信息论最早产生于通讯领域,现在已同材料和能源一起构成了现代文明的三大支柱。
信息的概念已渗透到人类社会的各个领域,因此,人们说现在是信息社会、信息时代。
美国政府提出了建设信息高速公路的宏大计划,得到了国内外的广泛支持,欧洲和日本等发达国家积极呼应,我国政府也拨出了巨额资金,以便在这项高科技领域内跟上世界发展的步伐。
1黄金分割法的优化问题(1)黄金分割法基本思路:黄金分割法适用于[a , b]区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。
因此,这种方法的适应面非常广。
黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a, b]内适当插入两点al, a2,并计算其函数值。
al, a2将区间分成三段,应用函数的单谷性质,通过函数值大小的比较,删去其中一段,是搜索区间得以缩小。
然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解。
(2)黄金分割法的基本原理一维搜索是解函数极小值的方法之一,其解法思想为沿某一已知方向求目标函数的极小值点。
一维搜索的解法很多,这里主要采用黄金分割法(0.618法)。
该方法用不变的区间缩短率0.618代替斐波那契法每次不同的缩短率,从而可以看成是斐波那契法的近似,实现起来比较容易,也易于人们所接受。
rl=a+0,382(>-a) r2=a+0,618Cb-a) 如图班2户母4) 所以新区间为[a ,于2]以为新区间,继域求新的试点黄金分割法是用于一元函数f(x)在给定初始区间[a,b]内搜索极小点* *的一种方法。
它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数[6],即只在单峰区间内才能进行一维寻优,其收敛效率较低。
其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间[7]。
具体步骤是:在区间[a,b]内取点:al , a2把[a,b]分为三段。
如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+r*(b-a);如果f(a1)<f(a2) ,令b=a2,a2=a1,a1=b-r*(b-a), 如果 | (b-a)/b | 和 | (y1-y2)/y2 | 都大于收敛精度e重新开始。
1黄金分割法的优化问题(1)黄金分割法基本思路:黄金分割法适用于[a,b]区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。
因此,这种方法的适应面非常广。
黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b]内适当插入两点a1,a2,并计算其函数值。
a1,a2将区间分成三段,应用函数的单谷性质,通过函数值大小的比较,删去其中一段,是搜索区间得以缩小。
然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解。
(2)黄金分割法的基本原理一维搜索是解函数极小值的方法之一,其解法思想为沿某一已知方向求目标函数的极小值点。
一维搜索的解法很多,这里主要采用黄金分割法(0.618法)。
该方法用不变的区间缩短率0.618代替斐波那契法每次不同的缩短率,从而可以看成是斐波那契法的近似,实现起来比较容易,也易于人们所接受。
黄金分割法是用于一元函数f(x)在给定初始区间[a,b]内搜索极小点α*的一种方法。
它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数[6],即只在单峰区间内才能进行一维寻优,其收敛效率较低。
其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间[7]。
具体步骤是:在区间[a,b]内取点:a1 ,a2 把[a,b]分为三段。
如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+r*(b-a);如果f(a1)<f(a2) ,令b=a2,a2=a1,a1=b-r*(b-a),如果|(b-a)/b|和|(y1-y2)/y2|都大于收敛精度ε重新开始。
因为[a,b]为单峰区间,这样每次可将搜索区间缩小0.618倍或0.382倍,处理后的区间都将包含极小点的区间缩小,然后在保留下来的区间上作同样的处理,如此迭代下去,将使搜索区[a,b]逐步缩小,直到满足预先给定的精度时,即获得一维优化问题的近似最优解。
最优化⽅法三分法+黄⾦分割法+⽜顿法最优化_三等分法+黄⾦分割法+⽜顿法⼀、实验⽬的1. 掌握⼀维优化⽅法的集中算法;2. 编写三分法算法3. 编写黄⾦分割法算法4. 编写⽜顿法算法⼆、系统设计三分法1.编程思路:三分法⽤于求解单峰函数的最值。
对于单峰函数,在区间内⽤两个mid将区间分成三份,这样的查找算法称为三分查找,也就是三分法。
在区间[a,b]内部取n=2个内等分点,区间被分为n+1=3等分,区间长度缩短率=1 3 .各分点的坐标为x k=a+b−an+1⋅k (k=1,2) ,然后计算出x1,x2,⋯;y1,y2,⋯;找出y min=min{y k,k=1,2} ,新区间(a,b)⇐(x m−1,x m+1) .coding中,建⽴left,mid1,mid2,right四个变量⽤于计算,⽤新的结果赋值给旧区间即可。
2.算法描述function [left]=gridpoint(left,right,f)epsilon=1e-5; %给定误差范围while((left+epsilon)<right) %检查left,right区间精度margin=(right-left)/3; %将区间三等分,每⼩段长度=marginm1=left+margin; %left-m1-m2-right,三等分需要两个点m2=m1+margin; %m2=left+margin+marginif(f(m1)<=f(m2))right=m2; %离极值点越近,函数值越⼩(也有可能越⼤,视函数⽽定)。
else %当f(m1)>f(m2),m2离极值点更近。
缩⼩区间范围,逼近极值点left=m1; %所以令left=m1.endend %这是matlab的.m⽂件,不⽤写return.黄⾦分割法1.编程思路三分法进化版,区间长度缩短率≈0.618.在区间[a,b]上取两个内试探点,p i,q i要求满⾜下⾯两个条件:1.[a i,q i]与[p i,b i]的长度相同,即b i−p i=q i−a i;2.区间长度的缩短率相同,即b i+1−a i+1=t(b i−a i)]2.算法描述⾃⼰编写的:function [s,func_s,E]=my_golds(func,left,right,delta)tic%输⼊: func:⽬标函数,left,right:初始区间两个端点% delta:⾃变量的容许误差%输出: s,func_s:近似极⼩点和函数极⼩值% E=[ds,dfunc] ds,dfunc分别为s和dfunc的误差限%0.618法的改进形式:每次缩⼩区间时,同时⽐较两内点和两端点处的函数值。
黄金分割法python代码黄金分割法Python代码黄金分割法是一种优化算法,它可以在最短时间内找到函数的最小值。
这种算法的原理是将函数的区间分成两个部分,然后选择其中一个部分进行计算,直到找到最小值。
在这个过程中,每次选择的区间都是原区间的黄金分割点。
黄金分割法的优点是可以在较短的时间内找到函数的最小值,而且不需要对函数进行求导。
这种算法的缺点是需要对函数进行多次计算,因此在计算复杂度上可能会比较高。
下面是黄金分割法的Python代码:```pythonimport mathdef golden_section_search(f, a, b, tol=1e-6):"""Golden section search algorithm to find the minimum of a function fon the interval [a, b]."""# Define the golden ratiophi = (1 + math.sqrt(5)) / 2# Define the initial pointsx1 = b - (b - a) / phix2 = a + (b - a) / phi# Define the initial function valuesf1 = f(x1)f2 = f(x2)# Loop until the interval is small enough while abs(b - a) > tol:# Choose the smaller function value if f1 < f2:b = x2x2 = x1f2 = f1x1 = b - (b - a) / phif1 = f(x1)else:a = x1x1 = x2f1 = f2x2 = a + (b - a) / phif2 = f(x2)# Return the minimum pointreturn (a + b) / 2```这个函数接受四个参数:函数f、区间的左端点a、区间的右端点b 和容差tol。
黄金分割法黄金分割法也叫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 :目标函数的最小值。
最优化方法及其Matlab程序设计1.最优化方法概述在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证,从中提取最佳方案。
最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。
最优化是每个人,每个单位所希望实现的事情。
对于产品设计者来说,是考虑如何用最少的材料,最大的性能价格比,设计出满足市场需要的产品。
对于企业的管理者来说,则是如何合理、充分使用现有的设备,减少库存,降低能耗,降低成本,以实现企业的最大利润。
由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。
用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:1)建立数学模型。
即用数学语言来描述最优化问题。
模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。
2)数学求解。
数学模型建好以后,选择合理的最优化算法进行求解。
最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。
2.最优化方法(算法)浅析最优化方法求解很大程度上依赖于最优化算法的选择。
这里,对最优化算法做一个简单的分类,并对一些比较常用的典型算法进行解析,旨在加深对一些最优化算法的理解。
最优化算法的分类方法很多,根据不同的分类依据可以得到不同的结果,这里根据优化算法对计算机技术的依赖程度,可以将最优化算法进行一个系统分类:线性规划与整数规划;非线性规划;智能优化方法;变分法与动态规划。
2.1 线性规划与整数规划线性规划在工业、农业、商业、交通运输、军事和科研的各个研究领域有广泛应用。
例如,在资源有限的情况下,如何合理使用人力、物力和资金等资源,以获取最大效益;如何组织生产、合理安排工艺流程或调制产品成分等,使所消耗的资源(人力、设备台时、资金、原始材料等)为最少等。
实验二黄金分割法实验指导书一、实验目的:1、加深对黄金分割法的基本理论和算法步骤的理解。
2、培养学生独立编制、调试机械优化算法程序的能力。
3、培养学生灵活运用优化设计方法解决工程实际问题的能力。
二、主要设备及软件配置硬件:计算机(1台/人)软件:VC6.0(c++)三、算法程序框图及算法步骤图1-2 黄金分割法程序框图算法程序框图:如图1-2所示。
算法步骤:1)给出初始搜索区间[a,b]及收敛精度ε,将λ赋以0.618。
2)按坐标点计算公式计算a1,a2;并计算其对应的函数值y1,y2。
3)根据区间消去法原理缩短搜索区间。
为了能用原来的坐标点计算公式,需进行区间名称的代换,并在保留区间中计算一个新的试验点及其函数值。
如果y1≥y2,则新区间=[a1 b],a=a1,a1=a2,y1=y2,插入新点a2=a+λ*(b-a) ,y2=f(a2);如果y1<y2,则新区间=[a a2],b=a2,a2=a1,y2=y1插入新点a1=b-λ*(b-a) ,y1=f(a1);4)检查区间是否缩短到足够小和函数值收敛到足够精度,如果收敛条件满足,则取最后两试验点的平均值作为极小点的数值近似解。
如果条件不满足则转向步骤3)进行新的区间缩小。
四、实验内容与结果分析1、根据算法程序框图和算法步骤编写计算机程序;2、求解函数f(x)=x+20/x的极小点,初始搜索区间为[0.2,1], 收敛精度ε=0.01;3、如果初始搜索区间为[0.1,10],收敛精度ε=0.001,结果又如何?4、试分析初始搜索区间和收敛精度对搜索计算的影响。
附录:黄金分割法源程序#include <stdio.h>#include <conio.h>#include <math.h>#include <iostream.h>#define e 0.001#define tt 0.01float function(float x){// float y=xa*pow(x,3)-b*pow(x,2)-c*x+d; //求解的一维函数float y=1*pow(x,4)-5*pow(x,3)-4*pow(x,2)-6*x+60; //求解的一维函数return(y);}void finding(float a[3], float f[3]){float t=tt,a1,f1,ia;//初始区间的下界值a[0]=0;f[0]=function(a[0]);for (int i=0;;i++){a[1]=a[0]+t; f[1]=function(a[1]);if ((f[1]<f[0])) break;if ((fabs(f[1]-f[0])>=e)){t=-t;a[0]=a[1];f[0]=f[1];}else{if (ia==1) return;t=t/2;ia=1;}}for (i=0;;i++){a[2]=a[1]+t; f[2]=function(a[2]);if(f[2]>f[1]) break;t=2*t;a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];}if (a[0]>a[2]){a1=a[0]; f1=f[0];a[0]=a[2]; f[0]=f[2];a[2]=a1; f[2]=f1;}return;}float gold(float *ff){float a1[3],f1[3],a[4],f[4];float aa;finding (a1,f1);a[0]=a1[0]; f[0]=f1[0];a[3]=a1[2]; f[3]=f1[2];a[1]=a[0]+0.382*(a[3]-a[0]); a[2]=a[0]+0.618*(a[3]-a[0]);f[1]=function(a[1]); f[2]=function(a[2]);for (int i=0;;i++){if (f[1]>=f[2]){a[0]=a[1]; f[0]=f[1];a[1]=a[2]; f[1]=f[2];a[2]=a[0]+0.618*(a[3]-a[0]); f[2]=function(a[2]);}else{a[3]=a[2]; f[3]=f[2];a[2]=a[1]; f[2]=f[1];a[1]=a[0]+0.382*(a[3]-a[0]); f[1]=function(a[1]);}if ((a[3]-a[0]<e)){aa=(a[1]+a[2])/2; *ff=function(aa);break;}}return(aa);}void main(){// TODO: Add extra validation herefloat xx,ff;xx=gold(&ff);cout<<"极值点X="<<xx<<endl;cout<<"极值y="<<ff<<endl;#include <stdio.h>#include <conio.h>#include <math.h>#include <iostream.h> #define e 0.001#define tt 0.01float function(float x){// float y=xa*pow(x,3)-b*pow(x,2)-c*x+d; //求解的一维函数 float y=(x+1)*1*pow(x-2,2); //求解的一维函数return(y);}void finding(float a[3], float f[3]){float t=tt,a1,f1,ia;//初始区间的下界值a[0]=0;f[0]=function(a[0]);for (int i=0;;i++){a[1]=a[0]+t; f[1]=function(a[1]);if ((f[1]<f[0])) break;if ((fabs(f[1]-f[0])>=e)){t=-t;a[0]=a[1];f[0]=f[1];}else{if (ia==1) return;t=t/2;ia=1;}}for (i=0;;i++){a[2]=a[1]+t; f[2]=function(a[2]);if(f[2]>f[1]) break;t=2*t;a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];}if (a[0]>a[2]){a1=a[0]; f1=f[0];a[0]=a[2]; f[0]=f[2];a[2]=a1; f[2]=f1;}return;}float gold(float *ff){float a1[3],f1[3],a[4],f[4];float aa;finding (a1,f1);a[0]=a1[0]; f[0]=f1[0];a[3]=a1[2]; f[3]=f1[2];a[1]=a[0]+0.382*(a[3]-a[0]); a[2]=a[0]+0.618*(a[3]-a[0]); f[1]=function(a[1]); f[2]=function(a[2]);for (int i=0;;i++){if (f[1]>=f[2]){a[0]=a[1]; f[0]=f[1];a[1]=a[2]; f[1]=f[2];a[2]=a[0]+0.618*(a[3]-a[0]); f[2]=function(a[2]);}else{a[3]=a[2]; f[3]=f[2];a[2]=a[1]; f[2]=f[1];a[1]=a[0]+0.382*(a[3]-a[0]); f[1]=function(a[1]);}if ((a[3]-a[0]<e)){aa=(a[1]+a[2])/2; *ff=function(aa);break;}}return(aa);}void main(){// TODO: Add extra validation herefloat xx,ff;xx=gold(&ff);cout<<"极值点X="<<xx<<endl;cout<<"极值y="<<ff<<endl;}。
黄金分割法02008202罗黎一黄金分割法基本思路黄金分割法适用于[a,b]区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。
因此,这种方法的适应面非常广。
黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b]内适当插入两点a1,a2,并计算其函数值。
a1,a2将区间分成三段,应用函数的单谷性质,通过函数值大小的比较,删去其中一段,是搜索区间得以缩小。
然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解。
二黄金分割法的基本原理一维搜索是解函数极小值的方法之一,其解法思想为沿某一已知方向求目标函数的极小值点。
一维搜索的解法很多,这里主要采用黄金分割法(0.618法)。
该方法用不变的区间缩短率0.618代替斐波那契法每次不同的缩短率,从而可以看成是斐波那契法的近似,实现起来比较容易,也易于人们所接受。
黄金分割法是用于一元函数f(x)在给定初始区间[a,b]内搜索极小点xmin的一种方法。
它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数,即只在单峰区间内才能进行一维寻优,其收敛效率较低。
其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间。
具体步骤是:在区间[a,b]内取点:a1 ,a2 把[a,b]分为三段。
如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+0.618*(b-a);如果f(a1)<f(a2) ,令b=a2,a2=a1,a1=b-0.618*(b-a),如果|(b-a)/b|和|(y1-y2)/y2|都大于收敛精度ε重新开始循环。
因为[a,b]为单峰区间,这样每次可将搜索区间缩小0.618倍,处理后的区间都将包含极小点的区间缩小,然后在保留下来的区间上作同样的处理,如此迭代下去,将使搜索区[a,b]逐步缩小,直到满足预先给定的精度时,即获得一维优化问题的近似最优解。
电子信息学院《MATLAB与通信仿真》实验指导书刘紫燕编写适用专业:通信工程贵州大学二O一四年二月前言本课程是通信工程专业的选修课程。
课程内容包含MATLAB的基本操作、MATLAB程序设计、函数文件、MATLAB的图形和数据处理、SIMULNK的基本应用及其在通信工程中的应用等。
通过本课程的学习,掌握MATLAB软件使用和编程方法,验证和深化书本知识,从而加强基础知识,掌握基本技能,提高MATLAB软件的编程能力,并用MATLAB软件解决通信工程专业中的实际问题,同时,针对通信工程专业的特点,要求学生掌握使用MATLAB来研究和开发与本专业相关的系统的方法。
本课程设置5个实验,均为设计性实验。
建议实验学时为12学时。
实验一是MATLAB软件的基本操作;实验二是MATLAB程序设计;实验三是MATLAB的图形绘制;实验四是MATLAB的数据处理;实验五是MATLAB/Simulink在电路中的仿真设计。
每个实验2个小时左右,为了使学生更好的掌握实验内容,学生务必要做到以下几点:(1)实验前认真预习实验。
明确实验目的,熟悉实验内容,理论分析实验结果,编写相应的程序代码,并撰写出预习报告。
(2)实验过程中积极思考,深入分析命令、程序的执行过程和执行结果,对比理论分析结果,分析评判实验结果,并把实验中出现的问题及解决方法记录下来。
(3)实验完成后,总结本次实验有哪些收获,还存在什么问题,撰写并提交最终的实验报告。
本指导书实验项目和要求明确,学生容易着手实验并得出实验结果。
本实验指导书适用于通信工程专业。
目录实验一MATLAB的基本操作 (1)实验二MATLAB程序设计 (9)实验三MATLAB的图形绘制 (11)实验四MATLAB的数据处理 (13)实验五MATLAB/Simulink在电路中的仿真设计 (15)实验报告的基本内容及要求 (20)贵州大学实验报告 (21)实验一 MATLAB 的基本操作实验学时:2实验类型:设计实验要求:必做一、实验目的1、 熟悉MATLAB 的界面功能和基本操作;2、 掌握MATLAB 的基本运算方法;3、 掌握MATLAB 的矩阵运算方法;4、 掌握MATLAB 中帮助命令的使用方法。
二分法和newton法:x^2-2*x-1 >> syms x>> f=x^2-2*x-1;>> subplot(1,2,1)>> [m,n]=erff(f,2,4,20,0.0001)m =2.4142n =14>> subplot(1,2,2)>> [o,p]=newton(f,4,20,0.0001)o =2.4142p =5二分法函数:function [root,n]=erff(f,a,b,N,eps)k=0;f1=subs(f,findsym(sym(f)),a);f2=subs(f,findsym(sym(f)),b);if(f1==0)root=a;n=k;return;endif(f2==0)root=b;n=k;return;endif(f1*f2>0)disp('两端点点对应的函数值同号');return;endwhile(1)k=k+1;r=subs(f,findsym(sym(f)),(a+b)/2); u(k)=abs(r);if(r==0)root=(a+b)/2;n=k;return;endif(f1*r<0)b=(a+b)/2;endif(f2*r<0)a=(a+b)/2;endif(abs(r)<eps)root=(a+b)/2;n=k;plot(1:k,u(1:k),'r-');xlabel('迭代次数');ylabel('误差');title('二分法');return;endif(k>N)disp('迭代N次不出结果');return;endendnewton迭代法函数:function [root n]=newton(f,x0,N,eps)k=0;df=diff(f);if(subs(f,findsym(sym(f)),x0)==0)root=x0;n=k;return;endwhile(1)k=k+1;x1=x0-subs(f,findsym(sym(f)),x0)/subs(df,findsym(sym(f)),x0); u(k)=abs(x1-x0);if(abs(x1-x0)<eps)root=x1;n=k;plot(1:k,u(1:k),'r');xlabel('迭代次数');ylabel('误差');title('newton法');return;endx0=x1;if(k>N)disp('不收敛');return;endend黄金分割法:x^2-sin(x)>> syms x>> phi=x^2-sin(x);>> [s,phis,k,G,E]=golds(phi,0,1,1e-4,1e-5)s =0.4502phis =-0.2325k =21G =0 0.3820 0.6180 1.00000 0.2361 0.3820 0.61800.2361 0.3820 0.4721 0.61800.3820 0.4721 0.5279 0.61800.3820 0.4377 0.4721 0.52790.3820 0.4164 0.4377 0.47210.4164 0.4377 0.4508 0.47210.4377 0.4508 0.4590 0.47210.4377 0.4458 0.4508 0.45900.4458 0.4508 0.4540 0.45900.4458 0.4489 0.4508 0.45400.4489 0.4508 0.4520 0.45400.4489 0.4501 0.4508 0.45200.4489 0.4497 0.4501 0.45080.4497 0.4501 0.4504 0.45080.4497 0.4499 0.4501 0.45040.4499 0.4501 0.4502 0.45040.4501 0.4502 0.4503 0.45040.4501 0.4502 0.4502 0.45030.4501 0.4502 0.4502 0.45020.4502 0.4502 0.4502 0.4502E =1.0e-004 *0.6611 0.0000黄金分割法函数:function [s,phis,k,G,E]=golds(phi,a,b,delta,epsilon)t=(sqrt(5)-1)/2;h=b-a;phia=subs(phi,findsym(sym(phi)),a);phib=subs(phi,findsym(sym(phi)),b) ;p=a+(1-t)*h;q=a+t*h;phip=subs(phi,findsym(sym(phi)),p);phiq=subs(phi,findsym(sym(phi)),q) ;k=1;G(k,1:4)=[a,p,q,b];while((abs(phib-phia)>epsilon)||(h>delta))if(phip<phiq)b=q; phib=phiq; q=p; phiq=phip;h=b-a; p=a+(1-t)*h; phip=subs(phi,findsym(sym(phi)),p);elsea=p; phia=phip; p=q; phip=phiq;h=b-a; q=a+t*h; phiq=subs(phi,findsym(sym(phi)),q);endk=k+1; G(k,1:4)=[a,p,q,b];endds=abs(b-a); dphi=abs(phib-phia);if(phip<=phiq)s=p; phis=phip;elses=q; phis=phiq;endE=[ds,dphi];。