[PYTHON] Ermitteln Sie mit NumPy die Trägheitsspindel und das Hauptträgheitsmoment aus dem Trägheitstensor

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.

Referenz:

[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

Berechnungsverfahren

  1. Erstellen Sie eine Matrix $ I $, die den Trägheitstensor darstellt.
  2. Verwenden Sie numpy.linalg.eig, um die Matrix $ P $ zu finden, die Eigenwerte und Eigenvektoren bündelt.
  3. Diagonalisieren Sie den Trägheitstensor $ I $ mit der Matrix $ P $. (Optional)

0. Vorbereitung

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.

1. Erstellen Sie eine Matrix_I_, die den Trägheitstensor darstellt.

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]]

2. Verwenden Sie numpy.linalg.eig, um die Matrix P zu finden, die Eigenwerte und Eigenvektoren bündelt.

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.

3. Diagonalisieren Sie den Trägheitstensor_I_ mit der Matrix P. (Optional)

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]

Vorsichtsmaßnahmen

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

Ermitteln Sie mit NumPy die Trägheitsspindel und das Hauptträgheitsmoment aus dem Trägheitstensor
Sehen Sie, wie schnell Sie mit NumPy / SciPy beschleunigen können
Finden Sie die Entfernung von Breite und Länge (unter Berücksichtigung der Rundheit der Erde).
Finden Sie den Wegpunkt aus dem Breiten- und Längengrad (unter Berücksichtigung der Rundheit der Erde).
Finden Sie die allgemeinen Begriffe der Tribonacci-Sequenz in linearer Algebra und Python
Finden Sie mit NumPy die Position über dem Schwellenwert
Deep Learning von Grund auf neu Die Theorie und Implementierung des mit Python erlernten Deep Learning Kapitel 3
Finden Sie den Tag nach Datum / Uhrzeit heraus
Extrahieren Sie Bilder und Tabellen mit Python aus PDF, um die Berichtslast zu verringern
Lassen Sie uns die Matrix transponieren und die Matrizen mit numpy multiplizieren.
Lerne Nim mit Python (ab Anfang des Jahres).
Berechnen Sie die Summe der eindeutigen Werte durch Pandas-Kreuztabellen
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Finden Sie den Speicherort der mit pip installierten Pakete heraus
Finden Sie die "Mindestpunktzahl" aus der "Durchschnittspunktzahl der Prüflinge", der "Durchschnittspunktzahl der erfolgreichen Bewerber" und der "Vergrößerung" der Aufnahmeprüfung
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Eine Geschichte über die Vorhersage von Präfekturen aus Städtenamen mit Jubatus
Finden Sie den kritischen Pfad von PERT mithilfe der Breitenprioritätssuche und der Tiefenprioritätssuche
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Informieren Sie sich über das Alter und die Anzahl der Gewinne von Präfekturgouverneuren im ganzen Land
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)
Finden Sie mit PythonControl die Übertragungsfunktion des Systems mit einem Freiheitsgrad.
Erfassen Sie GeneratorExit und erkennen Sie das Ende der Iteration von der Generatorseite
Finden Sie die numerische Lösung der gewöhnlichen Differentialgleichung zweiter Ordnung mit scipy
[Erforderliches Thema DI] Implementieren und verstehen Sie den Mechanismus von DI mit Go
Suchen Sie mit numpy den kleinsten Index, der den kumulativen Summenschwellenwert erfüllt
Verbesserung der Wiederverwendbarkeit und Wartbarkeit von mit Luigi erstellten Workflows
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
Betreiben Sie Firefox mit Selen aus Python und speichern Sie die Bildschirmaufnahme
Finden Sie den Schnittpunkt eines Kreises und einer geraden Linie (Sympymatrix)
Was ich getan habe, als ich den Feature-Punkt mit dem optischen Fluss von opencv nicht finden konnte und als ich ihn verloren habe
[Abgeschlossene Version] Versuchen Sie, die Anzahl der Einwohner der Stadt anhand der Adressliste mit Python herauszufinden