如何在java中使用复数?

时间:2016-10-13 09:21:35

标签: java complex-numbers

我是java新手,不知道如何处理java中的复数。我正在为我的项目编写代码。我使用了Euler的身份,exp(i theeta)= cos(theeta)+ i Sin(theeta)来找到exp(i * 2 * pi * f)。我必须将这个结果复数乘以数组中的另一个数字" d"。这就是我所做的

Complex Data[][] = new Complex[20][20];
for (int j = 0; j < d.size(); j++){
    for (int k = 0; k<20; k++){
        for (int l = 0; l<20; l++){
            double re = Math.cos(2 * Math.PI * f);
            double im = Math.sin(2 * Math.PI * f);
            Complex p = new Complex(re, im);
            Data[k][l] = ((d.get(j) * p.getReal()), (d.get(j) * p.getImaginary()));     
        }   
    }
}

然而,我在Data[k][l] = ((d.get(j) * p.getReal()), (d.get(j) * p.getImaginary()));表达式上出现错误&#34;作业的左侧必须是变量&#34;。 请帮我解决这个问题。感谢

1 个答案:

答案 0 :(得分:1)

不幸的是,它不像C ++中那样使用复制构造函数或重载赋值运算符。

您必须显式调用复合体的构造函数,例如

Data[k][l] = new Complex(realValue, imaginaryVal);

当然,您需要使用复合体的方法来乘以两个数字,因为Java中没有任何其他运算符重载的概念。

所以,也许Complex类可能有一些方法可以用来代替运算符,比如

class Complex {
  public static Complex mul(Complex c0, Complex c1) {
    double r0=c.getRe(), r1=c1.getRe();
    double i0=c.getIm(), i1=c1.getIm();
    return new Complex(r0*r1-i0*i1, r0*i1+r1*i0);
  }

  public static Complex mulStore(Complex res, Complex c0, Complex c1) {
    double r0=c.getRe(), r1=c1.getRe();
    double i0=c.getIm(), i1=c1.getIm();
    if(res==null) {
      res=new Complex();
    }
    res.setRe(r0*r1-i0*i1);
    res.setIm(r0*i1+r1*i0);
    return res;
  }

  // equiv with this *= rhs;
  public void mulAssign(Complex rhs) {
    // perform the "this * rhs" multiplication and 
    // store the result in this. 
    Complex.mulStore(this, rhs, this);
  } 

}