Операции с комплексными числами
Проблема
Ваша программа должна работать с комплексными числами,
часто используемыми в инженерных, научных и математических расчетах.
Решение
Либо самостоятельно организуйте хранение вещественной и мнимой составляющих комплексного числа,
либо воспользуйтесь классом 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.
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|