[Matlab] - Könnt ihr mir diesen Code erklären?

Neue Frage »

bandchef Auf diesen Beitrag antworten »
[Matlab] - Könnt ihr mir diesen Code erklären?
Hi Leute!

Ich hab folgenden Matlab-Code vor mir:

A = [];

for it = 1:M
A = [A; x(it+M-1 : -1 : it)];
end


In meinem Programm hab ich M=2. Mein Vektor x sieht so aus:




Wie sieht nun die Matrix A nach dem Durchlauf der Schleife aus und was macht die Schleife genau dabei? Kann mir das jemand erklären?
Airblader Auf diesen Beitrag antworten »

Hallo,

Code bitte in die entsprechende Umgebung setzen:

code:
1:
2:
3:
4:
5:
A = [];

for it = 1:M
A = [A; x(it+M-1 : -1 : it)];
end


Die Schleife fügt an die Matrix A immer eine neue Zeile an, wobei diese Zeile aus Werten von x besteht, beginnend am Index it+M-1 bis zum Index it in Schritten von -1 (also "rückwärts").

Der Code ist übrigens sehr schlecht, da die Matrix ständig ihre Größe ändert und es daher zu einer ständigen Speicheralloziierung kommt. Matlab zeigt dir mit Sicherheit auch eine Warnung diesbezüglich an. Die Laufzeit des Programms wird dadurch drastisch erhöht. Besser wäre es, wenn du die Matrix mit

code:
1:
A = zeros(M, 0);


initialisierst, dann wird gleich genügend Speicher reserviert. Falls dir die Zeile innerhalb der Schleife noch nicht klar ist, so gib in Matlab einfach mal folgendes ein:

code:
1:
10 : -1 : 1


Das sollte dir zeigen, was es bedeutet. Wie genau die Schleife die Matrix verändert kannst du übrigens selber anschauen, indem du das Programm eben laufen lässt. Du kannst innerhalb der Schleife noch ein "A" nach dem Einfügen der neuen Zeile anfügen (ohne Semikolon!), dann gibt Matlab dir in jedem Schleifendurchlaus die Matrix aus. Alternativ das Programm schrittweise laufen lassen.

air
Airblader Auf diesen Beitrag antworten »

Schade, wenn man langjährige Mitglieder auf seine Antworte-ich-nicht-mehr-Liste setzen muss. Man sollte meinen, die wissen es besser. unglücklich

air
bandchef Auf diesen Beitrag antworten »

Hey airblader!

Danke für deine Antwort! Aber warum willst du mir nicht mehr antworten? Ich hab doch nichts verbrochen, oder? Falls es dir zu lange gedauert hat bis ich mich wieder zu Wort gemeldet habe, dann tut es mir leid. Es geht aber manchmal nicht anders :-(

Die Aufgabe hab ich mit deiner Hilfe übrigens gelöst und verstanden!

Danke!
tigerbine Auf diesen Beitrag antworten »

Zitat:
Die Aufgabe hab ich mit deiner Hilfe übrigens gelöst und verstanden!


Dann warst du in der Zwischenzeit doch on. Zeit für ein kleines Feedback sollte nach dem Lesen schon sein, zumindest entspricht es unserer Boardkultur. Augenzwinkern
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »