迭代法求平方根

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-22 18:07   190   0

Description

用迭代法求 。求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n])要求前后两次求出的得差的绝对值少于0.00001。输出保留3位小数

Input

X

Output

X的平方根

Sample Input 1

4

Sample Output 1

2.000

思路:公式x1=(x0+a/x0)/2;

1 先自定一个初值x0,作为a的平方根值,在我们的程序中取a/2作为a的初值;利用迭代公式求出一个x1。此值与真正的a的平方根值相比,误差很大。

⒉把新求得的x1代入x0中,准备用此新的x0再去求出一个新的x1.

⒊利用迭代公式再求出一个新的x1的值,也就是用新的x0又求出一个新的平方根值x1,此值将更趋近于真正的平方根值。

⒋比较前后两次求得的平方根值x0和x1,如果它们的差值小于我们指定的值,即达到我们要求的精度,则认为x1就是a的平方根值,去执行步骤5;否则执行步骤2,即循环进行迭代。

迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:

⑴ 选一个方程的近似根,赋给变量x0;

⑵ 将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;

⑶ 当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤⑵的计算。

若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。

AC代码:(C语言)

#include <bits/stdc++.h>
using namespace std;
int main()
{
  float x;
  float a,b;
  scanf("%f",&x);
  b=1.0;
  while(fabs(b-a)>0.00001)
  {
     a=b;
     b=(a+x/a)/2;
  }
  printf("%0.3f\n",b);
  return 0;
}

AC代码:(Java)

import java.util.*;
import java.io.*;
import java.math.*;
import java.text.*;
public class Main{
 public static void main(String args[]) {
  Scanner cin=new Scanner(System.in);
  float x=cin.nextFloat();
  float a,b;
  a=0;
  b=1;
//  DecimalFormat df=new DecimalFormat("0.000");
  while(Math.abs(b-a)>0.00001)
    {
       a=b;
       b=(a+x/a)/2;
    }
  System.out.printf("%.3f",b);
 }
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP