5

昨天我创建了这段可以计算 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

4 回答 4

7

首先,它可能有多种解决方案。参见维基百科:复数/幂

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

我认为您应该将其分解为极坐标符号并从那里开始。

于 2010-06-23T06:51:13.513 回答
5

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

因此,极坐标形式z是 = 雷西塔,其中:

  • rz, 或sqrt(x2+y2), 和
  • θatan y 超过 x

完成此操作后,您可以使用DeMoivre 定理进行如下计算z^n

z^n = r^ne^in theta

或更简单地说

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

欲了解更多信息,请阅读复数的极坐标形式

于 2010-06-23T07:11:52.973 回答
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
于 2010-06-23T06:49:44.303 回答
0

当 n 不是整数且 a 不是正数时,a^n 定义不明确。

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

并且没有唯一的选择

于 2010-06-23T18:48:17.933 回答