2.14. Using Complex Numbers2.14.1. ProblemYour application must manipulate complex numbers, as are often needed in engineering, science, and mathematics. 2.14.2. SolutionEither 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. DiscussionHere'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 AlsoThe documentation for the standard Math::Complex module (also in Chapter 32 of Programming Perl) Copyright © 2003 O'Reilly & Associates. All rights reserved. |
|