UOJ Logo xuekairui的博客

博客

二分法求零点(近似值)

2023-04-15 17:05:57 By xuekairui

Ps:人教版数学必修一P146 —————————————— 例2 借助信息技术,用二分法求方程2X(2的x次方)+3x=7的近似解(精确度为0.1)。

解:原方程等价于2X+3x-7=0,令f(x)=2X+3x-7。 ①分析图像可知f(1)f(2)<0,说明该函数在区间(1,2)内存在零点x0;

②取区间(1,2)的中点x1=1.5,因为f(1)f(1.5)<0,则x0∈(1,1.5);

 ③再取区间(1,1.5)的中点x2=1.25,因为f(1.25)f(1.5)<0,则x0∈(1.25,1.5);

④同理可得,x0∈(1.375,1.5),x0∈(1.375,1.4375);

⑤由于1.4375-1.375=0.0625<0.1,所以,原方程的近似解可取为1.375;

以上是较为详细的数学思路:) 然而,此方法计算量实在是太大,能否用程序实现呢?(C++)

—————————— 主要逻辑:确定范围(a~b)以后,每次求出其中点(c)后须判断零点所在位置,即在ac之间还是cb之间,f(a)f(c)<0则在ac之间,反之,则在c b 之间,f(c)==0时即直接求出零点为c,也不是不可能,对吧[doge] 由于b,a只差不能小于分度值,所以需要在while((b-a)>e)中进行。 —————————— 此方法使用了include里的函数 pow(x,y),即x为底数,y为指数,计算x的y次方的值

完整代码如下:

#include<bits/stdc++.h>
using namespace std; 
double HO_MO(double e/*分度值*/,double a/*首指针*/,double b/*尾指针*/){ 
    while((b-a)>e) { 
      double c=(a+b)/2;/中点横坐标/ 
      if((pow(2,a)+3*a-7)*(pow(2,c)+3*c-7)<0){ 
           b=c; 
      } 
      else{ 
           a=c; 
            if((pow(2,a)+3*a-7)==0) return a; 
    }
   } 
   return a; 
}
int main(){ 
    double E,A,B; 
    cin>>E>>A>>B; 
    double q=HO_MO(E,A,B); 
     cout<<q; 
  return 0; 
}

(原创,若有误,请指正orz)

蛇肩上的China

2021-07-18 22:28:51 By xuekairui
凌晨,天还没有亮,家住山区的老八已经起身,招呼着伙伴们一起进山。15公里的山路,对于已经上了年纪的老八来说,已经逐渐成为不小的负担。太阳升起的时候,他们拨开晨雾,来到幽静的山谷。今天,他们到这里是想碰碰运气,寻找一种传说中的独特食材:来自东土大唐的唐三藏屎 而采集唐僧屎的过程并不简单,这种食 材的周围总有几种动物在逡巡,其中有一 种产于花果山的灵长类屎,攻击性很强。历史记载,为了追求这道美食的味觉 饕餮而被其攻击牺牲味觉的先辈并不在少 数。一般的做法是可以用狗屎等食物将它引诱开,然后再进行采集唐僧屎。一个黑乎乎的唐僧屎暴露在眼前,他开始露出微笑,因为这预示着美食和饱 餐。他仿佛已经看见族人欣喜的眼神。 而接下来他要做的,便是小心翼翼地将 唐僧屎采集到手,打开美团外卖点杯酒,“干他兄弟们!!”
//非原创
共 2 篇博客