昨天我創建了這段可以計算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 2 n,並且知道是不是每個學期當作取決於虛數的功率實或虛數。
我想要做的是能夠計算z^n,其中n是任何正實數(分數)。我知道二項式定理可以用於不是整數的冪,但我不確定如何處理複數。因爲i^0.1有一個實數和虛數分量,所以我不能把它分類成一個實數或虛數變量,我甚至不知道如何編程一些可以計算它的東西。
有沒有人知道一種算法可以幫助我實現這一點,或者甚至可以有更好的方式來處理複雜的數字,這將使這成爲可能?
哦,我正在使用java。
謝謝。
謝謝,這就是我一直在尋找的。 我上學期在學校裏實際學到了DeMoivre的定理,所以我覺得有點傻,因爲不想用它。 – Bumzur 2010-06-23 07:26:49
另請參閱'public Complex pow(double e)'http://jscience.org/api/org/jscience/mathematics/number/Complex.html – trashgod 2010-06-23 15:40:28
「z = r * e * i * theta」在第三行應該是「z = r * e ^(i * theta)」我會自己改變它,但我還沒有那個代表。 – andand 2010-06-23 16:20:27