Вступление
Две наиболее распространенные тригонометрические функции, 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 включает в себя несколько альтернативных выводов матричнозначных аналогов тригонометрических функций.
sin([[1, 0, 1], [0, 0, 0], [0, 1, 0]]) = {{0.841, -0.158, 0.841}, {0, 0, 0}, {0, 1, 0}}
с Mathematica, вы можете проверить?(ignoring the fact that it would require infinite time and/or memory)
Ответы:
Юлия,
3319 байтЭто функция, которая принимает двумерный массив чисел с плавающей запятой и возвращает набор таких массивов, соответствующих косинусу и синусу соответственно. Обратите внимание, что это обратный порядок, указанный в тестах, в которых синус указан первым.
Для вещественной матрицы A имеем
и
Таким образом, синус и косинус A соответствуют мнимой и действительной частям матрицы экспоненциального e iA . См. Функции матриц (Higham, 2008).
Попробуйте онлайн! (включает все тестовые случаи)
Благодаря Деннису сэкономлено 14 байт!
источник
Mathematica, 27 байт
Основано на решении @ Rainer P.
Принимает квадратную матрицу
A
в качестве аргумента и выводит список, содержащий{sin(A), cos(A)}
.Входные данные отформатированы
N
для получения числового значения вместо длинной точной формулы иColumn
отображения результатовsin(A)
и вcos(A)
виде отдельных матриц вместо вложенного списка.Для вычисления значений отдельно требуется 38 байтов
источник
Желе ,
2322 байтаПопробуйте онлайн!
Фон
Этот подход непосредственно вычисляет ряд Тейлора для синуса и косинуса , т.е.
Это увеличивает количество начальных членов обеих серий, пока результат больше не изменяется, поэтому его точность ограничена только точностью типа с плавающей запятой.
Как это устроено
источник
Matlab,
138 121 5250 байтПоскольку возведение в матрицу разрешено (то, что я сначала не заметил, не так), мне больше не нужно определять свою вспомогательную функцию, и все это можно решить тривиально:
На входе должна быть матрица, например
[1,2;4,5]
или альтернативно[[1,2];[3,4]]
Неожиданная вещь (задним числом не столь неожиданная) состоит в том, что матрица косинуса и синуса все еще удовлетворяет
источник
A^0
же, какeye(size(A))
?expm
?Matlab, 37 байт
источник
C ++, 305 байт
Ввод представляет собой список чисел, которые являются идеальным квадратом на стандартном вводе. Вывод - это печатный 2d массив на stdout
источник
Юлия 0,4, 28 байт
Вход - это матрица с плавающей точкой, выход - это массив матриц. Попробуйте онлайн!
источник
Sage, 44 байта
Попробуйте онлайн .
Эта анонимная функция возвращает список из 2 матриц, соответствующих
sin(A)
иcos(A)
, соответственно.exp(I*A)
вычисляет экспоненциальную матрицу дляI*A
(A
со всеми элементами, умноженными на мнимую единицу) иmatrix.apply_map(f)
возвращает матрицу, в которойf
была применена ко всем ее элементам. Применяяimag
иreal
(функции для получения мнимой и действительной частей скалярного значения) к матрицам, мы получаем значенияsin(A)
иcos(A)
, благодаря известной идентичности Эйлера (упоминается в тексте задачи).источник