Вступление
Две наиболее распространенные тригонометрические функции, 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, вы можете проверить?