WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Einen Mittelwertvektor erzeugen

 

NNLab
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 11.10.11
Wohnort: Frankfurt am Main
Version: 7.12.0
     Beitrag Verfasst am: 13.01.2012, 14:37     Titel: Einen Mittelwertvektor erzeugen
  Antworten mit Zitat      
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.

Könnt ihr mir hierbei helfen?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Pinky
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 14.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2012, 15:28     Titel:
  Antworten mit Zitat      
Also ich bin mir nicht ganz sicher welchen Mittelwert du haben willst.

Die Vektoren kannst du ja ganz einfach addieren:
Code:
sumx = x1+x2+x3+x4;

Natürlich kannst du dann das ganze auch einfach durch eine Zahl teilen:
Code:
sumx = (x1+x2+x3+x4)/2000;


Allerdings ist das ja nicht der Mittelwert. Dafür gibt es ja eine eigene Funktion in MATLAB.

Code:


Wenn du also den mittleren Wert von jedem der 2000 Einträge haben willst solltest du etwas schreiben wie:
Code:
X=[x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14];
Mittelw = mean(X,2)


Dabei macht [] aus den einzelnen Vektoren eine Matrix X und mean(X,2) bildet den Mittelwert der Spalten.

gruß Pinky

P.S. wenn du natürlich die Vektoren die du in dem Vorherigen Thread behandelt hast benutzen willst, waäre folgendes einfach

Code:
X=zeros(20,N);
idx=202:221
for i=1:N
X(:,i)=diff(power1(idx))./diff(f1(idx));
end
Mittelwert=mean(X,2)
Private Nachricht senden Benutzer-Profile anzeigen
 
NNLab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 11.10.11
Wohnort: Frankfurt am Main
Version: 7.12.0
     Beitrag Verfasst am: 13.01.2012, 15:45     Titel:
  Antworten mit Zitat      
Hi Pinky dank dir für deine Antwort,

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pinky
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 14.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2012, 15:55     Titel:
  Antworten mit Zitat      
Hallo,

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
if mod(i,10)==0 % jeder 10. Messschritt
Mittelwert=mean(X,2) % Mittelwertbildung
end
end
 


gruß Pinky
Private Nachricht senden Benutzer-Profile anzeigen
 
NNLab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 11.10.11
Wohnort: Frankfurt am Main
Version: 7.12.0
     Beitrag Verfasst am: 13.01.2012, 16:04     Titel:
  Antworten mit Zitat      
Im Prinzip war deine erste Antwort genau das was ich will.
Nur falls möglich in einer schleife oder ähnlichem.

Und noch was zu den Messwerten.
Eine Messung ist ein Vektor von 2000x1, das sind nicht 2000 Messungen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pinky
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 14.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2012, 16:07     Titel:
  Antworten mit Zitat      
Du solltest versuchen dein Problem exakt zu Schildern, es ist sehr schwer zu verstehen was du willst.

Wenn ich jetzt richtig vermute, willst du zu jedem Zeitschritt den Mittelwert aller bisherigen Messungen?

In dem Fall musst du ja einfach nur die größe der Matrix X ändern, nämlich eine Spalte für jede Messung.

Es gibt da zwei möglichkeiten, die eine ist unelegant und langsam, die andere schneller. Erst die schlechte:
Code:

X = []; % Sagt Matlab, das X eine Matrix ist
for i=1:(Dauer der Messung)
X = [X,Messung];
end
Mittelwert = mean(X,2);
 


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);
 


Braucht natürlich mehr Arbeitsspeicher

gruß Pinky
Private Nachricht senden Benutzer-Profile anzeigen
 
NNLab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 11.10.11
Wohnort: Frankfurt am Main
Version: 7.12.0
     Beitrag Verfasst am: 13.01.2012, 16:28     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pinky
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 14.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2012, 16:30     Titel:
  Antworten mit Zitat      
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.

gruß Pinky
Private Nachricht senden Benutzer-Profile anzeigen
 
NNLab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 11.10.11
Wohnort: Frankfurt am Main
Version: 7.12.0
     Beitrag Verfasst am: 13.01.2012, 18:21     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Pinky
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 14.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2012, 22:59     Titel:
  Antworten mit Zitat      
Also wenn das Zahlen Matrizen sind, dann sollte es wie folgt gehen:
Code:

X=[Messung1,Messung2,Messung3,Messung4,Messung5,Messung6,Messung7,Messung8,Messung9,Messung10,Messing11,Messung12,Messung13,Messung14];
Mittelwert = mean(X,2)
 


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.

gruß Pinky
Private Nachricht senden Benutzer-Profile anzeigen
 
NNLab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 11.10.11
Wohnort: Frankfurt am Main
Version: 7.12.0
     Beitrag Verfasst am: 14.01.2012, 13:10     Titel:
  Antworten mit Zitat      
Hi Pinky,

mein eigentlich Problem ist es nicht so einen Code zu schreiben.
Das Problem liegt darin den Code übersichtlich zu schreiben, also aus:

Code:
X=[Messung1,Messung2,Messung3,Messung4,Messung5,Messung6,Messung7,Messung8,Messung9,Messung10,Messung11,Messung12,Messung13,Messung14];


sowas wie:

Code:
X=[Messung1:Messung14];


Nur das, das hier nicht funktioniert ...

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:

X=[Messung1,Messung2,Messung3, ..... Messung1000];

Dennoch danke ich dir für jede Hilfe Pinky.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.01.2012, 14:13     Titel:
  Antworten mit Zitat      
Hallo,

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?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
NNLab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 11.10.11
Wohnort: Frankfurt am Main
Version: 7.12.0
     Beitrag Verfasst am: 14.01.2012, 14:54     Titel:
  Antworten mit Zitat      
Nun das Programm mit dem ich die Messungen durchführe erstellt mir einen Vektor.

Also habe ich wohl keine möglichkeit als das Programm umzuschreiben?
Private Nachricht senden Benutzer-Profile anzeigen
 
Pinky
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 14.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2012, 15:11     Titel:
  Antworten mit Zitat      
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);
Private Nachricht senden Benutzer-Profile anzeigen
 
NNLab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 11.10.11
Wohnort: Frankfurt am Main
Version: 7.12.0
     Beitrag Verfasst am: 14.01.2012, 16:58     Titel:
  Antworten mit Zitat      
Mit dem von dir vorgeschlagenen Programm:

Code:
X=[Messung1,Messung2,Messung3,Messung4,Messung5,Messung6,Messung7,Messung8,Messung9,Messung10,Messung11,Messung12,Messung13,Messung14];

Mittelwert = mean(X,2)


hat es geklappt. Nur wollte ich es kleiner haben.
So das ich nur von MessungXY bis MessungYX verändern muss.

Oder meintest du diesen Code von dir:

Code:
X = zeros(2000,14);
for i=1:14
X(:,i) = Messung;
end
Mittelwert = mean(X,2);


der allerdings nicht funktioniert, und mir die Fehlermeldung

Zitat:
Undefined function or variable 'Messung'.

Error in schlftest (line 3)
X(:,i) = Messung;


auswirft. Allerdings kann ich bei "Messung" einsetzen was auch immer ich will, da kommt nichts dabei raus.

Achja, die Variable z.B Messung4
Valve <2000x1 double>

size(Messung4)

ans =

2000 1
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.