0.618法的matlab实现
交通运输matlab仿真实验指导书-附程序
《Matlab与通信仿真》实验指导书(下)通信基础教研室上课时间:学年第学期系部:班级:姓名:班内序号:指导教师:实验课程成绩:目录实验一MATLAB基础实验 (1)实验一成绩实验二绘图和确知信号分析实验 (8)实验二成绩实验三随机信号与数字基带实验 (15)实验三成绩实验四模拟调制实验 (24)实验四成绩实验五模拟信号数字传输实验(一) (32)实验五成绩实验六模拟信号数字传输实验(二) (41)实验六成绩实验七数字频带传输系统实验 (47)实验七成绩实验八通信系统仿真综合实验 (57)实验八成绩实验一 MATLAB 基础实验一、实验目的● 了解MATLAB 程序设计语言的基本特点,熟悉MATLAB 软件运行环境 ● 掌握创建、保存、打开m 文件及函数的方法● 掌握变量等有关概念,具备初步的将一般数学问题转化为对应的计算机模型并进行处理 的能力二、实验内容及步骤1.在Command Window 里面计算①(358)510++÷⨯;②sin(3)π③123456789A ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦,789456123B ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦,计算:,,\,/C A B D A B A C C B =⨯=+; ④3 1.247.5 6.6 3.15.4 3.4 6.1D ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦,求1',,D D D -; ⑤12345678i i Z i i ++⎡⎤=⎢⎥++⎣⎦,输入复数矩阵;2.建立.m 文件,用for 循环语句生成10×10的矩阵A :12102311101119⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦,将A 矩阵进行水平和垂直翻转得到矩阵B 和C 。
将A 矩阵的前5行,5列变成0并赋值给D 。
3.建立.m 文件,随机产生一个50×50的矩阵,元素值为从0到255,要求用0和255对该矩阵进行标记,元素值大于128的标记为255,元素值小于128的标记为0。
[设计]罚函数法MATLAB程序
[设计]罚函数法MATLAB程序一、进退法、0.618法、Powell法、罚函数法的Matlab程序设计罚函数法(通用)function y=ff(x,k)y=-17.86*0.42*x(1)/(0.8+0.42*x(1))*(1-exp(-2*(0.8+0.42*x(1))/3))*exp(-1.6)*x(2)-22.99*x(1)/(0.8+x(1))*(1-exp(-2*(0.8+x(1))/3))*x(3)+k*(x(2)-(1.22*10^2*(9517.8*exp(-1.6-2*0.42*x(1)/3)*x(2)+19035.6*exp(-2*x(1)/3)*x(3)))/(1.22*10^2+9517.8*exp(-1.6-2*0.42*x(1)/3)*x(2)+19035.6*exp(-2*x(1)/3)*x(3)))^2+k*(x(3)-exp(-0.8-2*x(1)/3)*x(3)-exp(-2.4-2*0.42*x(1)/3)*x(2))^2; % 主函数,参数包括未知数的个数n,惩罚因子q,惩罚因子增长系数k,初值x0,以及允许的误差r function G=FHS(x0,q,k,n,r,h,a) l=1;while (l)x=powell(x0,n,q,r(1),h,a); %调用powell函数g(1)=ff1(x),g(2)=ff2(x) . . . g(p)=ffp(x); %调用不等式约束函数,将其值%存入数组gh(1)=hh1(x),h(2)=hh2(x) . . . h(t)=hht(x); %调用等式约束函数,将其值%存入数组hfor i=1:pif g(i)<rfor j=1:tif abs(h(j))<r(2)continue;elsebreak;endendelsebreak;endendif (i==p)&(j==t) %如果所有约束条件的值都在允许的范围内就结束 %搜索,否则加大惩罚力度继续搜索l=0;elsex0=x;q=k*q;endendG=x%powell算法,用于寻找无约束最优值点function powel=powell(x0,n,q,r,h,a)d=eye(n); %n个线性无关的初始搜索方向k=1;kk=1;xx(1,1:n)=x0;while (kk)y(1,1:n)=xx(k,1:n);for j=1:ns(j)=HJ(y(j,1:n),d(j,1:n),q); %调用0.618算法y(j+1,1:n)=y(j,1:n)+s(j).*d(j,1:n);endd(n+1,1:n)=y(n+1,1:n)-y(1,1:n);if (norm(d(n+1,1:n),2)<r)kk=0;break;elseww=0;m=1;for i=1:ngg=ff(y(i,1:n),q)-ff(y(i+1,1:n),q);if (gg>=ww)m=i;endendcha=ff(y(1,1:n),q)-2*ff(y(n+1,1:n),q)+ff(2*y(n+1,1:n)-y(1,1:n),q); cha1=2*(ff(y(m,1:n),q)-ff(y(m+1,1:n),q));if (cha<cha1)s(n+1)=HJ(y(n+1,1:n),h,a,d(n+1,1:n),q)xx(k+1,1:2)=y(n+1,1:n)+s(n+1).*d(n+1,1:n)for j=m+1:nd(j,1:n)=d(j+1,1:n);endk=k+1;elsexx(k+1,1:n)=y(n+1,1:n);k=k+1;endendendpowel=y(n+1,1:n)function w=HJ(x0,h,d,dd,q) %0.618算法[a,b]=JTF(x0,h,d,dd,q); %调用进退法算法,确定范围r=0.618;r1=a+(1-r)*(b-a);r2=a+r*(b-a);y1=ff(x0+r1.*dd,q);y2=ff(x0+r2.*dd,q);k=1;while (abs(r1-r2)>=0.1)if y1<y2b=r2;r2=r1;y2=y1;r1=a+(1-r)*(b-a);y1=ff(x0+r1.*dd,q);elsea=r1;r1=r2;y1=y2;r2=a+r*(b-a);y2=ff(x0+r2.*dd,q);endendw=(r1+r2)/2%进退法function [a,b]=JTF(x0,h,d,dd,q) r0=0;y0=ff(x0+r0.*dd,q);k=0;l=1;while (l)r1=r0+h;y1=ff(x0+r1.*dd,q);if y1<y0h=d*h;r=r0;r0=r1;y0=y1;elseif k==0;h=-h;r=r0;elsel=0;break;endendk=k+1;enda=min(r,r1);b=max(r,r1);二、进退法、0.618法的C语言程序设计例1 设f(x)=x^2-2*x+4 ,试确定初始搜索区间,并输出迭代次数main(){int n=0;float t,h,a,b,c,d,f1,f2;printf(“t,h:”);scanf(“%f,%f”,&t,&h);f1=t*t-2*t+4;if((t+h)*(t+h)-2*(t+h)+4<=f1) {c=t+h;f2=c*c-2*c+4;} else {h=-h;c=t+h; f2=c*c-2*c+4;} while(f2<=f1){h=2*h;d=t;t=c;f1=f2;c=t+h; f2=c*c-2*c+4;n=n+1;}if(c<=d){a=c;b=d;}else{a=d;b=c;}printf(“[a,b]=[%.2f,%f]\n”,a,b); printf(“n=%d\n”,n);}运行情况如下:(1)t,h:0,0.05[a,b]=[0.35,1.55]n=4(2) t,h:-1.0,0.02[a,b]=[0.26,4.10]n=7(3)t,h:-100,0.01[a,b]=[-59.05,63.83]n=13例2 用0.618法求f(x)=8x^3-2*x^2-7*x+3 的局部最优解(允许误差ε=0.0001 ,初始点设为x0=0 ,初始步长h=1 (#include“math.h”float f(x)float x;float y;{y=((8.0*x-2.0)*x-7.0)*x+3.0;return(y);}main(){int n=0;float t,h,a,b,c,d,x0,f0,f1,f2,fc,fd;printf(“t,h:”);scanf(“%f,%f”,&t,&h);f1=f(t);if (f(t+h)<=f1)c=t+h;else{h=-h;c=t+h;}f2=f(c);while(f2<=f1){d=t;t=c;f1=f2;c=t+h;f2=f(c);} if(c<=d){a=c;b=d;}else{a=d;b=c;}c=a+0.382*(b-a);fc=f(c);d=a+0.618*(b-a);fd=f(d);do{if (fc>=fd) {a=c;c=d;fc=fd;d=a+0.618*(b-a); fd=f(d);} else {b=d;d=c;fd=fc;c=a+0.382*(b-a);fc=f(c);}n++;}while (b-a>0.0001);x0=(a+b)/2.0;f0=f(x0);pintf(“n=%d,x0=%7.4f,f0=%7.4f\n”,n,x0,f0); } 运行情况如下:t,h:0,1.0n=21,xo=0.6298,f0=-0.2034(。
最优化方法实验
《最优化方法》实验报告实验序号: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法的过程中,又巩固了倒数、求解函数值等相关知识。
0.618与二分法的学习
0.618法的实例研究:一、算法理论黄金分割法是用于一元函数)(x f 在确定的初始区间],[b a 内搜索极小点a '的一种方法。
它是优化计算中的经典算法,以算法简单、效果明显而著称,是许多优化算法的基础。
但它只适用于某个区间上的凸函数。
其基本思想是:依照“去坏留好”原则,对称原则,以及等比收缩原则来逐步缩小搜索范围。
0.618法适用于单峰区间函数,即所在区间],[b a 上。
具体的说,对于单峰函数,只需选择两个试探点,即在区间],[b a 中取点)(382.01a b a x -+=,)(618.02a b a x -+=,且21x x <,就可以将包含极小点*x 的区间缩短。
事实上,必有:若)()(21x f x f >,则],[1*b x x ∈;若)()(21x f x f ≤,则],[2*x a x ∈。
根据单峰函数这个性质,就可以不断迭代缩小包含极小点的区间。
若进行k 次迭代后,有],[*k k b a x ∈,那么我们在区间],[k k b a 取两个试探点)(382.01a b a x -+=,)(618.02a b a x -+=,且21x x <,计算)(),(21x f x f 的值。
如果)()(21x f x f =,令b x a x ==21,,那么计算||b a -,如果ξ≤-||b a (ξ为所给的精度),则*2x b a =+;如果 )()(21x f x f >,令11x a k =+,k k b b =+1;如果)()(21x f x f <,令k k a a =+1,21x b k =+,如此继续。
这样每次可将搜索区间缩小0.328倍或者0.618倍,直至缩为一点。
黄金分割原理如图1所示,其中618.0=K ,区间长度为L 。
该算法为收敛速度很快的一种搜索方法。
图1.二、算法框图三、算法程序用10xf,区间为]8,2[,e取0.01为例x=x-)(2+7用C语言编程程序如下:#include <stdio.h>#include <math.h>#include <stdlib.h>#define f(x) x*x-7*x+10double hj(double *a,double *b,double e,int *n){double x1,x2,s;if(fabs(*b-*a)<=e)s=f((*b+*a)/2);else{x1=*a+0.382*(*b-*a);x2=*a+0.618*(*b-*a);if(f(x1)>f(x2))*a=x1;else*b=x2;*n=*n+1;s=hj(a,b,e,n);}return s;}main(){double s,a,b,e;int n=0;printf("Please input left boundary right boundary precision:\n"); scanf("%lf%lf%lf",&a,&b,&e);//输入区间和精度的值s=hj(&a,&b,e,&n);//调用hj函数,其中n代表迭代次数printf("a=%lf,b=%lf,s=%lf,n=%d\n",a,b,s,n);}四、算法实现方程为10xx=xf,区间是]8,2[,精度是0.01。
最优化方法实验报告(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)。
最优化方法中关于黄金分割的课题设计
1、阐述黄金分割的基本思路及原理基本思路:黄金分割法适用于[a,b]区间上的任何单股函数求极小值问题,对函数除要求”单峰”外不做其他要求,甚至可以不连续.因此,这种方法的适应面非常广,黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b 内适当插入两点a1,a2,并计算其函数值。
a1,a2将区间分成三段,应用函数的单峰性质,通过函数值大小的比较,删除其中一段,是搜索区间得以缩小。
然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小值的数值近似解。
基本原理:在单谷区间],[b a 内适当插入两点21,t t ,由此把区间],[b a 分为三段,然后再通过比较这两点函数值的大小,就可以确定是删去最左端还是最右端,或者同时删去左右两端保留中间段.如此继续下去可将单谷区间无缩小. 基本原理:所谓黄金分割就是将一线段分为两段时,要求整段长L 与较长段x 的比值正好等于较长段x 与较短段x L -的比值(如图所示),即xL xx L -= 于是有022=-+L Lx x ,解出其正根L L x 618.0215≈-=. 由此可见长段的长度应为全长的618.0倍,而短段的长度应为全长的382.0倍.因为古代的人们认为按618.0的比率来分割线段时最协调,胜似黄金,故称之为黄金分割. 2、黄金分割的算法步骤.(1)给定初始区间],[11b a ,精度要求0>ε。
令)(382.01111a b a -+=λ,)(618.01111a b a -+=μ,并计算)(1λf 与)(1μf 。
令1:=k 。
(2)若ε<-k k a b ,停止,且2kk a b x +=。
否则,当)()(k k f f μλ>时,转3;当)()(k k f f μλ≤时,转4。
(3)令k k k k k k b b a μλλ===+++111,,,)(618.01111++++-+=k k k k a b a μ,计算)(1+k f μ,令1:+=k k ,转2。
机械优化可靠性设计第三次作业
1.用进退法确定f(x)=x 2-7x+10的初始搜索区间.设x 0=0,h 0=1. 解:()()000()10,()0+1(1)40f x f f x h f f ==+===,因为000f x f x h >+()(),搜索成功,步长加倍;计算0000023 031 32f x h h f x h f f ++=+=+⨯==-()()()(), 因为00003f x h f x h +>+()(),搜索成功,步长加倍; 计算00000347 071 710f x h h f x h f f ++=+=+⨯==()()()(), 因为00003 7f x h f x h +<+()(),搜索失败,停止迭代;得到初始搜索区间为[]][0000, 71[,7]a b x h x h =++=,。
function [a, b]=jtf(varargin) if numel(varargin)<1 h0=input(' h0= ' ); x0=input(' x0= ' ); fx=@(x)x^2-7*x+10; elseinput_num= cell2mat (varargin(1, 1:2)); h0=input_num(1) ; x0=input_num(2) ; fx=varargin{3}; endh=h0;x1=x0;f1=fx(x1);x2=x1+h;f2=fx(x2); if f2>f1h=-h;x3=x1;f3=f1;x1=x2;f1=f2;x2=x3;f2=f3; endh=2*h;x3=x2+h;f3=fx(x3); while f2>=f3x1=x2;f1=f2;x2=x3;f2=f3; h=2*h;x3=x2+h;f3=fx(x3); end if h<0a=x3;b=x1; elsea=x1;b=x3; endresult=[a,b]MATLAB 程序运行结果: h0= 1 x0= 0 result =1 72.用0.618法求函数f(x)=x 2-7x+10的最优解.已知初始搜索区间为[2,8],精度为0.4。
黄金分割法求极小的MATLAB程序
黄金分割法求极小的MATLAB程序function [x,y] = goldmin(f, a ,b ,tol, maxsearch)if nargin<5, maxsearch=500; endif nargin<4, tol=1e-6; end;golden=0.6180339887498949025257; % golden=(sqrt(5)-1)/2x=b-(b-a)*golden; % x是离端点a较近的试探点y=feval(f,x); % 求x的函数值yfor k=1:maxsearch % 作最大叠代次数为maxsearch的循环。
h=b-a; % h是区间长(当b<a时是负的)if abs(h)<tol, return; end%区间长度小于tol 时退出d=a+h*golden;yd=feval(f,d); % d是离d较近的试探点,求d的函数值ydif y>=yd %当离a 较近点x的函数值y大于等于离a较远的点d的函数值yd时。
a=x; %去掉含a的一段区间,以离a 较近点x作为新区间的端点ax=d; %将d作为离新区间的点a端点较近的点。
y=yd; % 其函数值yd作为x点的函数值。
else%当离a 较近点x的函数值y小于离b较近的点d的函数值yd时。
去掉含% 端点b的一段区间,得区间[a,d],但由于现在x离d点较近,所以b=a; %令a 为端点ba=d; 令d为端点aendenderror('iteration exceeds the limitation');Fibonacci法求极小的MATLAB程序function [x,y] = Fibo(f,a,b,n)% F2=round(sqrt(5)*(0.5*(1+sqrt(5)))^(n+1)*0.2);F1=round(sqrt(5)*(0.5*(1+sqrt(5)))^(n)*0.2); F1=.44721359549995793928*1.6180339887498949025^n; F2=F1*1.6180339887498949025;F1=round(F1); F2=round(F2);h=(b-a)/F2;% 均分区间x=b-h*F1; % x 是离端点a 较近的试探点y=feval(f,x);% 求x 的函数值yfor k=1:n-2 % 循环F0=F1; F1=F2-F0; F2=F0;d=b-h*F1; yd=feval(f,d);% d 是离b 较近的试探点, 求d 的函数值ydif y>=yd% 当离a 较近点x的函数值y 大于等于离a 较远的点d 的函数值yd 时.a=x; % 去掉含端点a 的一段区间,以离a 较近点x 作为新区间的端点ax=d; % 将d 作为离新区间的端点a 较近的点.y=yd;% 其函数值yd 作为x 点的函数值.else % 当离a 较近的点x 的函数值y 小于离b 较近的点d 的函数值yd 时.%去掉含端点b 的一段区间, 得区间[a,d], 但由于现在x 离d 点较近, 所以b=a; % 令a 为端点ba=d; % 令d 为端点ah=-h;% 因交换端点, 步长应改号.endend1。
黄金分割法
黄金分割法黄金分割法也叫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 :目标函数的最小值。
01 实验一 MATLAB的基本用法
x=linspace(0,pi,5) ↙ x= 0 0.7854 1.5708 2.3562 3.1416 logspace(0,2,11) ↙ ans = Columns 1 through 7 1.0000 1.5849 2.5119 3.9811 15.8489 Columns 8 through 11 25.1189 39.8107 63.0957 100.0000
16
矩阵的裁剪
最优化-刘志斌-课后习题3-5参考答案要点word版本
最优化-刘志斌-课后习题3-5参考答案要点练习题三1、用0.618法求解问题12)(min 30+-=≥t t t t ϕ的近似最优解,已知)(t ϕ的单谷区间为]3,0[,要求最后区间精度0.5ε=。
答:t=0.8115;最小值-0.0886.(调用golds.m 函数)(见例题讲解5) 2、求无约束非线性规划问题min ),,(321x x x f =123222124x x x x -++ 的最优解解一:由极值存在的必要条件求出稳定点: 1122f x x ∂=-∂,228f x x ∂=∂,332f x x ∂=∂,则由()0f x ∇=得11x =,20x =,30x = 再用充分条件进行检验:2212f x ∂=∂,2228f x ∂=∂,2232fx ∂=∂,2120f x x ∂=∂∂,2130f x x ∂=∂∂,2230f x x ∂=∂∂ 即2200080002f ⎛⎫⎪∇= ⎪ ⎪⎝⎭为正定矩阵得极小点为T *(1,0,0)x =,最优值为-1。
解二:目标函数改写成min ),,(321x x x f =222123(1)41x x x -++- 易知最优解为(1,0,0),最优值为-1。
3、用最速下降法求解无约束非线性规划问题。
2221212122)(m in x x x x x x X f +++-=其中T x x X ),(21=,给定初始点T X )0,0(0=。
解一:目标函数()f x 的梯度112122()()142()122()()f x x x x f x x x f x x ∂⎡⎤⎢⎥∂++⎡⎤⎢⎥∇==⎢⎥-++∂⎢⎥⎣⎦⎢⎥∂⎣⎦(0)1()1f X ⎡⎤∇=⎢⎥-⎣⎦令搜索方向(1)(0)1()1d f X -⎡⎤=-∇=⎢⎥⎣⎦再从(0)X 出发,沿(1)d 方向作一维寻优,令步长变量为λ,最优步长为1λ,则有(0)(1)0101Xdλλλλ--⎡⎤⎡⎤⎡⎤+=+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦故(0)(1)2221()()()2()2()2()f x f X d λλλλλλλλλϕλ=+=--+-+-+=-=令'1()220ϕλλ=-=可得11λ= (1)(0)(1)1011011X X d λ--⎡⎤⎡⎤⎡⎤=+=+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ 求出(1)X 点之后,与上类似地,进行第二次迭代:(1)1()1f X -⎡⎤∇=⎢⎥-⎣⎦ 令(2)(1)1()1d f X ⎡⎤=-∇=⎢⎥⎣⎦令步长变量为λ,最优步长为2λ,则有(1)(2)111111X d λλλλ--⎡⎤⎡⎤⎡⎤+=+=⎢⎥⎢⎥⎢⎥+⎣⎦⎣⎦⎣⎦ 故(1)(2)2222()()(1)(1)2(1)2(1)(1)(1)521()f x f X d λλλλλλλλλϕλ=+=--++-+-+++=--=令'2()1020ϕλλ=-=可得 215λ= (2)(1)(2)2110.8111 1.25X X d λ--⎡⎤⎡⎤⎡⎤=+=+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦(2)0.2()0.2f X ⎡⎤∇=⎢⎥-⎣⎦ 此时所达到的精度(2)()0.2828f X ∇≈ 本题最优解11.5X *-⎡⎤=⎢⎥⎣⎦,()1,25f X *=-解二:利用matlab 程序求解首先建立目标函数及其梯度函数的M 文件 function f=fun(x)f=x(1)-x(2)+2*x(1)*x(1)+2*x(1)*x(2)+x(2)*x(2); function g=gfun(x)g=[1+4*x(1)+2*x(2),-1+2*x(1) +2* x(2) ]; 调用grad.m 文件 x0=[0,0];[x,val,k]=grad('fun','gfun',x0) 结果x=[ -1.0000 ,1.5000] val= -1.2500 k=33即迭代33次的到最优解x=[ -1.0000 ,1.5000];最优值val= -1.2500。
《机械优化设计》大作业
合肥工业大学《机械优化设计》课程实践研究报告一、研究报告内容:1、λ=0.618的证明、一维搜索程序作业;2、单位矩阵程序作业;3、连杆机构问题+自行选择小型机械设计问题或其他工程优化问题;(1)分析优化对象,根据设计问题的要求,选择设计变量,确立约束条件,建立目标函数,建立优化设计的数学模型并编制问题程序;(2)选择适当的优化方法,简述方法原理,进行优化计算;(3)进行结果分析,并加以说明。
4、写出课程实践心得体会,附列程序文本。
5、为响应学校2014年度教学工作会议的改革要求,探索新的课程考核评价方法,特探索性设立一开放式考核项目,占总成绩的5%。
试用您自己认为合适的方式(书面)表达您在本门课程学习方面的努力、进步与收获。
(考评将重点关注您的独创性、简洁性与可验证性)。
二、研究报告要求1、报告命名规则:学号-姓名-《机械优化设计》课程实践报告.doc2、报告提交邮址:追求:问题的工程性,格式的完美性,报告的完整性。
不追求:问题的复杂性,方法的惟一性。
评判准则:独一是好,先交为好;切勿拷贝。
目录:λ=0.618的证明、一维搜索程序作业①关于618λ的证明 (4)=.0②一维搜索的作业采用matlab进行编程 (5)采用C语言进行编程 (7)单位矩阵程序作业①采用matlab的编程 (9)②采用c语言进行编程 (9)机械优化工程实例①连杆机构 (11)②自选机构 (16)课程实践心得 (20)附列程序文本 (21)进步,努力,建议 (25)一、λ=0.618的证明、一维搜索程序作业①关于618.0=λ的证明黄金分割法要求插入点1α,2α的位置相对于区间],[b a 两端具有对称性,即)(1a b b --=λα )(2a b a -+=λα其中λ为待定常数。
此外,黄金分割法还要求在保留下来的区间内再插入一点所形成的区间新三段,与原来的区间三段具有相同的比例分布。
黄金分割法还要求在保留下来的区间内再插一点所形成的区间新三段,与原来的区间三段有相同的比例分布。
人工鱼群算法的仿真程序-matlab
ticfigure(1);hold onezplot('x*sin(10*pi*x)+2',[-1,2]);%% 参数设置fishnum=50; %生成50只人工鱼MAXGEN=50; %最多迭代次数try_number=100;%最多试探次数visual=1; %感知距离delta=0.618; %拥挤度因子step=0.1; %步长%% 初始化鱼群lb_ub=[-1,2,1];X=AF_init(fishnum,lb_ub);LBUB=[];for i=1:size(lb_ub,1)LBUB=[LBUB;repmat(lb_ub(i,1:2),lb_ub(i,3),1)];endgen=1;BestY=-1*ones(1,MAXGEN); %每步中最优的函数值BestX=-1*ones(1,MAXGEN); %每步中最优的自变量besty=-100; %最优函数值Y=AF_foodconsistence(X);while gen<=MAXGENfprintf(1,'%d\n',gen)for i=1:fishnum%% 聚群行为[Xi1,Yi1]=AF_swarm(X,i,visual,step,delta,try_number,LBUB,Y);%% 追尾行为[Xi2,Yi2]=AF_follow(X,i,visual,step,delta,try_number,LBUB,Y);if Yi1>Yi2X(:,i)=Xi1;Y(1,i)=Yi1;elseX(:,i)=Xi2;Y(1,i)=Yi2;endend[Ymax,index]=max(Y);figure(1);plot(X(1,index),Ymax,'.','color',[gen/MAXGEN,0,0])if Ymax>bestybesty=Ymax;bestx=X(:,index);BestY(gen)=Ymax;[BestX(:,gen)]=X(:,index);elseBestY(gen)=BestY(gen-1);[BestX(:,gen)]=BestX(:,gen-1);endgen=gen+1;endplot(bestx(1),besty,'ro','MarkerSize',100) xlabel('x')ylabel('y')title('鱼群算法迭代过程中最优坐标移动') %% 优化过程图figureplot(1:MAXGEN,BestY)xlabel('迭代次数')ylabel('优化值')title('鱼群算法迭代过程')disp(['最优解X:',num2str(bestx,'%1.5f')]) disp(['最优解Y:',num2str(besty,'%1.5f')]) toc。
最优化 马昌凤 第二章作业
最优化方法及其Matlab程序设计习题作业暨实验报告学院:数学与信息科学学院班级:12级信计一班姓名:李明学号:1201214049第二章 线搜索技术一、上机问题与求解过程 1、用0.618法求解 .1)(min 2--=x x x f 初始区间]1,1[-,区间精度为50.=0δ. 解:当初始时不限制近似迭代函数值得大小,编写程序运行结果为:从结果可以看出迭代次数为9次,极小点为5016.0,极小点的函数值为2500.1-。
根据人工手算,极小值点应该为500.0,所以在设计程序的时候添加函数值误差范围,并取范围为10101-⨯。
编写的设计函数程序并调试改正如下:function [s,fs,k,G,FX,E]=gold(f,a,b,H,F) %输入:% f:目标函数,a :搜索区间左侧端点;b:搜索区间右侧端点; % H :搜索区间允许范围;F :搜索区间函数值允许范围; %输出:% s:近似极小值点:fa :近似极小点数值;k:迭代次数:% FX :近似迭代函数值;E=[h,fh],h 为近似区间误差,fh 为函数值误差 t=(sqrt(5)-1)/2;h=b-a; p=a+(1-t)*h;q=a+t*h;fa=feval(f,a);fb=feval(f,b); fp=feval(f,p);fq=feval(f,q); k=1;G(k,:)=[a,p,q,b];%初始时错误语句:G(1,:)=[a,p,q,b]; %初始调试的时候没有注意到后面需要开辟k 行空间 FX(k,:)=[fa,fp,fq,fb];while (abs(fa-fb)>F) ((b-a)>H) if (fp<fq)b=q;fb=fq;q=p;fq=fp;h=b-a;p=a+(1-t)*h;fp=feval(f,p); %初始时错误语句:b=q;fb=fq;h=b-a;q=a+t*h;fq=feval(f,q); %初始调试的时候对0.618方法没有充分理解所以出现错误 elsea=p;fa=fp;p=q;fp=fq;h=b-a;q=a+t*h;fq=feval(f,q);%初始时错误语句:a=p;fa=fp;h=b-a;p=a+(1-t)*h;fp=feval(f,p); %初始调试的时候对0.618方法没有充分理解所以出现错误 end极小点(s) 迭代次数搜索区间误差 函数值误差 0.501690.04260.0006k=k+1;G(k,:)=[a,p,q,b];%初始时错误语句:G(1,:)=[a,p,q,b]; %初始调试的时候没有注意到前面已经开辟k 行空间 FX(k,:)=[fa,fp,fq,fb]; end if (fp<fq) s=p;fs=fp; elses=q;fs=fq; endh=b-a;fh=abs(fb-fa);%选取试探点最小的数值为近似点,并且计算出以上为搜索区间的的最后误差以及函数值误差 E=[h,fh];在命令窗口内输入如下命令:[s,fs,k,G,FX,E]=gold(inline('s^2-s-1'),-1,1,0.05,1e-10) 回车之后得到如下数据结果:附:在窗口中输出的结果如下>> [s,fs,k,G,FX,E]=gold(inline('s^2-s-1'),-1,1,0.05,1e-10) s = 0.5000 fs = -1.2500 k = 24 G =-1.0000 -0.2361 0.2361 1.0000 -0.2361 0.2361 0.5279 1.0000 0.2361 0.5279 0.7082 1.0000极小点 极小点数值 迭代次数 搜索区间误差 函数值误差 0.500-1.250024410321.0-⨯0000.00.2361 0.4164 0.5279 0.70820.4164 0.5279 0.5967 0.70820.4164 0.4853 0.5279 0.59670.4164 0.4590 0.4853 0.52790.4590 0.4853 0.5016 0.52790.4853 0.5016 0.5116 0.52790.4853 0.4953 0.5016 0.51160.4953 0.5016 0.5054 0.51160.4953 0.4992 0.5016 0.50540.4953 0.4977 0.4992 0.50160.4977 0.4992 0.5001 0.50160.4992 0.5001 0.5006 0.50160.4992 0.4997 0.5001 0.50060.4997 0.5001 0.5003 0.50060.4997 0.5000 0.5001 0.50030.4997 0.4999 0.5000 0.50010.4999 0.5000 0.5000 0.50010.5000 0.5000 0.5000 0.50010.5000 0.5000 0.5000 0.50000.5000 0.5000 0.5000 0.50000.5000 0.5000 0.5000 0.5000 FX =1.0000 -0.7082 -1.1803 -1.0000 -0.7082 -1.1803 -1.2492 -1.0000 -1.1803 -1.2492 -1.2067 -1.0000 -1.1803 -1.2430 -1.2492 -1.2067 -1.2430 -1.2492 -1.2406 -1.2067 -1.2430 -1.2498 -1.2492 -1.2406 -1.2430 -1.2483 -1.2498 -1.2492 -1.2483 -1.2498 -1.2500 -1.2492 -1.2498 -1.2500 -1.2499 -1.2492 -1.2498 -1.2500 -1.2500 -1.2499 -1.2500 -1.2500 -1.2500 -1.2499 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.2500 -1.25001.0e-04*0.3121 0.00002、用0.618法求解.12)(min 3+-=x x x f的近似最优解,初始搜索区间为]3,0[,区间精度为50.=1δ. 解:当初始时不限制近似迭代函数值得大小,编写程序运行结果为:从结果可以看出迭代次数为8次,极小点为8115.0,极小点的函数值为0886.0-。
0.618法牛顿法Powell法优化设计MATLAB程序设计
机械优化设计*名:***学号:************ 班级:机械工程15班1.用0.618法求一元函数f(t)=t^2+2*t在区间[-3,5]中的极小点,要求计算到区间的长度小于0.05。
用MATLAB编程如下:function [x,minf]=minHJ(f,a,b,eps)format long;if nargin==3eps=0.05;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>fua=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);minf = double(minf);format short;syms t;f=t^2+2*t;[x,fx]=minHJ(f,-3,5,eps)运行结果:2.用牛顿法求函数f = x1^2 + 4*x2^2 + x3^2 - 2*x1 + 18*x3的极小点。
用MATLAB编程如下:function [diff_x] = function_c1(x1,x2,x3)syms x1x2x3f = x1^2 + 4*x2^2 + x3^2 - 2*x1 + 18*x3;diff_x1 = diff(f,x1);diff_x2 = diff(f,x2);diff_x3 = diff(f,x3);diff_x = [diff_x1; diff_x2; diff_x3];returnendfunction [H] = function_c2(x1,x2,x3)syms x1x2x3f = x1^2 + 4*x2^2 + x3^2 - 2*x1 + 18*x3;diff_x1 = diff(f,x1);diff_x2 = diff(f,x2);diff_x3 = diff(f,x3);diff_x1_x1 = diff(diff_x1,x1);diff_x2_x2 = diff(diff_x2,x2);diff_x3_x3 = diff(diff_x3,x3);diff_x1_x2 = diff(diff_x1,x2);diff_x1_x3 = diff(diff_x1,x3);diff_x2_x1 = diff_x1_x2;diff_x2_x3 = diff(diff_x2,x3);diff_x3_x1 = diff_x1_x3;diff_x3_x2 = diff_x2_x3;H = [diff_x1_x1 diff_x1_x2 diff_x1_x3;...diff_x2_x1 diff_x2_x2 diff_x2_x3;...diff_x3_x1 diff_x3_x2 diff_x3_x3];returnende = 1;x1 = 0;x2 = 0;x3 = 0;while e>0.00001f_d = function_c1(x1,x2,x3);f = subs(f_d, 'x1,x2,x3', [x1,x2,x3]);H = function_c2(x1,x2,x3);H_inv = inv(H);x = [x1;x2;x3] - H_inv * f;e = abs(x(1)-x1) / x(1);x1 = x(1);x2 = x(2);x3 = x(3);enddisp(x)运行结果:3.用Powell法求函数f=t^2+s^2-t*s-10*t-4*s+60的最优点X*=[t,s]T。
01 实验一 MATLAB的基本用法
10
启动MATLAB后,就出现MATLAB的窗口 后 就出现 启动 的窗口
Current Directory(当 ( 前搜索目录下的文件) 前搜索目录下的文件)
Command Window(命令窗口, (命令窗口, 在这里输入命令和输出结果) 在这里输入命令和(显 示过去所输入 的命令) 的命令)
x+d = 0.618 l+d
0.618l − x 0.618l − x 则 d = = 1 − 0.618 0.382
由此模型, 由此模型,可计算出任何一个女孩子应该穿多高 的鞋子。 的鞋子。
5
以身高168厘米,下肢长为102厘米的人为例,所 厘米,下肢长为 厘米的人为例, 以身高 厘米 厘米的人为例 穿鞋子高度, 穿鞋子高度,与好看程度的关系可由下表说明
2
前 言
一、 什么是数学实验
• “数学实验”是大学数学课程的一种新的教学模式。 数学实验”是大学数学课程的一种新的教学模式。 数学实验 该课程将数学知识、数学建模与计算机应用相结合, 该课程将数学知识、数学建模与计算机应用相结合, 培养学生会用所学的知识建立数学模型, 培养学生会用所学的知识建立数学模型,并借助于 数学软件,使用计算机解决实际问题的能力。 数学软件,使用计算机解决实际问题的能力。 • “数学实验”采用开放式教学,运用现代教育思想, 数学实验”采用开放式教学,运用现代教育思想, 数学实验 改变传统的数学教学模式, 改变传统的数学教学模式,把学生上机实践与多 媒体教学手段相结合, 媒体教学手段相结合,使学生由被动接受转变为 积极主动参与。激发学生学习数学的兴趣, 积极主动参与。激发学生学习数学的兴趣,培养 学生的创造精神和创新能力。 学生的创造精神和创新能力。
0.618法
l = 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
(1)选定初始区间 及精度 ,计算试探点:
。
(2)若 ,则停止计算。否则当 时转步骤(3)。当 转步骤(4)。
(3)置
转步骤(5)
(4)置
转步骤(5)
(5)令 ,转步骤(2)。
程序:
function [x,minf] = minHJ(f,a,b,eps)
if nargin == 3
eps = 1.0e-6;
3.学习了解一维搜索方法的MATLAB实现;
4.熟练掌握0.618法的应用。
实验内容:(问题、数学模型、要求、关键词)
0.618法的MATLAB实现,并用0.618法求解问题。
用0.618法求解下面函数的极小值:
实验方法和步骤(包括数值公式、算法步骤、程序):
算法步骤
用0.618法求无约束问题 的基本步骤如下:
大连民族学院
数学实验报告
课程:最优化方法
实验题目:线性搜索与信赖域方法0.618法
系别:理学院
专业:信息与计算科学
姓名:
班级:信息10115日
实验目的:
1.熟悉使用0.618法求解区间上个点的函数值与极小值的关系;
2.在掌握0.618法原理的基础上熟练运用此方法解决问题;
熟悉使用0.618法求解区间上个点的函数值与极小值的关系,在掌握0.618法原理的基础上熟练运用此方法解决问题。0.618法仅需计算函数值,不涉及导数,用途很广泛,尤其适用于非光滑及导数表达式复杂或表达式写不出的种种情形。
最速下降法Matlab程序
%最速下降梯度法matlab程序% Steepest Descent Method% By Kshitij Deshpandeclcclear allwarning offprompt = {\'Coeficients if X1=\',\'Coefficients of X2=\',\'Coefficeint of X1X2=\',\'Initial Point=\'}; def = {\'[2 1 0]\',\'[1 -1 0]\',\'2\',\'[0 0]\'};a=inputdlg(prompt,\'Data\',1,def);a=char(a);[m,n]=size(a);x1 = eval(a(1,1:n));x2=eval(a(2,1:n));x1x2=eval(a(3,1:n));X1=eval(a(4,1:n));delf1(1) = polyval(polyder(x1),X1(1));delf1(1) = (delf1(1))+(x1x2*X1(2));delf1(2) = polyval(polyder(x2),X1(1));delf1(2) = (delf1(2))+(x1x2*X1(1));s=-delf1;%%%%%%%%%%%reportsrep(1,1:2)=s;%%%%%%%%%%x1new(1)=s(1)^2;x1new(2)=2*X1(1)*s(1);x1new(3) = X1(1)^2;x1new=x1new*x1(1);x1new_(2)=x1(2)*s(1);x1new_(3)=x1(2)*X1(1);x1new = x1new+x1new_;x2new(1)=s(2)^2;x2new(2)=2*X1(2)*s(2);x2new(3) = X1(2)^2;x2new=x2new*x2(1);x2new_(2)=x2(2)*s(2);x2new_(3)=x2(2)*X1(2);x2new = x2new+x2new_;x1x2new(1)=s(1)*s(2);x1x2new(2)=X1(1)*s(2)+X1(2)*s(1);x1x2new(3)=X1(1)*X1(2);x1x2new=x1x2*x1x2new;df = polyder(x1new+x2new+x1x2new);lambda(1) = roots(df);X1=X1+lambda(1)*s;Xrep(1,1:2)=X1;delf1(1) = polyval(polyder(x1),X1(1));delf1(1) = (delf1(1))+(x1x2*X1(2));delf1(2) = polyval(polyder(x2),X1(2));delf1(2) = (delf1(2))+(x1x2*X1(1));if all(X1)== 0fprintf(\'%d %d is the optimum point\',X1(1),X1(2));endit=2;while all(delf1)==1s=-delf1;x1new(1)=s(1)^2;x1new(2)=2*X1(1)*s(1);x1new(3) = X1(1)^2;x1new=x1new*x1(1);x1new_(2)=x1(2)*s(1);x1new_(3)=x1(2)*X1(1);x1new = x1new+x1new_;x2new(1)=s(2)^2;x2new(2)=2*X1(2)*s(2);x2new(3) = X1(2)^2;x2new=x2new*x2(1);x2new_(2)=x2(2)*s(2);x2new_(3)=x2(2)*X1(2);x2new = x2new+x2new_;x1x2new(1)=s(1)*s(2);x1x2new(2)=X1(1)*s(2)+X1(2)*s(1);x1x2new(3)=X1(1)*X1(2);x1x2new=x1x2*x1x2new;df = polyder(x1new+x2new+x1x2new);lambda(it) = roots(df);X1=X1+lambda(it)*s;delf1(1) = polyval(polyder(x1),X1(1));delf1(1) = (delf1(1))+(x1x2*X1(2));delf1(2) = polyval(polyder(x2),X1(2));delf1(2) = (delf1(2))+(x1x2*X1(1));itrep(it)=it;srep(it,1:2)=s;Xrep(it,1:2)=X1;it=it+1;end[m,n]=size(itrep);matrix=[itrep\' srep(1:n,1) srep(1:n,2) Xrep(1:n,1) Xrep(1:n,2)];answer = char(num2str(X1));answer = [\'The optimal point is [\' answer \']\'];msgbox(answer,\'Solution\');disp(\' Press Any key to View Detailed Report............\');pauseecho offreport steep;clc--------------------------------------------------------------------------------%最速下降法(爬山法)的一个matlab程序function y=steepest(x)%This program uses the steepest descent direction algorithm%to calculate the minimum of the function f(x)=x(1)^2+2*x(2)^2eps=input(\'please input your accuracy:\');%eps is the demmanded accuracy on the norm of%the gradient of the objective functionm=1;%m is the count of the iteration step of the algorithmiterstep(1,:)=x;%iterstep contains the intermediate points of iterationwhile norm(gradobject1(x))>epsgrad=gradobject1(x);alpha=goldsplictobj(x);x=x-alpha*grad;iterstep(m+1,:)=x;m=m+1;endstep=max(size(iterstep))-1plot(iterstep(:,1),iterstep(:,2));%Draw the search trajectorytitle(\'The search trajectory of the Steepest dscent direction algorithm\'); xlabel(\'x1-axis\');ylabel(\'x2-axis\');text(x(1),x(2),\'The minimum point found by the algorithm\');text(iterstep(1,1),iterstep(1,2),\'The initial point (2,1)\');gtext(\'The number of the total iteration steps of the algorithm is:\'); gtext(\'The set accuracy in advance is 1.0*10^{-10}\');%The following subfunction is on the objective functionfunction y=object1(v)y=v(1)^2+2*v(2)^2;%The following subfunction is on the gradient of%the objective functionfunction y=gradobject1(v)y(1)=2*v(1);y(2)=4*v(2);%The following subfunction is on the comming%search function of alphafunction y=substi(alpha,x)y=feval(\'object1\',x-alpha*gradobject1(x));%The following subfunction is on the goldspliction %search of the substi functionfunction y=goldsplictobj(x)a=0;b=10;eps=0.01;y1=a+0.382*(b-a);y2=a+0.618*(b-a);while abs(b-a)>epsif substi(y1,x)>substi(y2,x)a=y1;b=b;y1=a+0.382*(b-a);y2=a+0.618*(b-a);elseif substi(y2,x)>substi(y1,x)a=a;b=y2;y1=a+0.382*(b-a);y2=a+0.618*(b-a);elsea=y1;b=y2;y1=a+0.382*(b-a);y2=a+0.618*(b-a);endendy=(y1+y2)/2;。
0.618法的matlab实现
页脚内容1实验报告实验题目:0.618法的MATLAB 实现 学生姓名: 学号:实验时间:2013-5-13一.实验名称:0.618法求解单峰函数极小点 二.实验目的及要求:1.了解并熟悉0.618法的方法原理,以及它的MATLAB 实现.2.运用0.618法解单峰函数的极小点.三.实验内容:1. 0.618法方法原理:定理:设f 是区间],[b a 上的单峰函数,] ,[ ,)2()1(b a x x ∈,且)2()1(x x <.如果)()()2()1(x f x f >,则对每一个],[)1(x a x ∈,有)()()2(x f x f >;如果)()()2()1(x f x f ≤,则对每一个] ,[)2(b x x ∈,有)()()1(x f x f ≥.根据上述定理,只需选择两个试探点,就可将包含极小点的区间缩短.事实上,必有 如果)()()2()1(x f x f >,则],[)1(b x x ∈;如果)()()2()1(x f x f ≤,则][)2(x a x ,∈.0.618法的基本思想是,根据上述定理,通过取试探点使包含极小点的区间(不确定区间)不断缩短,当区间长度小到一定程度时,区间上各点的函数值均接近极小值,因此任意一点都可作为极小点的近似.0.618法计算试探点的公式: 2. 0.618法的算法步骤:①置初始区间],[11b a 及精度要求0>L ,计算试探点1λ和1μ,计算函数值)(1λf 和)(1μf .计算公式是 令1=k .②若L a b k k <-,则停止计算.否则,当)()(k k f f μλ>时,转步骤③;当)()(k k f f μλ≤时,转步骤④. ③置k k a λ=+1,k k b b =+1,k k μλ=+1,)(618.01111++++-+=k k k k a b a μ,计算函数值)(1+k f μ,转步骤⑤. ④置k k a a =+1,k k b μ=+1,k k λμ=+1,)(382.01111++++-+=k k k k a b a λ,计算函数值)(1+k f λ,转步骤⑤. ⑤置1:+=k k ,返回步骤②.四.实验流程图及其MATLAB 实现:1.流程图:置初始区间],[11b a 及精度要求页脚内容3(1) 程序源代码:function [x,k]=GSe(f,a,b,d elta) %0.618法求解单峰函数极小点 f=inline(f); N=10000; for k=1:Nm=a+0.382*(b-a); n=a+0.618*(b-a); if f(m)>f(n) a=m;NYN页脚内容4m=n; else b=n; n=m; endif abs(b-a)<d elta x=0.5*(b+a);break ; end end(2) 数值算例:12def )(min 2--x x x f ,初始区间]1,1[],[11-=b a ,精度16.0≤L . (i)键入命令:>>[x,k]=GSe('2*x^2-x-1',-1,1,0.16) (ii)运行结果: x= 0.2229 k=6五.总结:0.618法(黄金分割法)适用于单峰函数,故应先确定目标函数的单峰区间,方可进行迭代计算.但单峰区间不是很明显就能确定,故可用进退法寻找并确定单峰区间.六.参考文献:陈宝林编著《最优化理论与算法》清华大学出版社2005年10月第2版页脚内容5。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验题目: 0.618法的MATLAB实现学生姓名:
学号:
实验时间: 2013-5-13
一.实验名称: 0.618法求解单峰函数极小点
二.实验目的及要求:
1. 了解并熟悉0.618法的方法原理, 以及它的MATLAB 实现.
2. 运用0.618法解单峰函数的极小点.
三.实验内容:
1. 0.618法方法原理:
定理: 设f 是区间],[b a 上的单峰函数, ] ,[ ,)2()1(b a x x ∈, 且)2()1(x x <. 如果)()()2()1(x f x f >, 则对每一个],[)1(x a x ∈, 有)()()2(x f x f >; 如果)()()2()1(x f x f ≤,
则对每一个] ,[)
2(b x x ∈, 有)()()1(x f x f ≥. 根据上述定理, 只需选择两个试探点, 就可将包含极小点的区间缩短. 事实上, 必有 如果)()()2()1(x
f x f >, 则],[)1(b x x ∈; 如果)()()
2()1(x f x f ≤, 则][)2(x a x ,∈. 0.618 法的基本思想是, 根据上述定理, 通过取试探点使包含极小点的区间(不确定区间)不断缩短, 当区间长度小到一定程度时, 区间上各点的函数值均接近极小值, 因此任意一点都可作为极小点的近似.
0.618 法计算试探点的公式:
).
(618.0),(382.0k k k k k k k k a b a a b a -+=-+=μλ 2. 0.618法的算法步骤:
①置初始区间],[11b a 及精度要求0>L , 计算试探点1λ和1μ, 计算函数值)(1λf 和)(1μf . 计算公式是
).(618.0 ),(382.011111111a b a a b a -+=-+=μλ
令1=k .
②若L a b k k <-, 则停止计算. 否则, 当)()(k k f f μλ>时, 转步骤③; 当)()(k k f f μλ≤时, 转步骤④.
③置k k a λ=+1, k k b b =+1, k k μλ=+1,)(618.01111++++-+=k k k k a b a μ, 计算函数值)(1+k f μ, 转步骤⑤.
④置k k a a =+1, k k b μ=+1, k k λμ=+1,)(382.01111++++-+=k k k k a b a λ, 计算函数值)(1+k f λ, 转步骤⑤.
⑤置1:+=k k , 返回步骤②.
四.实验流程图及其MATLAB 实现:
1. 流程图:
2. 代码及数值算例:
(1) 程序源代码:
function [x,k]=GSe(f,a,b,delta)
% 0.618法求解单峰函数极小点
f=inline(f);
N=10000;
for k=1:N
m=a+0.382*(b-a);
n=a+0.618*(b-a);
if f(m)>f(n)
a=m;
m=n;
else b=n;
n=m;
end
if abs(b-a)<delta
x=0.5*(b+a);break ;
end
end
(2) 数值算例:
12def )(min 2--x x x f ,
初始区间]1,1[],[11-=b a , 精度16.0≤L .
(i) 键入命令:
>> [x,k]=GSe('2*x^2-x-1',-1,1,0.16)
(ii) 运行结果:
x =
0.2229
k =
6
五.总结:
0.618法(黄金分割法)适用于单峰函数, 故应先确定目标函数的单峰区间, 方可进行迭代计算. 但单峰区间不是很明显就能确定, 故可用进退法寻找并确定单峰区间.
六.参考文献:
陈宝林 编著《最优化 理论与算法》 清华大学出版社 2005年10月第2版。