用迭代法求a的平方根,要求前后两次求出的x的差的绝对值小于10的-5次方。输出平方根时保留2位小数。x与a用double类型数据。
例:
(1)输入:2 输出:1.41
(2)输入:4 输出:2.00
(3)输入:2020 输出:44.94
、
那么到底什么是迭代法呢,我们先给出下列定义:
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法,它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值,迭代法又分为精确迭代和近似迭代。比较典型的迭代法如“二分法”和"牛顿迭代法”属于近似迭代法。
下面我们就用精确迭代法和近似迭代法去求解一下咱们的题目。
1.迭代法:程序如下图所示:
我们需要用到一个循环结构来满足上述要求,我们需要不断给x0附上新的值来满足要求,依次循环得出结果,注意上述语句用到了fabs所以需要我们在源文件下加一个math.h下面是输出结果:
初步认识了迭代法后,我们可以细说一下牛顿迭代法,与迭代法不同,下面看题目:
2.用牛顿迭代法求方程在1.5附近的根:a*x*x*x+b*x*x+c*x+d=0.
从键盘上输入a,b,c,d,计算x的值。迭代公式如下图所示:
例:
(1)输入:2.0,-4,3,-6 输出:x=2.00
(2)输入:4.0,-1,3,-6.0 输出:x=1.00
既然有精度要求,大家注意不要看到符号就搞错判断,因为他的精度要求是结束循环的条件,故应该写成while(fabs(xn-x(n-1))>=1e-5),下面我们看程序:
输出结果如下:
与第一个程序除了公式其余均相同!
最后一个是二分法相对来说是有些难度的,大家看题:
3.用二分法求方程在(-10,10)之间的根:a*x*x*x+b*x*x+c*x+d=0.
从键盘上输入a,b,c,d,计算x,精度为10的-5次方,输出时保留2位小数。
例:
(1)输入:2,-4,3,-6 输出:x=2.00
(2)输入:4,-1,3,-6 输出:x=1.00
(3)输入:2.2,3.3,4.4,2.5 输出:x=-0.79
精度控制方式: f(c)的绝对值小于10的-5次方(c为中点)
给定精确度ξ,用二分法求函数f(x)零点近似值的步骤如下:
1、确定区间[a,b],验证f(a)·f(b)<0,给定精确度ξ.
2、求区间(a,b)的中点c.
3、计算f(c).
(1) 若f(c)=0(即|f(c)|<1e-5),则c就是函数的零点,程序结束;
(2) 若f(c)!=0 并且 f(a)·f(c)<0,则令b=c;
(3) 若f(c)!=0 并且 f(c)·f(b)<0,则令a=c.
(4) 重复2-3.
已经给出定义,分析其中的规律我们不难发现,是循环结构与条件语句的双重运用,在这里着重强调函数的运用,我们在写程序的时候需要明确一个函数定为F(x),首先赋值,我们定义两个量x0,x1分别等于-10和10,定义x2为中间量(x0+x1)/2,下面就按照上述程序输入和题目提示对应的语句即可,如下图所示:
如果F(x0)*F(x2)>0则说明F(x1)*F(x2)<0可直接运用if...else...解决问题。
输出结果如下图所示:
以上程序均演示了一个例子,其他不做演示。