首页 > 其他 > 详细

关于二分法求方程的近似解--正确的写法

时间:2020-04-02 01:06:12      阅读:69      评论:0      收藏:0      [点我收藏+]
while(r-l>=0.001){
    m=(r+l)/2;
    if(fn(l)*fn(m)>0)l=m;
    else r=m;
}
printf("%.2lf ",l);

//方程求根,给定单调区间[l,r]
/*
1.l为根,m和r在l的右侧,fn(l)=0,fn(l)*fn(m)=0,else条件成立r=m,r向根l逼近
再次循环,l值未改变依旧为根,m和r依旧在l的右侧,fn(l)=0,fn(l)*fn(m)=0,else条件r=m,r向根l逼近
因此l为根可得出正确的近似解

2.r为根,l和m在r的左侧,fn(r)=0,fn(l)*fn(m)>0,if条件成立l=m,l向根r逼近
再次循环,r值未改变依旧为根,l和m依旧在r的左侧,fn(r)=0,fn(l)*fn(m)>0,if条件成立l=m,l向根r逼近
因此r为根可得出正确的近似解

3.假设二分到方程根,即某次循环中fn(m)=0,else条件成立r=m,r为方程的根,
再次计算m的值,l和m一定在根r的左侧, fn(r)=0,fn(l)*fn(m)>0,if条件成立l=m,l向根r逼近
注:如果if语句条件改为 fn(l)*fn(m)>=0 , 
假设二分到方程根,即某次循环中fn(m)=0,if条件成立l=m,l为方程的根,
再次计算m的值,m和r在根l的右侧,fn(l)=0,if条件成立l=m,此时[l,r]之间不存在根,
所以这种写法是错误的

4.l和r会精确到x.xxx?的形式,所以第3位小数一定是准确的,进而由它四舍五入到第二位小数 
*/ 

 

关于二分法求方程的近似解--正确的写法

原文:https://www.cnblogs.com/lyt888/p/12616836.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!