Вчера я создал этот фрагмент кода, который может вычислять 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.
Спасибо.