introduction
Les deux fonctions trigonométriques les plus courantes, sine
et cosine
(ou sin
etcos
pour faire court), peuvent être étendues pour être des fonctions matricielles. Une façon de calculer les analogues à valeurs matricielles est la suivante:
Considérez ces deux identités trigonométriques importantes:
En utilisant ces identités, nous pouvons dériver les équations suivantes pour sin
et cos
:
L' exponentielle de matrice existe pour toutes les matrices carrées et est donnée par:
où A 0 est la matrice d'identité I avec les mêmes dimensions que A . En utilisant l'exponentielle matricielle, ces deux fonctions trigonométriques (et donc toutes les autres fonctions trigonométriques) peuvent être évaluées comme des fonctions de matrices.
Le défi
Étant donné une matrice carrée A , affichez les valeurs de sin(A)
et cos(A)
.
Règles
- L'entrée et la sortie peuvent être dans n'importe quel format pratique et raisonnable (tableau 2D, format matriciel de votre langue, etc.).
- Vous pouvez écrire un seul programme, deux programmes indépendants, une seule fonction ou deux fonctions. Si vous choisissez d'écrire deux fonctions, le code peut être partagé entre elles (telles que les importations et les fonctions d'assistance).
- Les valeurs de la matrice d'entrée seront toujours des entiers.
- Votre solution peut présenter des problèmes de précision en raison d'une imprécision en virgule flottante. Si votre langue avait des valeurs magiques de précision infinie, alors votre solution devrait fonctionner parfaitement (en ignorant le fait qu'elle nécessiterait un temps infini et / ou de la mémoire). Cependant, comme ces valeurs magiques de précision infinie n'existent pas, les inexactitudes causées par une précision limitée sont acceptables. Cette règle est en place pour éviter les complications résultant de la nécessité d'une précision spécifique dans la sortie.
- Les commandes internes qui calculent des fonctions trigonométriques pour les arguments de matrice (y compris les fonctions trigonométriques hyperboliques) ne sont pas autorisées. D'autres matrices intégrées (telles que la multiplication, l'exponentiation, la diagonalisation, la décomposition et l'exponentielle de la matrice) sont autorisées.
Cas de test
Format: 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]]
Lectures complémentaires
Cette excellente question de Math.SE comprend des dérivations alternatives des analogues matriciels des fonctions trigonométriques.
(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}}
avec Mathematica, pouvez-vous vérifier?