Matlab: Matrizen erstellen < Regelungstechnik < Ingenieurwiss. < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 18:02 Di 29.01.2008 | Autor: | lcdr |
Aufgabe | Matrizen erzeugen in Matlab nach einer vorgegebenen regelungstechnische Formel |
Hallo, ich flüchte mich meist vorm programmieren, aber nun muß ichs für ein Praktikum doch tun. Ich möchte in Matlab dynamisch Matrizen erzeugen. Die Matrix I soll die Einheitsmatrix sein. (Die Matrizen A, B, C sollen übrigens die System-, Steuer- und Beobachtungsmatrizen der diskreten Zustandsraumdarstellung sein, spielt aber für meine Frage keine Rolle, man kann sie als beliebige Matrizen annehmen)
F = C [mm] \pmat{ A \\ A^{2} \\ .. \\ .. \\ A^{n}}\\
[/mm]
G = C [mm] \pmat{ I \\ A * I \\ A^{2} + A + I \\ .. \\ .. \\ A^{n-1} + A^{n-2} + ... + I}B\\
[/mm]
Meine Frage: Wie programmiert man diese Ausdrücke in Matlab? Das geht doch sicher relativ einfach mit for oder while Schleifen. Ich komme aber leider nicht drauf. [mm] \\
[/mm]
Ich hab das Problem, wie man es programmiertechnisch hinkriegt, das sich automatisch je nach Wahl vom Index n immer wieder ein neues Element(das Element ist selbst ne Matrix) in die noch grössere Matrix F bzw. G einfügt. [mm] \\ [/mm] Kann mir da jemand mit Matlab Code behilflich sein? [mm] \\
[/mm]
Vielen Dank...... Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt
|
|
|
|
Hallo lcdr,
die zwei Bausteine, die du für die Lösung brauchst, lauten:
for i = 1:n % entspricht for i := 1 to n do
% d.h. i ist erst 1, dann 2 usw.
% baue Untermatrix i ein
end
und wenn [mm] $A_1$ [/mm] und [mm] $A_2$ [/mm] $2 [mm] \times [/mm] 2$-Matrizen sind, bauen folgende Zeilen die Matrix $F = [mm] \vektor{A_1 \\ A_2}$ [/mm] auf:
F(1:2, 1:2) = A1
F(3:4, 1:2) = A2
Entscheidend: Die Dimension von $F$ muss nicht vorher festgelegt werden, sie wird automatisch angepasst.
Jetzt müssen nur noch die Indizes in Abhängigkeit von $i $ ausgedrückt werden und die Potenzen von $A $ statt [mm] $A_i$ [/mm] eingesetzt werden (Die am einfachsten durch Multiplikation in jedem Schleifendurchlauf berechnet werden.)
Vor der Schleife kann es hilfreich sein, das alte $F $ mit
clear F;
aus dem Workspace zu löschen.
Wenn weitere Unklarheiten bestehen, melde dich einfach noch einmal.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 21:03 Do 31.01.2008 | Autor: | lcdr |
Hi, Rundfunk, danke für deine Mühe, aber du hattest die Aufgabe etwas falsch verstanden. Bei Index n handelt es um einen Exponenten, also [mm] A^{2} [/mm] = "A Quadrat" und [mm] A^{n} [/mm] = "A hoch n". Und wollte eigentlich so eine Matrix hinkriegen F= [mm] \pmat{ CA \\ CA^{2} \\ .. \\ .. \\ CA^{n}}. [/mm] Habs hingekriegt, der Code dafür lautet.
F = [];
for k = 1 : n
F(size(C * A^ n)*(n-1)+1 : size(C * A^ n)*(n) , : ) = C * A^ n;
[mm] end;\\
[/mm]
Aber nun eine andere Frage in dem Zusammenhang. Gibt es in Matlab einen Befehl, der Elemente einer Matrix löscht oder einfügt??
Also wenn z.b. gegeben
M = [mm] \pmat{ 1 & 2 \\ 3 & 4 \\ 5 & 6 } [/mm] und ich will dann genau von dieser Matrix M die letzte Zeile löschen bzw. in der obersten Zeile Nullen einfügen. Also diese Matrix M = [mm] \pmat{ 1 & 2 \\ 3 & 4} [/mm] bzw. die Matrix M = [mm] \pmat{ 0 & 0 \\ 1 & 2 \\ 3 & 4 \\ 5 & 6} [/mm] erhalten.
[mm] \\ [/mm] Wie macht man das in Matlab?? Sollte eigentlich ein Befehls für Löschen bzw. Hinzufügen von Elementen geben, oder?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:49 Fr 01.02.2008 | Autor: | Rundfunk |
Hallo lcdr,
ich habe verstanden, dass du die Beobachtbarkeitsmatrix aufbauen wolltest. (siehe Jetzt müssen nur noch [...] die Potenzen von $ A $ statt $ [mm] A_i [/mm] $ eingesetzt werden.) Allerdings wollte ich Hilfe zur Selbsthilfe und keine Lösung anbieten, was scheinbar erfolgreich war.
Zu deiner aktuellen Frage fällt mir auch nur das Umkopieren der Matrizen in eine neue Matrix mit gewünschter Form ein.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 10:17 Sa 02.02.2008 | Autor: | Infinit |
Hallo,
zumindest für das Löschen von Zeilen gibt es einen Befehl, indem man allen Elementen der k-ten Zeile ein Leerelement zuordnet. Das geht über
A(k,:) = []
Viele Grüße,
Infinit
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:12 Do 31.01.2008 | Autor: | lcdr |
Ach, nur der Vollständigkeit halber, kleiner Fehler oben beim Code. Es lautet [mm] \\ [/mm]
F = [];
for k = 1 : n
F(size(C * A^ k)*(k-1)+1 : size(C * A^ k)*(k) , : ) = C * A^ k;
end;
[mm] \\ [/mm] Grüsse lcdr
|
|
|
|