使用牛顿迭代法实现开平方
作者:互联网
前言
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另外该方法广泛用于计算机编程中。
原理
比如求平方根:,可以转为求这个方程的根
已知曲线方程,我们在点做切线,求:
容易得出,点的切线方程为: 。
要求,即相当于求 的解,即 :。
将f(x)=x2-c,f`(x)=2x代入方程得到x=x-(x2-c)/2x=(x+c/x)/2
实现
public class Client {
public static void main(String[] args) {
System.out.println(Math.sqrt(10));
System.out.println(sqrt(10));
System.out.println(Math.sqrt(-10));
System.out.println(sqrt(-10));
System.out.println(Math.sqrt(0.000));
System.out.println(sqrt(0));
System.out.println(Math.sqrt(0.5));
System.out.println(sqrt(0.5));
}
private static double sqrt(double n) {
if (Double.isNaN(n) || n < 0) {
return Double.NaN;
}
if (n == 0) {
return n;
}
double k = 1.0;
while (Math.abs(k * k - n) > 1e-9) { //精度自己控制
k = (k + n / k) / 2;
}
return k;
}
}
得到的结果和java内置的sqrt方法结果一致。
参考
数学笔记9——牛顿迭代法
如何通俗易懂地讲解牛顿迭代法求开方?数值分析?
sqrt函数分析
标签:方程,开平方,牛顿,System,sqrt,println,迭代法,out 来源: https://www.cnblogs.com/strongmore/p/14588499.html