matlab黄金分割法

%黄金分割法
clear all
clc
f=@(x)4*x^3-5*x+10;

a=0.3;
b=1.5;
Theta_error=0.0001;

x1=a+0.382*(b-a);
x2=a+0.618*(b-a);
y1=feval(f,x1);
y2=feval(f,x2);

stepNum=0;
k=stepNum;

Da=[];
Db=[];
Dx1=[];
Dx2=[];
Dy1=[];
Dy2=[];

while abs(b-a)>Theta_error
    stepNum=stepNum+1;
    k=stepNum;
    if y1<y2
        b=x2;  Db(k)=b;
        x2=x1;  Dx2(k)=x2;
        y2=y1;  Dy2(k)=y2;
        x1=a+0.382*(b-a);  Dx1(k)=x1;
        y1=feval(f,x1);  Dy1(k)=y1;
    else
        a=x1;  Da(k)=a;
        x1=x2; Dx1(k)=x1;
        y1=y2;  Dy1(k)=y1;
        x2=a+0.618*(b-a);  Dx2(k)=x2;
        y2=feval(f,x2);   Dy2(k)=y2;
       
    end
     x_opt=(a+b)/2;
     f_opt=feval(f,x_opt);
     plot(x_opt,f_opt,'p')
     hold on
end

    x_opt=(a+b)/2;
    f_opt=feval(f,x_opt);

    x=0:0.00001:1.5;
    y=4*x.^3-5*x+10;
    
plot(x,y,'k')
hold on
plot(x_opt,f_opt,'r*')

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值