Операции с комплексными числами

Проблема

Ваша программа должна работать с комплексными числами, часто используемыми в инженерных, научных и математических расчетах.

Решение

Либо самостоятельно организуйте хранение вещественной и мнимой составляющих комплексного числа, либо воспользуйтесь классом Math::Complex (из стандартной поставки Perl).
Ручное умножение комплексных чисел
# $с = $а * $Ь - моделирование операции
$c_real = ( $a_real * $b_real ) - ($a_imaginary * $b_imaginary );
$c_imaginary = ( $a_real * $b_imaginary ) - ($b_real * $a_imaginary );

Math::Complex
# Умножение комплексных чисел с помощью Math::Complex
use Math::Conplex;
$c = $a * $b;

Комментарий

Ручное умножение комплексных числа 3+5i и 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_real}+${c_imaginary}i\n";
с = 16+41
То же с применением модуля Math::Complex:
use Math::Complex;
$a = Math::Complex->new(3,5);
$b = Math::Complex->new(2,-2);
$c = $a * $b;
print "c = $c\n";
с = 16+41
Версия 5.004 позволяет создавать комплексные числа с помощью конструктора или экспортированной константы i:
use Math::Complex;
$c = cplx(3,5) * cplx(2,-2);           # Лучше воспринимается
$d = 3 + 4*i;                          # 3 + 4i
printfprintf "sqrt($d) = %s\n", sqrt($d);
sqrt(3+4i)   =   2+i
В исходном варианте модуля Math :: Complex, распространяемом с версией 5.003, не перегружаются многие функции и операторы версии 5.004. Кроме того, Math::Complex используется модулем Math::Trig (появившимся в версии 5.004), поскольку некоторые функции могут выходить за пределы вещественной оси в комплексную плоскость — например, арксинус 2.

См. также




2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: