[phpBB Debug] PHP Warning: in file [ROOT]/ext/kinerity/bestanswer/event/main_listener.php on line 514: Undefined array key "poster_answers" Matrix- und Tensor-Objekte höherer Stufe für numerische Simulationen - Deutsches Wikipedia-Forum
Die Entwicklung der objektorientierten Analyse und Modellierung hat bedeutenden Einfluss auf die Anwendungen der kooperativen Planung und Konstruktion des Ingenieurwesens
bis hin zur gegenwärtigen Produkt- und Bauwerkinformationsmodellierung (BIM) Dabei spielen speziell numerische Modelle für die Simulation von physikalischen Vorgängen in der Festkörper-
und Strömungsmechanik eine entscheidende Rolle für das Verständnis komplexer Wechselwirkungen in Natur und Technik. Im Allgemeinen werden die physikalischen Grundlagen mit den Methoden der Tensoranalysis, des Matrixkalküls und der numerischen Programmstrukturen in zuverlässige Algorithmen unterschiedlicher Approximationsmethoden, wie z. B. die Differenzen- oder Finite-Elemente-Methoden
Dabei sind Algorithmen in objektorientierten Strukturen von hoher Relevanz, weil durch die zugrunde liegenden Paradigmen der Kapselung und der Vererbung die Transparenz der Formulierung und die Zuverlässigkeit der Methoden abgesichert und die Kommunikation mit den Objekten eindeutig definiert wird. So eröffnet vor allem die Objektorientierung neue Möglichkeiten, die theoretischen Grundlagen der Tensoranalysis mit den numerischen Vorteilen des Matrixkalküls und den Algorithmen der Rechenprogramme zu einer methodischen Einheit zu verknüpfen.
Denn die klassische Matrizenrechnung : C_{ikl} = A_{ikl}+ B_{ikl} bzw. '''C''' = '''A''' + '''B'''
oder
: f^{ilk} = k^{isl} * {v^k}_s bzw. '''f''' ≠ '''k''' * '''v'''^T
und bei dem die symbolische Matrixnotation leider versagt.
Durch das objektorientierte Klassenkonzept hingegen werden geeignete Strukturen für neue Tensor- und Matrixklassen geschaffen, die es ermöglichen, indexbasierte Matrixoperationen für mehrdimensionale Matrizen zu definieren, um die Matrizenrechnung auf Objekte höhere Stufe zu verallgemeinern und die Nomenklatur von Tensoren, Matrizen und Feldern zu vereinheitlichen. Dabei stärkt auch das Überladen der arithmetischen und funktionalen Standardoperatoren für die Matrixobjekte die Benutzerfreundlichkeit der Schnittstellen in ganz erheblichem Maße.
Der vorliegende Beitrag verdeutlicht dieses bewährte Konzept in den nachfolgenden Kapiteln mittels überschaubarer Beispiele der linearen Algebra anhand von übersichtlich gegliederten Prototypen der Programmstrukturen. Damit werden die Abläufe in transparenter Weise nachvollziehbar dargestellt und numerisch verifiziert. Die Methoden der objektorientierten Programmierung sind in
== Matrixobjekte und überladene Operatoren ==
Es wird im folgenden davon ausgegangen, dass '''''Matrizen 2. Stufe''''' ''spaltenweise'' gespeichert werden, wie das in naturwissenschaftlich-technischen Anwendungen und algorithmischen Programmiersprachen - wie FORTRAN - üblich ist.
Dabei läuft der erste Index i über die Zeilen und der zweite Index k über die Spalten der Matrix M_{ik}.
Die ''interne Speicherung'' in Matrixobjekten erfolgt durch Zuweisung der Matrixelemente in sequentieller Reihenfolge zu einem eindimensionalen Vektorfeld:
wie es auch intern auf von Neumann-Rechnerarchitekturen geschieht. .
Die entsprechenden ''bijectiven Abbildungen'' erfolgen durch die Vorschriften für
die Abbildung
V_{z} := M\underbrace{_{ik_z
durch die Zuordnung z = k * N_{i} + i
,
und die Rückabbildung
M\underbrace{_{ik_z := V_{z}
durch die Zuordnungen k = \text{Entier}(z/N_{i}) und i = z - k * N_{i} .
Der ''Deskriptor'' des Objektes für die Darstellung der Matrix ist offenbar unabhängig von der internen sequenziellen Speicherung der Elemente und steuert lediglich nach außen die spezielle Darstellung der Matrixform.
Reduziert man die Matrix \mathbf{M} auf eine einzelne Zeile, so entsteht ein Zeilenvektor M_{0k} , entsprechendes gilt für einen Spaltenvektor M_{i0} . Daraus erkennt man, dass es bei der ''Indexschreibweise'' möglich ist, in die Nomenklatur ''0-Indizes'' einzufügen, ohne dadurch die Speicherung von Vektoren oder Matrizen zu ändern.
Dies gilt auch für den Vektor
V_{z} := V_{0z} := V_{z0}
wie auch für beliebige Matrizen:
M_{ik} := M_{0ik} := M_{i0k} := M_{ik0} .
Über den '''''Konstruktor''''' M(N_i,N_k,N_l,N_m) wird in objektorientierter Weise die mathematische Grundform auf '''''Matrizen höherer Stufe''''' erweitert und durch die Wahl der Dimensionen festgelegt. Zulässig sind zunächst bis zu vier Dimensionen, die für ingenieurmäßige Anwendungen in der Regel ausreichen, zumal auch mehrere benachbarte Indizes mittels der obigen Abbildungen zusammengefasst werden können, wovon im Programmcode Gebrauch gemacht wird.
Anhand des folgenden C++ Programmbeispiels wird zuerst erläutert, wie die neuen '''''Matrizenklassen''''' semantisch aufgebaut sind, um entsprechende Matrixobjekte (''Instanzen'') zu erzeugen und diese mit einer ''indexbasierten Arithmetik'' mittels ''überladener Standardoperatoren'' syntaktisch zu verarbeiten. Mit den Konstruktoren der Klassen '''''Vektor, MATRIX, delta_MATRIX, e_MATRIX''''' können ''statische'' oder ''dynamische'' Objekte mit Elementen vom Typ ''double'' erzeugt werden. Über ein Feld (array) in Notation der Programmiersprache C ist es auch möglich, die Vektor- und Matrixelemente mit Zahlenwerten vorzubelegen. Die Ein-/Ausgabe erfolgt über die überladenen Standardoperatoren ''>>'' bzw. ''
[h4] Die Entwicklung der objektorientierten Analyse und Modellierung hat bedeutenden Einfluss auf die Anwendungen der kooperativen Planung und Konstruktion des Ingenieurwesens bis hin zur gegenwärtigen Produkt- und Bauwerkinformationsmodellierung (BIM) Dabei spielen speziell numerische Modelle für die Simulation von physikalischen Vorgängen in der Festkörper- und Strömungsmechanik eine entscheidende Rolle für das Verständnis komplexer Wechselwirkungen in Natur und Technik. Im Allgemeinen werden die physikalischen Grundlagen mit den Methoden der Tensoranalysis, des Matrixkalküls und der numerischen Programmstrukturen in zuverlässige Algorithmen unterschiedlicher Approximationsmethoden, wie z. B. die Differenzen- oder Finite-Elemente-Methoden Dabei sind Algorithmen in objektorientierten Strukturen von hoher Relevanz, weil durch die zugrunde liegenden Paradigmen der Kapselung und der Vererbung die Transparenz der Formulierung und die Zuverlässigkeit der Methoden abgesichert und die Kommunikation mit den Objekten eindeutig definiert wird. So eröffnet vor allem die Objektorientierung neue Möglichkeiten, die theoretischen Grundlagen der Tensoranalysis mit den numerischen Vorteilen des Matrixkalküls und den Algorithmen der Rechenprogramme zu einer methodischen Einheit zu verknüpfen.
Denn die klassische Matrizenrechnung : C_{ikl} = A_{ikl}+ B_{ikl} bzw. '''C''' = '''A''' + '''B''' oder : f^{ilk} = k^{isl} * {v^k}_s bzw. '''f''' ≠ '''k''' * '''v'''^T und bei dem die symbolische Matrixnotation leider versagt. Durch das objektorientierte Klassenkonzept hingegen werden geeignete Strukturen für neue Tensor- und Matrixklassen geschaffen, die es ermöglichen, indexbasierte Matrixoperationen für mehrdimensionale Matrizen zu definieren, um die Matrizenrechnung auf Objekte höhere Stufe zu verallgemeinern und die Nomenklatur von Tensoren, Matrizen und Feldern zu vereinheitlichen. Dabei stärkt auch das Überladen der arithmetischen und funktionalen Standardoperatoren für die Matrixobjekte die Benutzerfreundlichkeit der Schnittstellen in ganz erheblichem Maße.
Der vorliegende Beitrag verdeutlicht dieses bewährte Konzept in den nachfolgenden Kapiteln mittels überschaubarer Beispiele der linearen Algebra anhand von übersichtlich gegliederten Prototypen der Programmstrukturen. Damit werden die Abläufe in transparenter Weise nachvollziehbar dargestellt und numerisch verifiziert. Die Methoden der objektorientierten Programmierung sind in == Matrixobjekte und überladene Operatoren == Es wird im folgenden davon ausgegangen, dass '''''Matrizen 2. Stufe''''' ''spaltenweise'' gespeichert werden, wie das in naturwissenschaftlich-technischen Anwendungen und algorithmischen Programmiersprachen - wie FORTRAN - üblich ist.
Dabei läuft der erste Index i über die Zeilen und der zweite Index k über die Spalten der Matrix M_{ik}.
Die ''interne Speicherung'' in Matrixobjekten erfolgt durch Zuweisung der Matrixelemente in sequentieller Reihenfolge zu einem eindimensionalen Vektorfeld:
wie es auch intern auf von Neumann-Rechnerarchitekturen geschieht. .
Die entsprechenden ''bijectiven Abbildungen'' erfolgen durch die Vorschriften für
die Abbildung
V_{z} := M\underbrace{_{ik_z durch die Zuordnung z = k * N_{i} + i ,
und die Rückabbildung
M\underbrace{_{ik_z := V_{z} durch die Zuordnungen k = \text{Entier}(z/N_{i}) und i = z - k * N_{i} .
Der ''Deskriptor'' des Objektes für die Darstellung der Matrix ist offenbar unabhängig von der internen sequenziellen Speicherung der Elemente und steuert lediglich nach außen die spezielle Darstellung der Matrixform.
Reduziert man die Matrix \mathbf{M} auf eine einzelne Zeile, so entsteht ein Zeilenvektor M_{0k} , entsprechendes gilt für einen Spaltenvektor M_{i0} . Daraus erkennt man, dass es bei der ''Indexschreibweise'' möglich ist, in die Nomenklatur ''0-Indizes'' einzufügen, ohne dadurch die Speicherung von Vektoren oder Matrizen zu ändern.
Dies gilt auch für den Vektor V_{z} := V_{0z} := V_{z0} wie auch für beliebige Matrizen: M_{ik} := M_{0ik} := M_{i0k} := M_{ik0} .
Über den '''''Konstruktor''''' M(N_i,N_k,N_l,N_m) wird in objektorientierter Weise die mathematische Grundform auf '''''Matrizen höherer Stufe''''' erweitert und durch die Wahl der Dimensionen festgelegt. Zulässig sind zunächst bis zu vier Dimensionen, die für ingenieurmäßige Anwendungen in der Regel ausreichen, zumal auch mehrere benachbarte Indizes mittels der obigen Abbildungen zusammengefasst werden können, wovon im Programmcode Gebrauch gemacht wird.
Anhand des folgenden C++ Programmbeispiels wird zuerst erläutert, wie die neuen '''''Matrizenklassen''''' semantisch aufgebaut sind, um entsprechende Matrixobjekte (''Instanzen'') zu erzeugen und diese mit einer ''indexbasierten Arithmetik'' mittels ''überladener Standardoperatoren'' syntaktisch zu verarbeiten. Mit den Konstruktoren der Klassen '''''Vektor, MATRIX, delta_MATRIX, e_MATRIX''''' können ''statische'' oder ''dynamische'' Objekte mit Elementen vom Typ ''double'' erzeugt werden. Über ein Feld (array) in Notation der Programmiersprache C ist es auch möglich, die Vektor- und Matrixelemente mit Zahlenwerten vorzubelegen. Die Ein-/Ausgabe erfolgt über die überladenen Standardoperatoren ''>>'' bzw. ''
Die Vuelta A España von 1947 war die 7. Ausgabe von Vuelta A España, einer der Grand Tours von Cycling. Die Tour begann in Madrid am 12. Mai und Stufe 13 trat am 25. Mai mit einer Bühne nach Reinosa...
Die Vuelta A España von 1947 war die 7. Ausgabe von Vuelta A España, einer der Grand Tours von Cycling. Die Tour begann am 12. Mai in Madrid und Stufe 14 ereignete sich am 26. Mai mit einer Bühne von...
Die 1948 Vuelta A España war die 8. Ausgabe von Vuelta A España, einer der Grand Tours von Cycling. Die Tour begann in Madrid mit einem prolog individuellen Zeitfahren am 13. Juni und Stufe 10 fand...
Die 1948 Vuelta A España war die 8. Ausgabe von Vuelta A España, einer der Grand Tours von Cycling. Die Tour begann in Madrid mit einem prolog individuellen Zeitfahren am 13. Juni, und am 23. Juni...