MATLAB黄金分割法

以下是使用MATLAB编写黄金分割法的代码,以求解函数f(x)=xx+2x在区间[-3,5]上的最小值:

% 定义目标函数
fun = @(x) x.^2+2.*x;

% 定义黄金分割法的参数
a = -3;    % 区间左端点
b = 5;    % 区间右端点
tol = 1e-6;    % 精度要求
tau = (sqrt(5)-1)/2;    % 黄金分割比例

% 迭代计算
x1 = a + (1 - tau) * (b - a);
x2 = a + tau * (b - a);
while abs(b-a) > tol
    if fun(x1) > fun(x2)
        a = x1;
        x1 = x2;
        x2 = a + tau * (b - a);
    else
        b = x2;
        x2 = x1;
        x1 = a + (1 - tau) * (b - a);
    end
end

% 输出最小值和最优解
fprintf('最小值:%f
',fun((a+b)/2));
fprintf('最优解:%f
',(a+b)/2);

% 绘制优化过程
x = linspace(-3,5,100);
y = fun(x);
figure;
plot(x,y,'LineWidth',1.5);
hold on;
scatter((a+b)/2,fun((a+b)/2),'Filled');
title('黄金分割法优化过程');
xlabel('x');
ylabel('f(x)');

上述代码中,我们使用 MATLAB 的匿名函数表达式定义了目标函数 fun,并初始化了黄金分割法的参数。在迭代计算过程中,我们不断计算两个新的区间端点 x1 和 x2,并通过比较它们在目标函数上的取值来缩小区间。当区间长度小于指定的精度要求 tol 时,算法停止迭代,输出最小值和最优解。最后,我们通过绘图描述了优化过程,其中黄色圆点表示找到的最优解。

运行该代码,会得到如下结果:

最小值:-2.000000
最优解:-1.000000

同时绘制的优化过程如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aEvsbss4-1681119931216)(null)]

从图中可以看出,在迭代过程中,算法不断收敛于最优解 -1,直至满足精度要求。

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐行tag

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值