初学者';s Java代码帮助:Newton Raphson平方根循环

初学者';s Java代码帮助:Newton Raphson平方根循环,java,Java,在我大学的Java课程中,我们正在学习循环控制结构,我们得到了一个任务,编写一个小程序,我猜这个程序应该给出一个数字的平方根,并继续求平方根,直到满足差分或精度。以下是说明: “编写一个名为NewtonRaphson的类,该类可用于使用牛顿方法找到任意正实数的sqrt(a)的近似解 注:sqrt(a)可用函数表示法表示如下:f(x)=x2–a, 其中f'(x)=2*x 打印迭代序列和每次迭代的近似值(即,以表格形式) 编写一个名为TestNewton的驱动程序类 •初始猜测为5.0 •在本练习中

在我大学的Java课程中,我们正在学习循环控制结构,我们得到了一个任务,编写一个小程序,我猜这个程序应该给出一个数字的平方根,并继续求平方根,直到满足差分或精度。以下是说明:

“编写一个名为NewtonRaphson的类,该类可用于使用牛顿方法找到任意正实数的sqrt(a)的近似解

注:sqrt(a)可用函数表示法表示如下:f(x)=x2–a, 其中f'(x)=2*x

打印迭代序列和每次迭代的近似值(即,以表格形式)

编写一个名为TestNewton的驱动程序类

•初始猜测为5.0 •在本练习中,当两个连续近似值之间的差值小于0.00005”时,过程终止

我的代码链接在这里的底部,主类和测试类,但我没有得到循环结果,我只是在运行程序后键入5时得到了相同的平方根5。有人能告诉我我在哪里搞砸了吗

谢谢,我真的是一个新的编码,这花了很长时间,我不得不要求一些朋友的帮助

主要类别: 测试等级:

或者,如果您喜欢这里的代码,它是:

import java.text.NumberFormat; 
import java.text.DecimalFormat; 

public class NewtonRaphson { 

static final double DIFFERENCE = 0.00005; 
double n; 
double x; 
double derivative; 
double function; 
double xold; 
double xnew; 
int i; 

public NewtonRaphson(double n2, int x2) 

{ 
    n=n2; 
    x=x2; 
    function = Math.pow(n, 2)-x; 
    derivative = 2*n; 
    xnew=n-function/derivative; 
    xold=0; 
} 

boolean positive() 

{ 
    return (n >= 0); 
} 

public double findXNew(double xold2) 

{ 
    function = Math.pow(xold2, 2)-x; 
    derivative = 2*xold2; 
    return xold2-function/derivative; 
} 

public void findSqRtA() 

{ 

    i=0; 
    while(Math.abs(xnew-xold)> DIFFERENCE)

{ 

    xold=xnew; 
    xnew=findXNew(xold); 
    i++; 
    System.out.println(this); 

} 

    System.out.println("\nIteration completed, difference is less than 0.00005"); 

} 

public String toString() 

{ 
    NumberFormat nf = NumberFormat.getInstance(); DecimalFormat df = (DecimalFormat)nf; 
    df.applyPattern("0.00000000"); 

    return "The approximate value of the square root of "+x+" is " + xnew + "\n" + 

    "The number of iterations is " + i; 
} 
}

我的输出是这样的,但我希望它在每次迭代的结果之后取平方根

Enter a number you would like to find the square root of
5
The approximate value of the square root of 5.0 is 2.3333333333333335
The number of iterations is 1
The approximate value of the square root of 5.0 is 2.238095238095238
The number of iterations is 2
The approximate value of the square root of 5.0 is 2.2360688956433634
The number of iterations is 3
The approximate value of the square root of 5.0 is 2.236067977499978
The number of iterations is 4

Iteration completed, difference is less than 0.00005

您的代码实际上为我生成了正确的结果。因此,我不确定问题出在哪里。 有关牛顿方法的帮助,请参阅本文:

你能给我们看看你的产品吗


“我以为程序应该从以前的平方根中取每个新答案的平方根,它不断地取5的平方根。但我希望它取每个迭代结果的平方根”

哦,我明白了,那是因为你有这个:

NewtonRaphson nr = new NewtonRaphson(5.0, a);

只需将上面的5.0替换为之前的数字。

牛顿-拉斐逊方法非常有趣。您可以使用它来近似实值函数根x2只是其中之一。检查牛顿-拉斐逊方法产生的结果。所以,不要低估牛顿·拉斐逊

你的代码可以工作。但是您的期望是错误的,您认为在每次迭代中您都会更新猜测。代码实际上是在while循环中完成的

你可以这样做,ε也可以是一个参数。 首先,给出一个大ε,求平方根估计。 然后用稍小的ε输入最后一个近似值,直到您对结果满意为止。 我想这就是你所期望的


您可以简化代码。看看这个。

好吧,是时候让你找出什么是调试了,这是因为代码太多了。请把它缩小到重现问题的必要程度。是的,这太长了,朋友。试着把它缩短一点。它对我有用。也就是说,它正在产生正确的结果。问题到底是什么?我以为程序应该从上一个平方根中取每个新答案的平方根,它不断地取5的平方根。我以为程序应该从上一个平方根中取每个新答案的平方根,它总是取5的平方根,或者至少这就是我想要做的。我的输出是:输入一个数字,你想找到5的平方根,5.0的平方根的近似值是2.3335,迭代次数是1,5.0的平方根的近似值是2.238095238095238,迭代次数是2,5.0的平方根的近似值是2.2360688956433634迭代次数是3,5.0的平方根的近似值是2.236067977499978,迭代次数是4次迭代完成,差值小于0.00005,但我希望它取每个迭代结果的平方根。哦,好的,谢谢。对不起。。。愚蠢的问题,我不熟悉这个。
NewtonRaphson nr = new NewtonRaphson(5.0, a);