优化设计基础上机练习2

该文章介绍了如何使用进退法和黄金分割法在MATLAB中求解一维目标函数f(x)=sin(x)+3sin(2x)的极小值,提供了M函数代码,并详细注释了关键步骤,包括计算极小值x_opti和黄金分割法迭代轮次k。
摘要由CSDN通过智能技术生成

@[优化设计基础上机练习2]

函数M文件

按进退法、黄金分割法算法原理,编写一维优化问题M函数,并求以下一维目标函数的极小值,要求如下:
1、 对函数主要命令语句的功能进行注释;
2、 输出极小值及黄金分割法的迭代轮次,分别命名为x_opti、k;
3、 M函数以hw+学号后三位命名,进退法初始点取0,初始步长取1,收敛精度取为1e-6;
4、 一维目标函数为f(x)=sin(x)+3sin(2x);


参考源程序


function [x_opti,k] = hw010(fun,eps)
%hw010 基于进退法、黄金分割法求一维函数的极小值,进退法初始点取0、初始步长取1
%x_opti:一维搜索极小值点(输出)
%k:黄金分割法的迭代轮次(输出)
%fun:一维目标函数(输入)
%eps:收敛精度

x1=0;
f1=eval(subs(f,symvar(f),x1));
h=1;
x2=x1+h;
f2=eval(subs(f,symvar(f),x2));
k=0;
if f1>=f2 
    while 1
        x3=x2+h;
        f3=eval(subs(f,symvar(f),x3));
        if f2>f3
            x1=x2;
            x2=x3;
            f2=f3;
            h=2*h;
            k=k+1;
        else
            a=x1;
            b=x3;
            break;
        end
        if k>=1000
            disp('进退法算法失效,未找到初始搜索区间');
            break
        end
    end
else
    x3=x2;
    x2=x1;
    f2=f1;
    while 1
        x1=x2-h;
        f1=eval(subs(f,symvar(f),x1));
        if f2>f1
            x3=x2;
            x2=x1;
            f2=f1;
            h=2*h;
            k=k+1;
        else
            a=x1;
            b=x3;
            break;
        end
        if k>=1000
            disp('经1000次迭代,进退法算法失效,未找到初始搜索区间,请修改M函数');
            break
        end
    end
end

golden_ratio=(sqrt(5)-1)/2;
x1=b-golden_ratio*(b-a);
x2=a+golden_ratio*(b-a); 
f1=eval(subs(f,symvar(f),x1)); 
f2=eval(subs(f,symvar(f),x2)); 
k=1;
while 1
    if f1>=f2
        a=x1; 
        x1=x2;
        x2=a+golden_ratio*(b-a); 
    else
        b=x2; 
        x2=x1;
        x1=b-golden_ratio*(b-a); 
    end
    C=b-a;
    if C<eps 
        disp('目标函数的极小值x_opti及黄金分割法的迭代轮次k分别为:');
        x_opti=(a+b)/2; 
        break
    end
    k=k+1;
    if k>=1000
        disp('经1000次迭代,黄金分割法算法失效,未找到满足收敛精度的一维函数极小值,请修改M函数');
        break
    end 
    f1=eval(subs(f,symvar(f),x1)); 
    f2=eval(subs(f,symvar(f),x2)); 
end

报告格式


上机作业一
班级: 姓名: 学号:

按进退法、黄金分割法算法原理,编写一维优化问题M函数,并求以下一维目标函数的极小值,要求如下:
1、 对函数主要命令语句的功能进行注释;
2、 输出极小值及黄金分割法的迭代轮次,分别命名为x_opti、k;
3、 M函数以hw+学号后三位命名,进退法初始点取0,初始步长取1,收敛精度取为1e-6;
4、 一维目标函数为f(x)=sin(x)+3sin(2x);

一、 函数M文件源程序
function [x_opti,k] = hw010(fun,eps)
%hw010 基于进退法、黄金分割法求一维函数的极小值,进退法初始点取0、初始步长取1
%x_opti:一维搜索极小值点(输出)
%k:黄金分割法的迭代轮次(输出)
%fun:一维目标函数(输入)
%eps:收敛精度

x1=0;
。。。

二、 命令窗口中输入
syms x
fun=sin(x)+3sin(2x);
[x_opti,k] = hw010(fun,1e-6)

三、 运行结果
目标函数的极小值x_opti及黄金分割法的迭代轮次k分别为:
。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dr.LZ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值