介绍
两种最常见的三角函数,sine
和cosine
(或sin
和cos
的简称),可以扩展为矩阵值函数。计算矩阵值类似物的一种方法如下:
考虑以下两个重要的三角恒等式:
使用这些标识,我们可以为sin
和导出以下方程式cos
:
该矩阵指数存在于所有方阵和由下式给出:
其中A 0是单位矩阵I与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,可以查一下吗?