Как работать с комплексными числами в java?

#java #complex-numbers

#java #комплексные числа

Вопрос:

Я новичок в Java и не уверен, как работать с комплексными числами в Java. Я пишу код для своего проекта. Я использовал идентификатор Эйлера, 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())); , в котором говорится: «Левая часть присваивания должна быть переменной».
Пожалуйста, помогите мне решить эту проблему. Спасибо

Комментарии:

1. Если вы пытаетесь назначить экземпляр Complex to Data[k][l] , то вам, как правило, понадобится что-то в форме Data[k][l] = new Complex(...) . То, что у вас сейчас есть, похоже, пытается присвоить переменной два значения, разделенных запятыми, что никогда не сработает.

2. Спасибо за ответ, Хелвуд. Я исправил это.

Ответ №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);
  } 

}