Um die Hauptträgheitsachse und das Hauptträgheitsmoment aus dem Trägheitstensor zu erhalten, wird der Vorgang des Diagonalisierens der Matrix durchgeführt. Ich denke, es ist ziemlich schwierig, ein Diagonalisierungsprogramm zu schreiben, aber mit NumPy ist es überraschend leicht zu finden. Ich werde die theoretische Geschichte an anderer Stelle lesen und nur das Berechnungsverfahren mit NumPy erläutern.
[Trägheitsmoment-Wikipedia](https://ja.wikipedia.org/wiki/%E6%85%A3%E6%80%A7%E3%83%A2%E3%83%BC%E3%83%A1% E3% 83% B3% E3% 83% 88 # .E6.85.A3.E6.80.A7.E4.B8.BB.E8.BB.B8.E3.81, A8.E4.B8.BB.E6 .85.A3.E6.80.A7.E3.83.A2.E3.83.BC.E3.83.A1.E3.83.B3.E3.83.88) Koordinatentransformation des Trägheitstensors
Stellen Sie die Ausgabe von NumPy so ein, dass sie leicht lesbar ist. Hier wird festgelegt, dass es festgesetzt und mit 4 Nachkommastellen angezeigt wird.
import numpy as np
np.set_printoptions(precision=4, suppress=True)
Insbesondere die Lesbarkeit des Minimalwertes ist sehr unterschiedlich.
-2.86013404e-15
→ 0.
Definieren Sie eine Matrix, die den Trägheitstensor als ndarray darstellt. Da der Trägheitstensor jedoch eine symmetrische Matrix ist, machen Sie ihn symmetrisch.
I = np.array([[30, 5, 5],
[5, 20, 5],
[5, 5, 10]])
print(I)
output
[[30 5 5]
[ 5 20 5]
[ 5 5 10]]
numpy.linalg.eig ist eine Funktion zum Finden von Eigenwerten und Eigenvektoren. Dies kann verwendet werden, um das Hauptträgheitsmoment und die Trägheitsspindel zu bestimmen.
I_p, P = np.linalg.eig(I)
print('Hauptträgheitsmoment: \n', I_p)
print('Trägheitsspindel: \n', P.T)
output
Hauptträgheitsmoment:
[ 33.8923 18.5542 7.5536]
Trägheitsspindel:
[[ 0.8716 0.4103 0.2683]
[ 0.4706 -0.8535 -0.2238]
[-0.1371 -0.3213 0.937 ]]
Der erste Rückgabewert ist ein Array eindeutiger Werte. Dies ist der Hauptträgheitsmoment. Der zweite Rückgabewert ist eine Anordnung von drei Eigenvektoren als Spaltenvektoren, und jeder Vektor dient als Hauptträgheitsachse. Da der Zeilenvektor in seinem Aussehen leichter zu verstehen ist, wird er transponiert und ausgegeben.
Wir haben bereits das erhalten, was wir brauchen, aber lassen Sie uns bestätigen, dass die Diagonalisierung das hauptsächliche Trägheitsmoment darstellt. Das Hauptträgheitsmoment kann durch Diagonalisieren des Trägheitstensors $ I $ unter Verwendung der Matrix $ P $ erhalten werden. Diagonale Matrix des Hauptträgheitsmoments = $ P ^ {-1} I P $ Referenz: Diagonalisierung \ -Wikipedia
numpy.linalg.inv ist eine Funktion zum Finden der inversen Matrix.
Der Operator "@" repräsentiert das Produkt von Matrizen. (Beachten Sie, dass in NumPy der Operator *
das Produkt der Elemente ist.)
I_p = np.linalg.inv(P) @ I @ P
print(I_p)
output
[[ 33.8923 -0. 0. ]
[ -0. 18.5542 0. ]
[ -0. -0. 7.5536]]
Die dadurch erhaltene diagonale Komponente ist das Hauptträgheitsmoment. Mit der Diag-Funktion können nur diagonale Komponenten extrahiert werden.
print(np.diag(I_p))
output
[ 33.8923 18.5542 7.5536]
Da der Operator @
, der das Produkt von Matrizen berechnet, in Python 3.5 oder höher verwendet werden kann, wird die Funktion numpy.dot stattdessen in Python 3.4 und früheren Versionen verwendet.
Recommended Posts