【问题标题】:Evaluating a polynomial with Horner's Algorithm and calculating steps (Java)使用霍纳算法评估多项式并计算步骤 (Java)
【发布时间】:2013-03-05 05:36:41
【问题描述】:

我需要有关我的 java 代码的帮助。我想要完成的是计算多项式上每个步骤的大小:double s = (b-a)/nsteps; 要创建的多项式的输入是度、系数、x 的起始值、x 的停止值以及步数。每当我尝试运行测试时,对于xy,我的输出是0,我不确定我的代码中缺少什么。 这是我关于它应该如何工作的运行测试,但我对xy 的结果是0

Enter degree:2
Enter coefficient 2:1
Enter coefficient 1:0
Enter coefficient 0:0
f(x) = 1.0x^2 + .0x^1 + 0.0
Enter initial x:0
Enter final x:10
Enter number of steps:20
x = 0.0; f(x) = 0.0
x = 0.5; f(x) = 0.25
x = 1.0; f(x) = 1.0
x = 1.5; f(x) = 2.25
x = 2.0; f(x) = 4.0
x = 2.5; f(x) = 6.25
x = 3.0; f(x) = 9.0
x = 3.5; f(x) = 12.25
x = 4.0; f(x) = 16.0
x = 4.5; f(x) = 20.25
x = 5.0; f(x) = 25.0
x = 5.5; f(x) = 30.25
x = 6.0; f(x) = 36.0
x = 6.5; f(x) = 42.25
x = 7.0; f(x) = 49.0
x = 7.5; f(x) = 56.25
x = 8.0; f(x) = 64.0
x = 8.5; f(x) = 72.25
x = 9.0; f(x) = 81.0
x = 9.5; f(x) = 90.25
x = 10.0; f(x) = 100.0 

这是我的java代码:

import java.util.*;

public class PolyAreaTwo{
   //method evalpoly Horner's rule
        public static double evalpoly(double[] c, double x) {
                    int n = c.length - 1;
                    double y = c[n];
                    for (int i = n - 1; i >= 0; i--) {
                        y = c[i] + (x * y);
                    }
                    return y;
        }

    //main method
        public static void main(String[] args){
        Scanner in = new Scanner(System.in);
                 int n;
                 double a, b;
                 int nsteps;


                //input degree
                 System.out.print("Enter degree of polynomial:");
                 n = in.nextInt();

                //input n+1 coefficients
                 double[] c = new double[n+1];

                    for (int i=n; i>=0; i--) {
                            System.out.print("Enter coefficent " + i + ":");
                            c[i] = in.nextDouble();
                 }
                    for (double d : c) { 
                    System.out.print(" x ^ " + d); 

                    }

                //input starting value x = a
                 System.out.println("Enter starting x: ");
                 a = in.nextDouble();

                //input stopping value x = b
                 System.out.print("Enter stop x: ");
                 b = in.nextDouble();

                //input number of steps between starting x and stopping x
                 System.out.print("Enter steps: ");
                 nsteps = in.nextInt();

                //calculate size of each step
                 double s = (b-a)/nsteps;
                 int steps = 0;


             //loop to call the evalpoly method         
                for (double x = a; x <= b; x += s) {
                   double y = evalpoly(c, x);

                   System.out.println("x ="+x+ " , y ="+y);


                } 

            }

}

【问题讨论】:

  • while (steps &lt; nsteps) 为什么明明需要无限循环?

标签: java evaluation polynomial-math


【解决方案1】:

去掉不必要的外部while循环后;考虑在for 循环中使用您计算的步长:x += s

顺便说一句,通过将y 初始化为最高阶系数,可以提高在evalpoly() 中实现Horner's method 的效率,如herehere 所示。

public static double evalpoly(double[] c, double x) {
    int n = c.length - 1;
    double y = c[n];
    for (int i = n - 1; i >= 0; i--) {
        y = c[i] + (x * y);
    }
    return y;
}

【讨论】:

  • 感谢工作! :D 另一个问题:如何在输入最终系数后显示 f(x)。它会进入我的 for (int i=n; i>=0; i--) 循环吗?
  • 否; 那个循环之后,做一个for (double d : c) { print("x ^ " + d); ... } 或类似的。今后,您可以通过点击左侧的empty check mark 来接受此答案。
  • 我用 for (double d:c) {System.out.print(" x ^ " + d); ) loop Enter degree of polynomial:2 Enter coefficent 2:1 Enter coefficent 1:0 Enter coefficent 0:0 x ^ 0.0 x ^ 0.0 x ^ 1.0输入起始x:
  • 听起来你已经嵌套了循环;它们应该是连续的。如果这没有帮助,请编辑您的问题以显示您当前的代码。
  • 不,实际上我将您建议的 for 循环放在了我的系数循环之后。见编辑。
猜你喜欢
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
  • 2014-09-25
  • 2017-03-15
  • 2017-02-10
  • 1970-01-01
相关资源
最近更新 更多