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);
}
}