Using Complex Numbers (Perl Cookbook, 2nd Edition)

## 2.14. Using Complex Numbers

### 2.14.1. Problem

Your application must manipulate complex numbers, as are often needed in engineering, science, and mathematics.

### 2.14.2. Solution

Either keep track of the real and imaginary components yourself:

>     # $c = $a * $b manually
>     $c_real = ( $a_real * $b_real ) - ( $a_imaginary * $b_imaginary );
>     $c_imaginary = ( $a_real * $b_imaginary ) + ( $b_real * $a_imaginary );

or use the Math::Complex module (part of the standard Perl distribution):

>     # $c = $a * $b using Math::Complex
>     use Math::Complex;
>     $c = $a * $b;

### 2.14.3. Discussion

Here's how you'd manually multiply `3+5i` and `2-2i`:

>     $a_real = 3; $a_imaginary = 5;              # 3 + 5i;
>     $b_real = 2; $b_imaginary = -2;             # 2 - 2i;
>     $c_real = ( $a_real * $b_real ) - ( $a_imaginary * $b_imaginary );
>     $c_imaginary = ( $a_real * $b_imaginary ) + ( $b_real * $a_imaginary );
>     print "c = ${c_real}+${c_imaginary}i\n";

>     c = 16+4i

and with Math::Complex:

>     use Math::Complex;
>     $a = Math::Complex->new(3,5);               # or Math::Complex->new(3,5);
>     $b = Math::Complex->new(2,-2);
>     $c = $a * $b;
>     print "c = $c\n";

>     c = 16+4i

You may create complex numbers via the `cplx` constructor or via the exported constant i:

>     use Math::Complex;
>     $c = cplx(3,5) * cplx(2,-2);                # easier on the eye
>     $d = 3 + 4*i;                               # 3 + 4i
>     printf "sqrt($d) = %s\n", sqrt($d);

>     sqrt(3+4i) = 2+i

The Math::Trig module uses the Math::Complex module internally because some functions can break out from the real axis into the complex plane—for example, the inverse sine of 2.

### 2.14.4. See Also

The documentation for the standard Math::Complex module (also in Chapter 32 of Programming Perl)

Copyright © 2003 O'Reilly & Associates. All rights reserved.