MATLAB--二分法

二分算法求极值:

clear;
clc;
syms x;
f(x)=x+20.0/x;
handle = ezplot(f,[-40,40]);
set(handle,'Color','b','LineWidth',1 )
%极值的大概区间
axis([-20 20 -40 40]);
grid on;
hold on;
xlow = 1;
xhigh = 10;

%二分法
syms x1 x2;
x1 = xlow;
x2 = xhigh;
mid = (x1 + x2)/2.0;
h = 0.001; %步长
num = 1; %迭代次数
err = 0.001 ;  %误差在0.01之间
while (abs(f(x1)-f(x2))>err)
    if f(mid-h)>f(mid+h)
        x1 = mid;
    else
        x2 = mid;
    end
    mid = (x1 + x2)/2.0;
    num = num +1;
end
plot(mid,f(mid),'*','LineWidth',2,'color','r') %绘出极小值点
text(mid-1,f(mid)-3,sprintf("(%.3f,%.5f)",mid,f(mid))) %显示极值点坐标
fprintf('极小值为:%.5f\n',vpa(f(mid)));
fprintf('迭代次数为:%d\n',num);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值