Moduł Math::Trig
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Co to jest
Moduł Math::Trig, jak mozna domyśleć się po nazwie, udostępnia szereg funkcji trygonometrycznych.
Napisany został przez 'typowego informatyka' - Jarkko Hietaniemi - zapalonego 'Perlowca',
autora wielu innych modułów, współautora książki o tym języku, zafascynowanego brzmieniem wlasnego
nazwiska
przy pomocy Raphael Manfredi, który swego czasu napisał wiele modułów, a który w chwili obecnej jest
jednym z głównych architektów oprogramowania gtk-gnutella.
Konspekt
use Math::Trig;
$x = tan(0.9);
$y = acos(3.7);
$z = asin(2.4);
$halfpi = pi/2;
$rad = deg2rad(120);
# Importuje stale pi2, pip2, pip4 (2*pi, pi/2, pi/4)
use Math::Trig ':pi';
use Math::Trig ':radial';
use Math::Trig ':great_circle';
Funkcje trygonometryczne
Możemy korzystać z następujących funkcji trygonometrycznych:
- tan → tangens - w polsce oznaczany jako tg, w krajach anglojęzycznych jak tan, czyli stosunek przyprostokątnej naprzeciwległej do kąta ostrego i przyprostokątnej przyległej do kąta ostrego
- csc, cosec, sec, sec, cot, cotan → kofunkcje sinusa, cosinusa i tangensa, np. kotangens to stosunek przyprostokątnej przyległej do kąta ostrego i przyprostokątnej naprzeciwległej kąta ostrego (cosec=csc, cotan=cot)
- asin, acos, atan → arcusy - funkcje odwrotne do trygonometrycznych (funkcje kołowe, funkcje cyklometryczne)
- acsc, acosec, asec, acot, acotan → arcusy kofunkcji (acosec=acsc,acotan=acot)
- sinh, cosh, tanh → funkcje hiperboliczne określane jako:
- csch, cosech, sech, coth, cotanh → kofunkcje funkcji hiperbolicznych (cosech=csch, cotanh=coth)
- asinh, acosh, atanh → arcusy funkcji hiperbolicznych
- acsch, acosech, asech, acoth, acotanh → arcusy kofunkcji funkcji hiperbolicznych (acsch=acosech, acoth=acotanh)
- pi, pi2, pi4, pip2, pip4 → stała pi i jej wielokrotności prezętujące się odpowiednio:
pi2 = 2*pi
pi4 = 4*pi
pip2 = pi/2
pip4 = pi/4
Dzielenie przez zero
Jak przystało na funkcje trygonomotryczne niektórych z nich nie da obliczyć się w poszczególnych miejscach i tak też przy funkcjach następujących:
acoth, acsc, acsch, asec, asech, atanh, cot, coth, csc, csch, sec, sech, tan, tanh
należy uważać, by nie nastąpiło dzielenie przez zero będą też przez zerowy algorytm.
Mając dany kod:
#!/usr/bin/perl -wl
use Math::Trig;
$a = cot(0);
print $a;
Otrzymujemy następujący błąd:
cot(0): Division by zero.(Because in the definition of cot(0), the divisor sin(0) is 0)
Mając dany kod:
Died at mathtrig.pl line 4.
#!/usr/bin/perl -wl
use Math::Trig;
$a = atanh(-1);
print $a;
Otrzymujemy następujący błąd:
atanh(-1): Logarithm of zero.
Died at mathtrig.pl line 4.
Dla csc, cot, asec, acsc, acot, csch, coth, asech, acsch argumentem nie może być zero.
Dla atanh, acoth argumentem nie może być jedynka, ani minus jedynka.
Dla tan, sec, tanh, sech argumentem nie może być pi/2 + k * pi, gdzie k jest jakąś stałą.
Ciekawostki
Argument: liczba rzeczywista. Wynik: liczba zespolona.
Przy próbach wpisywania różnorakich argumentów np. dla funkcji asin może zdarzyć się nieoczekiwana rzecz. Mając np. dany prosty kod:
#!/usr/bin/perl -wl
use Math::Trig;
print asin(2);
Otrzymujemy niespodziewany wynik:
[mmachows@manta][moduly]:D perl mathtrig.pl
1.5707963267949-1.31695789692482i
Dlaczego?
Dzieje się tak ponieważ Math::Trig korzysta z modułu Math::Complex obsługującego operacje na liczbach zespolonych.
asin(2) nie ma reprezentacji w świecie liczb rzeczywistych, natomiast w świecie liczb zespolonych jak najbardziej ma on racje bytu, gdzie 1.5707963267949 oznacza jego część rzeczywistą, natomiast -1.31695789692482i - część urojoną.
Jednostki miary kąta płaskiego.
Perl operuje domyślnie na radianach.
Jeśli natomiast chcemy używać innej miary do prezentowania jednostki miary kąta płaskiego możemy albo zrobić to sobie 'pod górkę' stosując wzory matematyczne:
i pisząc własne funkcje:
BEGIN {
use constant PI => 3.14159265358979;
sub deg2rad {
my $degrees = shift;
return ($degrees / 180) * PI;
}
sub rad2deg {
my $radians = shift;
return ($radians / PI) * 180;
}
}
Lub też skorzystać z 'gotowców', których dostarcza nam moduł Math::Trig:
use Math::Trig;
$radians = deg2rad($degrees);
$radians = grad2rad($gradians);
$degrees = rad2deg($radians);
$degrees = grad2deg($gradians);
$gradians = deg2grad($degrees);
$gradians = rad2grad($radians);
Dodatkowe informacje
Powyżej została przedstawiona charakterystyka tylko głównych możliwości tego modułu, zainteresownych zachęcam do zgłębienia wiedzy na jego temat odwiedzając stronę:http://search.cpan.org/~jhi/Math-Complex-1.37/lib/Math/Trig.pm lub czytając manual w terminalu wpisując: perldoc Math::Trig.
Autorka opisu
M.M.
Uniwersytet Gdański - Instytut Informatyki - Strona domowa - Perl - Wyklady