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