matlab 二分法求最优解

MATLAB二分法求最优解


【菜狗bb】emm…原理挺简单的,应该没啥不明白的。就是给一个函数f以及区间[a,b]和精确度esp,对区间的中间值进行求导,小于0就把中间值赋给a,大于0就把中间值赋给b。如果导数等于0或者b-a的值小于esp了就不再判断了,中间值就是最优解的横坐标。

不磨叽了,看代码吧还是:
下面展示一些 。

function [k,y]=erfenfa1(f,a,b,esp)
syms x;
% f是所给的函数   a,b 为所给区间,eps为精确度
% 返回值[k,y]是最优解的横纵坐标
while b-a > esp
   %求出在a,b中间点的导数
    zhong = (b+a)/2;
    dao = subs(diff(f),x,zhong);
    %如果倒数为0,则a,b中间值zhong 就是最优解横坐标
    if dao == 0
        k=zhong;
        y = subs(f,x,zhong);
        break;
    else 
        %导数小于0 将zhong赋值给a,大于0就赋值给b
        if(dao<0)
            a = zhong;  
        else
            b = zhong;
        end
    end
 %当b-a小于esp时,将a,b中点作为最优解横坐标,y为纵坐标
if b-a<=esp
    k =(b+a)/2;
    y = subs(f,x,k);
end
end

emm…再看个简单的测试用例:

>> clear
>> syms x;
f = x^2 + 2*x -1;
[x,y] = erfenfa1(f,-2,0,0.1);
>> [x,y]
 
ans =
 
[ -1, -2]

emm…还有一块,,,给个赞再给你看吧,如何。。(手动骗赞)
拜拜,嘿嘿。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

染指13

能不能混点money呢?

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

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

打赏作者

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

抵扣说明:

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

余额充值