0.618方法-Matlab实现

0.618方法-Matlab实现,第1张

%0.618法步骤

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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8205146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存