Einführung
Die beiden häufigsten trigonometrische Funktionen, sine
und cosine
(oder sin
und cos
kurz), kann erweitert werden , matrixWertFunktionen sind. Eine Möglichkeit, die Analoga mit Matrixwerten zu berechnen, ist die folgende:
Betrachten Sie diese beiden wichtigen trigonometrischen Identitäten:
Unter Verwendung dieser Identitäten können wir die folgenden Gleichungen für sin
und ableiten cos
:
Das Matrixexponential existiert für alle quadratischen Matrizen und ist gegeben durch:
wobei A 0 die Identitätsmatrix I mit den gleichen Dimensionen wie A ist . Mit der Matrixexponentialfunktion können diese beiden trigonometrischen Funktionen (und damit alle anderen trigonometrischen Funktionen) als Funktionen von Matrizen ausgewertet werden.
Die Herausforderung
Geben Sie bei einer quadratischen Matrix A die Werte von sin(A)
und aus cos(A)
.
Regeln
- Die Ein- und Ausgabe kann in jedem geeigneten, angemessenen Format erfolgen (2D-Array, Matrixformat Ihrer Sprache usw.).
- Sie können ein einzelnes Programm, zwei unabhängige Programme, eine einzelne Funktion oder zwei Funktionen schreiben. Wenn Sie zwei Funktionen schreiben möchten, wird der Code möglicherweise von beiden gemeinsam genutzt (z. B. Import- und Hilfsfunktionen).
- Die Werte der Eingabematrix sind immer ganze Zahlen.
- Ihre Lösung kann aufgrund von Gleitkommaungenauigkeiten Genauigkeitsprobleme aufweisen. Wenn Ihre Sprache magische Werte mit unendlicher Genauigkeit aufweist, sollte Ihre Lösung einwandfrei funktionieren (ohne die Tatsache zu berücksichtigen, dass dafür unendliche Zeit und / oder Speicher erforderlich wären). Da es diese magischen Werte mit unendlicher Genauigkeit nicht gibt, sind Ungenauigkeiten aufgrund begrenzter Genauigkeit akzeptabel. Diese Regel dient zur Vermeidung von Komplikationen, die sich aus der Anforderung einer bestimmten Genauigkeit der Ausgabe ergeben.
- Builtins, die trigonometrische Funktionen für Matrixargumente berechnen (einschließlich hyperbolischer Triggerfunktionen), sind nicht zulässig. Andere Matrix-Buildins (wie Multiplikation, Exponentiation, Diagonalisierung, Zerlegung und die Exponentialmatrix) sind zulässig.
Testfälle
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]]
Weitere Lektüre
Diese hervorragende Frage bei Math.SE enthält einige alternative Ableitungen der matrixwertigen Analoga trigonometrischer Funktionen.
(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}}
du nachsehen, was ich mit Mathematica gemacht habe?