Вступ
Два найбільш поширених тригонометричні функції, sine
і cosine
(або sin
і cos
для стислості), може бути розширений , щоб бути матриці-функції. Один із способів обчислення аналогів матричного значення полягає в наступному:
Розглянемо ці дві важливі тригонометричні тотожності:
Використовуючи ці тотожності, ми можемо отримати такі рівняння для sin
та cos
:
Матриця експонентний існує для всіх квадратних матриць і визначається за формулою:
де 0 тотожний матриця я з тими ж розмірами , як A . Використовуючи матричний експоненціал, ці дві тригонометричні функції (і, отже, всі інші тригонометричні функції) можна оцінити як функції матриць.
Змагання
Давши квадратну матрицю A , виведіть значення sin(A)
і cos(A)
.
Правила
- Введення та вихід можуть бути у будь-якому зручному, розумному форматі (2D масив, матричний формат вашої мови тощо).
- Ви можете написати одну програму, дві незалежні програми, одну функцію або дві функції. Якщо ви вирішите записати дві функції, код може бути розподілений між ними (наприклад, імпорт та допоміжні функції).
- Значення матриці вводу завжди будуть цілими числами.
- У вашому рішенні можуть виникнути проблеми з точністю внаслідок неточності з плаваючою комою. Якщо у вашій мові були магічні значення нескінченної точності, то ваше рішення повинно працювати ідеально (ігноруючи той факт, що це вимагатиме нескінченного часу та / або пам'яті). Однак, оскільки цих магічних значень нескінченної точності не існує, допустимі неточності, викликані обмеженою точністю. Це правило діє, щоб уникнути ускладнень, що виникають внаслідок вимагання певної кількості точності у виході.
- Вбудовані, які обчислюють тригонометричні функції для аргументів матриці (включаючи гіперболічні функції триггеру), не допускаються. Допускаються інші вбудовані матриці (такі як множення, експоненціація, діагоналізація, декомпозиція та матриця експоненціалів).
Випробування
Формат: 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]]
Подальше читання
Це відмінне запитання на Math.SE включає деякі альтернативні виведення матричних аналогів тригонометричних функцій.
(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}}
з Mathematica, ви можете перевірити?