zoukankan      html  css  js  c++  java
  • 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
    ",a,x2);
    21     return 0;
    22 }
     
     
     
     
     
     
  • 相关阅读:
    MRO C3算法 super的运用
    约束 抛异常
    反射
    Ubuntu
    Vim
    Vim
    Arithmetic
    Docker-常用命令
    Docker
    Docker-LAMP开发环境
  • 原文地址:https://www.cnblogs.com/spore/p/10372015.html
Copyright © 2011-2022 走看看