您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > MATLAB黄金分割法求一元函数极小值
MATLAB黄金分割法求一元函数极小值%Thisfunctionisusedtofindafunction'sminimumbyGoldenSection.%.注:用于一元函数极小值问题%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(YuYv)b=v;%从右缩小搜索区间v=u;u=b-lemda*(b-a);k=k+1;elseif(YuYv)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]));holdon;ASize=size(array);h1=plot(array(1,1),0,'r.');h2=plot(array(1,2),0,'r.');forindex=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黄金分割法求一元函数极小值
链接地址:https://www.777doc.com/doc-5924159 .html