The following example shows how you can use the Complex Mathematics Library to calculate the roots of a complex number. For every positive integer n, each complex number z has exactly n distinct nth roots. Suppose that in the complex plane the angle between the real axis and point z is Ø, and the distance between the origin and the point z is r. Then z has the polar form (r, Ø), and the n roots of z have the values:
ó ó·ß ó·ß2 Ó·ß3 · · · ó·ßn-1
where ß is a complex number with the value:
ß = ( cos(2¶/n), sin(2¶/n) )
and ó is a complex number with the value:
ó = r1/n ( cos(Ø/n), sin(Ø/n) )
The following code includes two functions, get_omega() and get_sigma(), to calculate the values of ß and ó. The user is prompted for the complex value z and the value of n. After the values of ß and ó have been calculated, the n roots of z are calculated and printed.
// Calculating the roots of a complex number #include <iostream.h> #include <complex.h> #include <math.h>
// Function to calculate the value of omega for a given value of n
complex get_omega(double n) {
complex omega = complex(cos((2.0*M_PI)/n), sin((2.0*M_PI)/n));
return omega;
}
//
// function to calculate the value of sigma for a given value of
// n and a given complex value
//
complex get_sigma(complex comp_val, double n) {
double rn, r, theta;
complex sigma;
r = abs(comp_val);
theta = arg(comp_val);
rn = pow(r,(1.0/n));
sigma = rn * complex(cos(theta/n),sin(theta/n));
return sigma;
}
void main() {
double n;
complex input, omega, sigma;
//
// prompt the user for a complex number
//
cout << "Please enter a complex number: ";
cin >> input;
//
// prompt the user for the value of n
//
cout << "What root would you like of this number? ";
cin >> n;
//
// calculate the value of omega
//
omega = get_omega(n);
cout << "Here is omega " << omega << endl;
//
// calculate the value of sigma
//
sigma = get_sigma(input,n);
cout << "Here is sigma " << sigma << '\n'
<< "Here are the " << n << " roots of " << input << endl;
for (int i = 0; i < n ; i++) {
cout << sigma*(pow(omega,i)) << endl;
}
}
This example produces the output shown below in regular type, given the input shown in bold:
Please enter a complex number: (-7, 24) What root would you like of this number? 2 Here is omega ( -1, 1.22465e-16) Here is sigma ( 3, 4) Here are the 2 roots of ( -7, 24) ( 3, 4) ( -3, -4)