In XProfan X4 fehlen eine Reihe von Matrix- und Vektorfunktionen, obwohl mit der MAT-Anweisung schon einige Funktionen verfügbar sind. Programmiert man eine Matrixmultiplikation mit Profan-Befehlen steigen die Rechenzeiten exorbitant an. Damit kann man nur kleine Matrizen bearbeiten.
Dank des Inline-Assemblers kann man diese Operationen aber in praktikabler Zeit ausführen. Die angefügten Prozeduren leisten:
1. Skalarprodukt zweier Vektoren
2. Vektornorm
3. Determinante einer quadratischen Matrix
4. Lösung eines linearen Gleichungssystems
5. transponieren einer Matrix
6. echte Multiplikation zweier Matrizen
7. echte Multiplikation zweier quadratischer Matrizen (braucht weniger Parameter als 6.)
8. Multiplikation einer quadratischen Matrix mit einem Vektor
9. Inverse einer quadratischen Matrix
10. Zeilenvektor einer quadratischen Matrix
10. Spaltenvektor einer quadratischen Matrix
Damit können auch relativ große Matrizen (Dimension im 3-stelligen Bereich) bearbeitet werden.
Mit meinem Rechner (Intel i7 12700K) werden zwei Matrizen der Dimension 1000 x 1000 in 1,6 s multipliziert. Die Lösung eines Gleichungssystems mit 1000 Gleichungen und 1000 Unbekannten dauerte 567 ms (alles Momentanwerte aus einem Durchlauf). Die Berechnung der inversen Matrix brauchte 38 s.
Für die Dimension 100 x 100 betragen die Werte: Matrizenmultiplikation: < 10 ms; lineares Gleichungssystem: 16 ms; Inverse Matrix: 377 ms (ebenfalls nur ein Durchlauf).
Ich habe ein kleines Demo-Programm beigefügt. In der zugehörigen Include-Datei sind u.a. Routinen zur Ausgabe von Matrizen und Vektoren enthalten.
Noch eine Anmerkung zum Inline-Assembler. Der Einsatz bietet sich immer dort an, wo Daten für Berechnungen in den Registern des Prozessors gehalten werden könne und wo Schleifen abzuarbeiten sind. Beides ist in den obigen Funktionen der Fall.
Gruß
Arndt