用理性指数计算复数

时间:2010-06-23 06:36:56

标签: java math complex-numbers

昨天我创建了一段可以计算z ^ n的代码,其中z是一个复数,n是任何正整数。

--snip--
float real = 0;
float imag = 0;

// d is the power the number is raised to [(x + yi)^d]
for (int n = 0; n <= d; n++) {
  if (n == 0) {
    real += pow(a, d);
  } else { // binomial theorem      
    switch (n % 4) {
      case 1: // i
        imag += bCo(d, n) * pow(a, d - n) * pow(b, n);
        break;
      case 2: // -1
        real -= bCo(d, n) * pow(a, d - n) * pow(b, n);
        break;
      case 3: // -i
        imag -= bCo(d, n) * pow(a, d - n) * pow(b, n);
        break;
      case 0: // 1
        real += bCo(d, n) * pow(a, d - n) * pow(b, n);
        break;
    }
  }
}
--snip--

int factorial(int n) {
  int total = 1;
  for (int i = n; i > 1; i--) { total *= i; }
  return total;
}

// binomial cofactor
float bCo(int n, int k) {
  return (factorial(n)/(factorial(k) * factorial(n - k)));
}

我使用二项式定理来扩展z ^ n,并知道是否将每个项视为实数或虚数,具体取决于虚数的幂。

我想要做的是能够计算z ^ n,其中n是任何正实数(分数)。我知道二项式定理可以用于不是整数的幂,但我不确定如何处理复数。因为i ^ 0.1有一个实部和虚部,我不能把它分成实数或虚数变量,我甚至不知道如何编程可以计算它的东西。

有没有人知道一种可以帮助我实现这一目标的算法,或者甚至是一种更好的方法来处理能够实现这一目标的复数?

哦,我正在使用java。

感谢。

4 个答案:

答案 0 :(得分:7)

首先,它可能有多种解决方案。请参阅Wikipedia: Complex number / exponentiation

  

类似的考虑表明,我们可以像实数一样定义有理实数,因此 z 1 / n n :th z 的根。根源并不是唯一的,因此很明显复杂的权力是多元的,因此需要谨慎对待权力;例如(8 1/3 4 ≠16,因为有三个立方根为8,所以给定的表达式,通常缩短为8 4/3 ,是最简单的。

我认为你应该把它分解为极坐标并从那里开始。

答案 1 :(得分:5)

考虑一个复数z,使z = x + iy

因此,z的极坐标形式为= re^itheta,其中:

  • r的大小为zsqrt(x2+y2)
  • thetaatan y over x

完成后,您可以使用DeMoivre's Theorem计算z^n,如下所示:

  

z^n = r^n e^i n theta

或更简单地作为

  

z^n = r^n (cos (n theta) + i sin(n theta))

有关详细信息,请参阅polar form of a complex number

答案 2 :(得分:0)

我不擅长数学,所以我可能理解你的任务错了。但据我所知 - apache commons math可以帮助你:http://commons.apache.org/math/userguide/complex.html

示例:

Complex first  = new Complex(1.0, 3.0);
Complex second = new Complex(2.0, 5.0);

Complex answer = first.log();        // natural logarithm.
        answer = first.cos();        // cosine
        answer = first.pow(second);  // first raised to the power of second

答案 3 :(得分:0)

当p不是整数且a不是正数时,

a ^ n定义不正确。

如果z是一个复数,你仍然可以给出z ^ a = exp(一个log z)的含义,但你必须弄清楚当z不是正数时log z的含义。

还有no unique choice