24.用牛顿迭代法求平方根

假设a。欲求a的平方根,首先猜测一个值X1=a/2,然后根据迭代公式X(n+1)=(Xn+a/Xn)/2,算出X2,再将X2代公式的右边算出X3等等,直到连续两次算出的Xn和X(n+1)的差的绝对值小于某个值,即认为找到了精确的平方根。例算步骤如下。

1.假设求6的平方根,当Xn和X(n+1)的差值小于0.001时,可以认为已经找到了精确值。

怎么用牛顿迭代法求平方根
 
 
2.根据牛顿迭代法的步骤,首先猜测一个值X1,猜测X1=6/2=3。
 
求6的平方根:6/2=3
 
 
3.将X1=3代入公式X(n+1)=(Xn+a/Xn)/2,则X2=(X1+6/X1)/2=(3+6/3)/2=2.5,由于3和2.5的差大于0.001,需要继续计算。
X2=(X1+6/X2)/2=(3+6/3)/2=2.5       
3-2.5>0.001
 
4.将X2=2.5代入公式X(n+1)=(Xn+a/Xn)/2,则X3=(X2+6/X2)/2=(2.5+6/2.5)/2=2.45,由于2.5-2.45=0.5>0.001,故需要继续计算。
 
X3=(X2+6/X2)/2=(2.5+6/2.5)/2=2.45
2.5-2.45=0.5>0.001
 
5.将X3=2.45代入公式X(n+1)=(Xn+a/Xn)/2,则X4=(X3+6/X3)/2=(2.45+6/2.45)/2=2.4495,由于2.5-2.4495=0.0005<0.001,故不需要继续计算。
X4=(X3+6/X3)/2=(2.45+6/2.45)/2=2.4495
2.45-2.4495=0.0005<0.001
 
6.则可以确定6的平方根,在自己认为的精确的范围内,即误差小于0.001的范围内,值为2.4495,即 √(6)=2.4495。
 
 用迭代法求x=根号a。求平方根的迭代公式为:X(n+1)=(Xn+a/Xn)/2求前后两次求出的x的差的绝对值小于10-5
 
解:用迭代法求平方根的算法如下:
(1)设定一个x的初值X1
(2)用以上公式求出X的一个值X2
(3)再将X2代入以上公式的右侧的Xn,求出X的下一个值X3
(4)如此继续下去,直到前后两次求出的X值(Xn和Xn+1)满足一下关系:
    |Xn+1—Xn|<10-5
为了便于程序处理,今只用X1和X2,先令X的初值为X1=a/2(也可以是另外的值),求出X1:如果此时 |Xn+1—Xn|>=10-5,就使X1 => X2,然后用这个新的X1求出下一个X2;如此反复,直到 |Xn+1—Xn|<10-5为止
 
 
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6     float a,x1,x2;
 7     scanf("%f",&a);
 8     x1 = a/2;
 9     x2 = (x1+a/x1)/2;
10    do
11     {
12        x1 = x2;
13        x2 = (x1+a/x1)/2;
14     }while(fabs(x1-x2)>=1e-5);//|Xn+1—Xn|>=10-5时执行循环当|Xn+1—Xn|<10-5时循环结束
15      /*while(fabs(x2-x1)>=1e-5)//不能用whil循环,因为当满足 |Xn+1—Xn|<10-5时跳出循环,并没有执行循环体。
16     {
17         x1 = x2;               //do。。while循环则是执行过循环体后判断不满足|Xn+1—Xn|》=10-5
18         x2 = (x1+a/x1)/2;
19     }*/
20     printf("a = %5.2f的平方根为:%8.5f\n",a,x2);
21     return 0;
22 }

 

 
 

 

 
 
 
 
posted @ 2019-02-13 21:52  小孢子  阅读(1343)  评论(0编辑  收藏  举报