Matlab 实现 数值计算方法 二分法

给本科生助课,需要用到二分法,所以就编写了一下二分法的matlab代码,while循环、for循环都用到了;

个人认为这两段程序编写的比较细致,该涉及到的输入输出都有。都是比较简单的知识,所以给大家分享出来,供交流讨论:

第一个:

 

%% erfenfa new use one
% Author:jfsufeng@foxmail.com
% Version:
% Date&Time:
% Description:

function [i,x,fx]=erfenfa_new_use1(f,bot,top,err)
%输入:f为要求解的方程函数表达式,bot为求解区间的下界,top为求解区间的上界,err为所要求的误差范围
%输出:i为二分法求解的次数,x为最终的根,fx为方程的根x对应的函数值(精度要求内接近于零或等于零)
if f(bot)*f(top)>0
    disp('\n注意:f(bot)*f(top)>0,无法继续运算,请重新调整区间端点bot和top.\n');
    return
end
%wucha=abs(top_new-bot_new)/2;  % put that into for loop || while loop
n=ceil((log(top-bot)- log(err))/log(2))-1; %n为二分法运算总的次数;ceil是上取整 ,相对应的floor是下取整
for i=0:1:n    % 步长默认为1,中间的1加不加都可以
    x=(bot+top)/2;
    fx=f(x);
    if fx==0
        bot=x; top=x;
    elseif f(bot)*fx<0
        top=x;
    else
        bot=x;
    end
%     if abs(top-bot)<=err  % 结合题意,加不加1/2都行,只是有着多二分运算一次的影响
%         %此外,实际这里的if判断err的语句part,针对for循环是无必要的
%         break  % 这里用break,不用return
%     end
end
fprintf('\nThe result:\n二分法运算次数i=%d;方程的根x=%.4f;f(x)=%.4f\n',i,x,fx);%保留4位小数

 

 

 

第二个:

 

 

%% erfenfa new use two
% Author:jfsufeng@foxmail.com
% Version:
% Date&Time:
% Description:

function [i,x,fx]=erfenfa_new_use2(f,bot,top,err)
%输入:f为要求解的方程函数表达式,bot为求解区间的下界,top为求解区间的上界,err为所要求的误差范围
%输出:i为二分法求解的次数,x为最终的根,fx为方程的根x对应的函数值(精度要求内接近于零或等于零)
if f(bot)*f(top)>0
    disp('\n注意:f(bot)*f(top)>0,无法继续运算,请重新调整区间端点bot和top.\n');
    return
end
i=ceil((log(top-bot)- log(err))/log(2))-1; %n为二分法运算总的次数;ceil是上取整 ,相对应的floor是下取整
while abs(top-bot)>err
    x=(bot+top)/2;
    fx=f(x);
    if fx==0
        bot=x; top=x;
    elseif f(bot)*fx<0
        top=x;
    else
        bot=x;
    end
end
fprintf('\nThe result:\n二分法运算次数i=%d;方程的根x=%.4f;f(x)=%.4f\n',i,x,fx);%保留4位小数


执行示例:(1和2的执行一致)

 

 

In Command Window:

>> [i,x,fx]=erfenfa_new_use2(@(x)x^3+4*x^2-10,1,2,5e-4)


The result:
二分法运算次数i=10;方程的根x=1.3647;f(x)=-0.0080


i =


    10




x =


    1.3647




fx =


   -0.0080

 

注:个人手敲,link:https://blog.csdn.net/jfsufeng/article/details/46116501

 

  • 24
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值