logo资料库

黄金分割法及程序设计求解极小值.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
黄金分割法及程序求解 第 5 题:对函数 f(x)=(x^2-1)^2+(x-1)^2+3,当给定搜索区-10≤ x≤10 使用黄金分割法求极小点α*。 解:显然,此时的 a=-10,b=10。首先插入两个点 a1 和 a2,由黄金分割点法得: a1=b-γ (b-a)=10-0.618× (10-(-10))=-2.36 a2=a+γ (b-a)=-10+0.618 ×20=2.36 再计算相应插图点的函数值,得 y1=f(a1)=35.171 y2=f(a2)=25.731 因为 y1>y2,所以,消去区间〔-10,-2.36〕,则新的搜索区间〔a,b〕为〔-2.36, 10〕。 第一次迭代:此时插入点 a1=b-γ(b-a)=10-0.618×[10-(-2.36)]=2.362 a2=a+γ(b-a)=-2.36+0.618×[10-(-2.36)]=5.279 相应插入点的函数值为: y1=25.823 y2=743.191 由于 y2>y1,同理,得新的搜索区间为〔-2.36,5.279〕.如此继续迭代下去 , 列出前六次迭代的结果: 迭代序号 a y1 y2 a1 a2 b 比 较 0 1 2 3 4 5 6 -10 -2.36 2.36 -2.36 2.362 5.279 10 10 35.171 > 25.731 25.832 < 743.191 -2.36 -2.36 0.558 -0.557 2.361 0.558 5.279 2.361 3.669 < 25.777 5.900 > 3.669 -0.557 0.558 1.246 2.361 3.669 > 3.366 0.558 1.247 1.443 2.361 3.369 < 4.368 0.558 0.896 1.105 1.443 假定,经过前六次迭代后已满足收敛精度要求,则得 α*=(a+b)/2=(0.558+1.443)/2=1.0005 相应的函数极值 : f(α*)=3.000001
MATLB MATLB程序求解:::: MATLB 运用MATLB 建立mmmm文件: function [x,minf] = minHJ(f,a,b,k) format long; if nargin == 3 eps = 0.000001; end a1 = b- 0.618*(b-a); a2 = a + 0.618*(b-a); k=1; tol = b-a; while tol>eps && k<100000 fa1 = subs(f , findsym(f),a1); fa2= subs(f , findsym(f), a2); if fa1 > fa2 a = a1; a1 = a2; a2 = a + 0.618*(b - a); b = a2; a2 = a1; a1 = b- 0.618*(b-a); else end k = k+1; tol = abs(b - a); end if k == 100000 disp('找不到最小值'); x = NaN; minf = NaN; return; end k x = (a+b)/2 minf = subs(f, findsym(f),x) format short 函数文件: syms x; f=(x^2-1)^2+(x-1)^2+3; [x,minf]=minHJ(f,-10,10);
运行结果:::: kkkk ==== 36363636 36363636 kkkk ==== xxxx ==== 1.000004289112507 1.000004289112507 1.000004289112507 1.000004289112507 minfminfminfminf ==== 3.000000000091983 3.000000000091983 3.000000000091983 3.000000000091983
分享到:
收藏