《现代设计方法》课程
关于黄金分割法和二次插值法的Matlab语言实现在《现代设计方法》的第二章优化设计方法中有关一维搜索的最优化方法的
一节里,我们学习了黄金非分割法和二次插值法。它们都是建立在搜索区间的优先确定基础上实现的。
为了便于方便执行和比较,我将两种方法都写进了一个程序之内,以选择的方式实现执行其中一个。下面以《现代设计方法》课后习题为例。见课本70页,第2—7题。原题如下:
求函数f(x)=3*x^2+6*x+4的最优点,已知单谷区间为[-3,4],一维搜索精度为0.4。
1、先建立函数f(x),f(x)=3*x^2+6*x+4。函数文件保存为:lee.m
源代码为:function y=lee(x)
y=3*x^2+6*x+4;
2、程序主代码如下,该函数文件保存为:ll.m
clear;
a=input('请输入初始点');
b=input('请输入初始步长');
Y1=lee(a);Y2=lee(a+b);
if Y1>Y2 %Y1>Y2的情况
k=2; Y3=lee(a+2*b);
while Y2>=Y3 %直到满足“大,小,大”为止
k=k+1;
Y3=lee(a+k*b);
end
A=a+b;B=a+k*b;
elseif Y1k=1;Y3=lee(a-k*b);
while Y1>=Y3 %直到满足“大,小,大”为止
k=k+1;
Y3=lee(a-k*b);
end
A=a-k*b;B=a;
else
A=a;B=a+b; %Y1=Y2的情况
end
disp(['初始搜索区间为',num2str([A,B])])%输出符合的区间
xuanze=input('二次插值法输入0,黄金分割法输入1');%选择搜索方式
T=input('选定一维搜索精度');
if xuanze==1
while B-A>T %一维搜索法使精度符合要求
C=A+0.382*(B-A);D=A+0.618*(B-A); %黄金分割法选点