我已经写了3类-一种代表复数,一种代表具有复数系数的多项式,最后一种对所述多项式执行Newton-Raphson算法以求根的估计。
问题是,当我创建Newton类的实例时,它是构造函数:
public Newton(Polynomial p) {
this.f = p;
this.fp = this.f.derivative();
```
将f设置为p没问题,但是当
this.fp = this.f.derivative();
运行后,将this.f更改为this.f.derivative(); 太。
这是派生代码:
public Polynomial derivative() { ArrayList derivativeCoeff = coeff; if (derivativeCoeff.size() == 1){ return new Polynomial(); } derivativeCoeff.remove(0); for (int i = 1; i <= derivativeCoeff.size() ;i++){ derivativeCoeff.set(i-1,derivativeCoeff.get(i-1).multiply(i));
}
Polynomial test = new Polynomial(derivativeCoeff);
return test;
}
这是牛顿的主要特点:
ArrayList coeff = new ArrayList (); coeff.add(new Complex(-1.0,0.0)); coeff.add(new Complex()); coeff.add(new Complex()); coeff.add(new Complex(1.0,0.0));
Polynomial p = new Polynomial(coeff);
System.out.println("the polynomial being used = "+p);
Newton n = new Newton(p);
System.out.println("f = "+n.getF());
System.out.println("fp = "+n.getFp());
这是我得到的输出:
the polynomial being used = (-1.0+0.0i)+(0.0+0.0i)X+(0.0+0.0i)X^2+(1.0+0.0i)X^3 f = (0.0+0.0i)+(0.0+0.0i)X+(3.0+0.0i)X^2 fp = (0.0+0.0i)+(0.0+0.0i)X+(3.0+0.0i)X^2
当f应该等于p时。
请询问是否需要更多信息或代码。我对询问SO方面的经验并不丰富,希望得到我的任何帮助。
问题来源:Stack Overflow
ArrayList<Complex> derivativeCoeff = coeff;
不复制列表:也更新derivativeCoeff更新coeff。
复印:
ArrayList<Complex> derivativeCoeff = new ArrayList<>(coeff);
或者,您可以在获取副本之前删除第一个元素(显然首先要检查是否为空):
ArrayList<Complex> derivativeCoeff = new ArrayList<>(coeff.subList(1, coeff.size()));
或者,您可以直接使用流复制和更新元素。
ArrayList<Complex> derivativeCoeff =
IntStream.rangeClosed(1, coeff.size() - 1)
.mapToObj(i -> coeff.get(i).multiply(i))
.collect(Collectors.toCollection(ArrayList::new));
甚至
return
IntStream.rangeClosed(1, coeff.size() - 1)
.mapToObj(i -> coeff.get(i).multiply(i))
.collect(
Collectors.collectingAndThen(
Collectors.toCollection(ArrayList::new)),
Polynomial::new));
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。