Verfasst am: 13.01.2012, 14:37
Titel: Einen Mittelwertvektor erzeugen
Hallo Leute,
hab mal wieder eine Frage zu einem neuen Problem.
Ich habe 14 Vektoren (x1, x2, ... x14) mit jeweils 2000x1.
Will nun diese Vekoren zusammen addieren.
Also den ersten Wert mit dem 1. Wert der anderen Vektoren usw. und das dann durch 2000 teilen so das ich einen Mittelwertvektor mit 2000x1 bekomme.
aber dies hilft mir nicht weiter.
Ich habe mich aber auch nicht so deutlich ausgedrückt.
Die Vektoren, die ich aufsummieren und daraus den Mittelwert bilden will sind Messwerte.
Da ich aber immer wieder neue Messwerte machen will brauch ich was Schnelleres, so das ich höchstes in der Schleife ändere wieviel Vektoren ich erfassen will.
ich bin mir nicht sicher was du genau willst.
Wenn du den Mittelwert von Messwerten bestimmen willst, solltest du doch eigentlich alle nehmen oder?
Du kannst natürlich auch einfach den Mittelwert der letzten 10 Messungen bilden, allerdings bin ich mir nicht sicher, ob das Sinn macht.
Also einmal angenommen, bei jedem Schritt deiner Messung kommt ein Vektor der Länge 2000x1 hinzu und du willst alle 10 Schritte den Mittelwert bilden dann sollte das Am besten so gehen:
Code:
X = zeros(2000,10)% Diese Matrix speichert 10 Messungen for i=1:Dauer % Die Schleife geht über alle Messschritte
X(:,1) = Messung; % speichert die aktuelle Messung in der Matrix in Spalte 1
X = circshift(X,[0,1])% schiebt die Spalten eins nach rechts damit wird im nächsten Schritt die Messung von vor 10 Schritten überschrieben ifmod(i,10)==0% jeder 10. Messschritt
Mittelwert=mean(X,2)% Mittelwertbildung end end
Das ist SEHR schlecht, weil Matlab jedes mal die Matrix X komplett neu in den Speicher einliest, was das ganze ungemein ausbremst. Besser ist, wenn du weißt, wie viele Messungen du hast, dann kannst du den Speicherplatz im Voraus belegen:
Code:
X = zeros(2000,#Messungen);
for i=1:#Messungen
X(:,i) = Messung;
end
Mittelwert = mean(X,2);
Endschuldige mich bitte, wenn ich mich falsch ausdrücke.
So noch einmal:
Ich habe 14 Messungen gemacht, das sind 14 Vektoren mit jeweils 2000x1.
Nun will ich diese 14 Vektoren zusammenaddieren sodass ich einen einzigen
Gesammtvektor mit 2000x1 habe, und hier nun jeden einzelnen Zahlenwert des Vektors mit 14 dividiere, sodas ich nun einen neuen "Mittelwertvekort" habe.
PS: Merke gerade das ich mich beim ersten Beitrag falsch ausgedrückt habe.
Im ersten Beitrag schrieb ich das der Gesammtvektor mit 2000 dividiert werden soll, dies stimmt nicht, 14 wäre die richtige Zahl.
Dir ist schon klar, das der mean Befehl nichts anderes macht als die Elemente einer Zeile/Spalte zu summieren und dann durch die Anzahl der Elemente zu teilen?
Dementsprechend gibt dir der Code genau das was du wolltest.
Ok hab da jetzt ein bisschen rumprobiert mit deinem Code aber bekomme da nichts brauchbares raus.
Vielleicht verstehe ich nur nicht wie ich meine bezeichnungen da reinsetze.
Kannst du mir bitte Helfen?
In meinem Workspace sind die vektoren mit der Bezeichnung
Messung1, Messung2, ... Messung14
Das gibt dir den Mittelwert deiner Messung aus. Allerdings NUR wenn es auch Matrizen sind, nicht wenn es zum Beispiel Cell Arrays sind. Das siehst du im Workspace, da steht welches Format deine Daten haben.
Wichtig sind die Grundprinzipien. Deine Messungen sind 2000x1 Matrizen.
Der Befehl [Messung1,Messung2] macht aus 2 Vektoren der Form 2000x1 eine Matrix der Form 2000x(1+1)=2000x2.
Sollten deine Vektoren aber der Form 1x2000 sein, müsstest du die Kommata durch Semicolons ersetzen und mean(X,1) benutzen.
Wichtig ist immer genau zu sagen, womit du arbeitest. Woher kommen deine Vektoren Messung1-Messung14, welches Format haben sie, welchen Code hast du benutzt und welche Fehlermeldung hat MATLAB ausgespuckt? Aus einem "hat nicht geklappt" kann ich wenig schließen und du lernst auch nichts, wenn du den Fehler nicht erkennst.
Ich bin momentan am Testen und es ist noch relativ übersichtlich, doch später werde ich über 1000 Messungen benötigen.
Und dann kann ich nicht sowas schreiben:
wie bereits im anderen Thread geschrieben: du solltest von vorneherein vermeiden, dass du so viele Variablen hast. Warum schreibst du nicht von Anfang an die Daten in eine große Matrix, statt für jede Messung eine einzelne Variable zu erstellen?
Versuch es doch bitte einmal mit dem von mir vorgeschlagenen Programm. Dann poste HIER deinen von dir verwendeten Code und die Fehlermeldung die auftritt. Zusätzlich kannst du auch gerne die Variablen des Workspace angeben.
Wie gesagt, es ist unmöglich dir zu helfen wenn du nicht genau sagst, was der Fehler ist und wo er aufgetreten ist. Je mehr Daten wir haben desto eher können wir dir helfen.
Wenn du dir unsicher bist kannst du auch mit size() die Größe eines Vektors abfragen, es macht ja einen großen Unterschied ob er 2000x1 oder 1x2000 ist. Auch der genaue Datentyp ist wichtig.
gruß Pinky
P.S. Die Messungen müssen ja irgendwie in Matlab rein. Wie ist eigentlich egal, aber du wirst immer etwas wie Messung1=Funktion(x,y); stehen haben. Das kannst du auch ersetzen durch X(:,i)=Funktion(x,y);
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.