syms t
f(t)=t^3-2*t+1
% 第1步、确定单谷区间[a,b],给定最后区间精度e>0
a=0b=3
e=0.5
A=[]%先定义一个空矩阵
j=1%矩阵的列
% 第2步、计算最初两个搜索点
% t1=a+0.382(b-a)=b-0.618(b-a)
% t2=a+0.618(b-a)
t1=b-0.618*(b-a)
t2=a+0.618*(b-a)
% 并计算f1=f(t1),f2=f(t2)
f1=f(t1)
f2=f(t2)
% 第3步、若f1<f2,转第4步,否则转第5步
while(1)
A(1:7,j)=[j-1,a,b,t1,t2,f1,f2].'%将矩阵按列填充
if f1<f2
A(8:9,j)=[0,1].'%若是换b,记录为1
% 第4步、若t2-a<e,停止迭代,输出t1.否则令b=t2,t2=t1,t1=b-0.618(b-a),f2=f1,计算f1=f(t1),转第3步
虚滑 if (t2-a)<e
b=t2
t=t1
break
else
b=t2
t2=t1
消誉正 t1=b-0.618*(b-a)
f2=f1
f1=f(t1)
end
else
A(8:9,j)=[1,0].'%若是换a,记录为1
% 第5步、若b-t1<e,停止迭代,输出t2.否则令a=t1,t1=t2,t2=a+0.618(b-a),f1=f2,计算f2=f(t2),转第3步
if (b-t1)<e
a=t1
t=t2
break
else
a=t1
t1=t2
t2=a+0.618*(b-a)
拿悔 f1=f2
f2=f(t2)
end
end
j=j+1
end
A(1:3,j+1)=[j,a,b].'
file_name='C:\Users\acer\Desktop\gold.xls'
xlswrite(file_name,A,'sheet1','B1')
function xmin=golden(f,a,b,e)k=0
a1=b-0.618*(b-a) %插入点的值
a2=a+0.618*(b-a)
while b-a>e %循环条樱销件
y1=subs(f,a1)
y2=subs(f,a2)
if y1>y2%比较插入点的函数值的大小
a=a1 %进脊漏游行换名
a1=a2
y1=y2
a2=a+0.618*(b-a)
else
b=a2
a2=a1
y2=y1
a1=b-0.618*(b-a)
end
k=k+1
end%迭代到满足条件为止就停止迭代
xmin=(a+b)/2
fmin=subs(f,xmin) %输出函搜辩数的最优值
fprintf('k=\n') %输出迭代次数
disp(k)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)