昨日、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を使用しています。
ありがとう。