Wprowadzenie
Dwa najbardziej popularne funkcje trygonometryczne, sine
i cosine
(lub sin
i cos
krócej), może być rozszerzone do funkcji matrycy wartościach. Jednym ze sposobów obliczenia analogów wycenianych w macierzy jest:
Rozważ te dwie ważne tożsamości trygonometryczne:
Używając tych tożsamości, możemy wyprowadzić następujące równania dla sin
i cos
:
Wykładniczy matrycy istnieje dla matryc kwadratowych i jest przez:
gdzie 0 jest macierz identyczności I o tych samych wymiarach jak A . Korzystając z macierzy wykładniczej, te dwie funkcje trygonometryczne (a zatem wszystkie pozostałe funkcje trygonometryczne) można ocenić jako funkcje macierzy.
Wyzwanie
Biorąc pod uwagę macierz kwadratową A , wypisz wartości sin(A)
i cos(A)
.
Zasady
- Dane wejściowe i wyjściowe mogą być w dowolnym dogodnym, rozsądnym formacie (macierz 2D, format macierzy języka itp.).
- Możesz napisać pojedynczy program, dwa niezależne programy, jedną funkcję lub dwie funkcje. Jeśli zdecydujesz się napisać dwie funkcje, kod może być współdzielony między nimi (np. Funkcje importu i pomocnicze).
- Wartościami macierzy wejściowej zawsze będą liczby całkowite.
- Twoje rozwiązanie może mieć problemy z dokładnością w wyniku niedokładności zmiennoprzecinkowej. Jeśli twój język ma magiczne wartości nieskończonej precyzji, twoje rozwiązanie powinno działać idealnie (ignorując fakt, że wymagałoby to nieskończonego czasu i / lub pamięci). Ponieważ jednak te magiczne wartości nieskończonej precyzji nie istnieją, niedokładności spowodowane ograniczoną precyzją są dopuszczalne. Zasada ta ma na celu uniknięcie komplikacji wynikających z wymagania określonej precyzji w danych wyjściowych.
- Wbudowane funkcje obliczające funkcje trygonometryczne dla argumentów macierzy (w tym hiperboliczne funkcje wyzwalania) są niedozwolone. Inne wbudowane macierze (takie jak mnożenie, potęgowanie, diagonalizacja, rozkład i wykładniczy macierz) są dozwolone.
Przypadki testowe
Format: A -> sin(A), cos(A)
[[0]] -> [[0]], [[1]]
[[0, 2], [3, 5]] -> [[-0.761177343863758, 0.160587281888277], [0.240880922832416, -0.359709139143065]], [[0.600283445979886, 0.119962280223493], [0.179943420335240, 0.900189146538619]]
[[1, 0, 1], [0, 0, 0], [0, 1, 0]] -> [[0.841470984807897, -0.158529015192103, 0.841470984807897], [0, 0, 0], [0, 1, 0]], [[0.540302305868140, -0.459697694131860, -0.459697694131860], [0, 1, 0], [0, 0, 1]]
[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]] -> [[0.841470984807897, 0, 0, 0, 0], [0, 0.841470984807897, 0, 0, 0], [0, 0, 0.841470984807897, 0, 0], [0, 0, 0, 0.841470984807897, 0], [0, 0, 0, 0, 0.841470984807897]], [[0.540302305868140, 0, 0, 0, 0], [0, 0.540302305868140, 0, 0, 0], [0, 0, 0.540302305868140, 0, 0], [0, 0, 0, 0.540302305868140, 0], [0, 0, 0, 0, 0.540302305868140]]
[[-3, 2, -6], [3, 0, 4], [4, -2, 7]] -> [[-0.374786510963954, 0.135652884035570, -1.35191037980742], [1.14843105375406, 0.773644542790111, 1.21625749577185], [1.21625749577185, -0.135652884035570, 2.19338136461532]], [[4.13614256031450, -1.91289828483056, 5.50873853927692], [-2.63939111203107, 1.49675144828342, -3.59584025444636], [-3.59584025444636, 1.91289828483056, -4.96843623340878]]
Dalsza lektura
To doskonałe pytanie w Math.SE obejmuje kilka alternatywnych pochodnych macierzy analogów funkcji trygonometrycznych.
(ignoring the fact that it would require infinite time and/or memory)
sin([[1, 0, 1], [0, 0, 0], [0, 1, 0]]) = {{0.841, -0.158, 0.841}, {0, 0, 0}, {0, 1, 0}}
z Mathematica, możesz sprawdzić?