首页 > 解决方案 > 计算复多项式的值

问题描述

我正在尝试使用 java 来计算复多项式函数,这是我的代码

public Complex evaluate(Complex z) {
        Complex t=coeff[coeff.length-1].multiply(z);
        int i;
        for(i=coeff.length;i>0;i--){
            t=z.multiply(coeff[i-1].add(t));
        }
        return t;
    }

public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println("enter real of z: ");
        System.out.println("enter imag of z: ");
        Double m=input.nextDouble();
        Double n=input.nextDouble();
        Complex z=new Complex(m,n);
        Complex[] a=new Complex[] {new Complex(1,1),new Complex(2,2),new Complex(2,3)};
        Complex[] b=new Complex[] {new Complex(0,0),new Complex(1,0)};
        Polynomial A=new Polynomial(a);
        Polynomial B=new Polynomial(b);
        System.out.println("A(z)= "+A.evaluate(z));
        System.out.println("B(z)= "+B.evaluate(z));
    }
}

代码的另一部分效果很好,但是当我测试这部分(计算 f(z) 之类的东西)时,最后我得到了错误的答案。我在评估方法中使用的方法是 P(z)=a0+a1 z+a2 z^2+a3 z^3=a0+z(a1+z(a2+z a3))。

标签: java

解决方案


问题是在您的方法中,循环中evaluate变量的初始值是错误的。i例如,如果您有一个包含 4 个系数的数组,就像在您的示例中一样,您首先计算t = z * a3. 然后你进入循环,第一步需要计算表达式z*(a2 + t),但是因为你从i = coeff.length实际开始计算z*(a3 + t)。你应该从i = coeff.length - 1. 此外, for 的最终值i是错误的,因为您将完成表达式z*(a0 + t),而您只需要 simple a0 + t。因此,请仔细检查循环的边界。

Complex t = coeff[coeff.length - 1];
for (int i = coeff.length - 2; i >= 0; i--) {
   t = z.multiply(t).add(coeff[i]);
}
return t;

推荐阅读