Recipe 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)



Perl Cookbook
Perl Cookbook, Second Edition
ISBN: 0596003137
EAN: 2147483647
Year: 2003
Pages: 501

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net