Perl Cd Bookshelf [Electronic resources]

نسخه متنی -صفحه : 875/ 447
نمايش فراداده

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)


2.13. Multiplying Matrices2.15. Converting Binary, Octal, and Hexadecimal Numbers


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