用理性指数计算复数

Bum*_*zur 5 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)));
}
Run Code Online (Sandbox Code Playgroud)

我使用二项式定理来扩展z ^ n,并知道是否根据虚数的幂将每个项视为实数或虚数.

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

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

哦,我正在使用java.

谢谢.

aio*_*obe 7

首先,它可能有多种解决方案.请参阅Wikipedia:复数/取幂.

类似的考虑显示,我们可以定义合理的实权只是作为一个实数,所以ž 1/NÑ:日根ž.根源并不是唯一的,因此很明显复杂的权力是多元的,因此需要谨慎对待权力; 例如(8 1/3)4?16,因为有三个立方根8,所以给定的表达式,通常缩短为8 4/3,是最简单的.

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


Fav*_*ius 5

考虑一个复数 ž 这样的 z = x + iy.

因此,极地形式 ž 是= 再^ itheta,其中:

  • [R 是的 ž, 要么 SQRT(X 2 + Y),和
  • THETAatan y over x.

完成后,您可以使用DeMoivre的定理进行计算ž^ N 像这样:

z ^ n = r ^ ne ^ in the the

或者更简单地说

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

有关更多信息,请阅读复数极坐标形式.

  • 该公式仅对 n 的整数值有效 (2认同)