java - 计算复多项式的值
问题描述
我正在尝试使用 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))。
解决方案
问题是在您的方法中,循环中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;
推荐阅读
- yocto - 如何安装没有自己的配方的 python 模块?
- java - 无法让 mockito 模拟公共类的公共方法
- ruby-on-rails - 如何输出更多信息来记录此错误?
- apex - 有没有办法防止方括号被插入到我的字符串中?
- javascript - 如何使用回调函数修复错误?
- uwp - 通用 Windows App Store 试用许可剩余时间不正确
- r - 创建一个绘图以显示值是否匹配
- linux - 如何在单进程模式下运行 tensorflow?
- java - 当我在手机上运行应用程序时,我的物品都搞砸了
- google-cloud-firestore - Cloud Firestore 安全规则匹配集合?