Introducción
Las dos funciones trigonométricas más comunes, sine
y cosine
(o sin
ycos
para abreviar), pueden extenderse para ser funciones con valores de matriz. Una forma de calcular los análogos con valores de matriz es la siguiente:
Considere estas dos identidades trigonométricas importantes:
Usando estas identidades, podemos derivar las siguientes ecuaciones para sin
y cos
:
La matriz exponencial existe para todas las matrices cuadradas y viene dada por:
donde A 0 es la matriz de identidad I con las mismas dimensiones que A . Usando la matriz exponencial, estas dos funciones trigonométricas (y, por lo tanto, todas las demás funciones trigonométricas) pueden evaluarse como funciones de matrices.
El reto
Dada una matriz cuadrada A , genera los valores de sin(A)
y cos(A)
.
Reglas
- La entrada y la salida pueden estar en cualquier formato conveniente y razonable (matriz 2D, formato de matriz de su idioma, etc.).
- Puede escribir un solo programa, dos programas independientes, una sola función o dos funciones. Si elige escribir dos funciones, el código puede compartirse entre ellas (como las importaciones y las funciones auxiliares).
- Los valores de la matriz de entrada siempre serán enteros.
- Su solución puede tener problemas de precisión como resultado de la imprecisión de punto flotante. Si su lenguaje tenía valores mágicos de precisión infinita, entonces su solución debería funcionar perfectamente (ignorando el hecho de que requeriría tiempo y / o memoria infinitos). Sin embargo, dado que esos valores mágicos de precisión infinita no existen, las imprecisiones causadas por la precisión limitada son aceptables. Esta regla está en su lugar para evitar complicaciones resultantes de requerir una cantidad específica de precisión en la salida.
- No se permiten los componentes integrados que calculan funciones trigonométricas para argumentos de matriz (incluidas las funciones trigonométricas hiperbólicas). Se permiten otras matrices integradas de la matriz (como la multiplicación, exponenciación, diagonalización, descomposición y la exponencial de la matriz).
Casos de prueba
Formato: 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]]
Otras lecturas
Esta excelente pregunta en Math.SE incluye algunas derivaciones alternativas de los análogos de funciones trigonométricas con valores de matriz.
(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}}
con Mathematica, ¿puedes verificar?