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

Mittelwert der Vektoren unterschiedlicher Länge berechnen

 

Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2011, 15:47     Titel: Mittelwert der Vektoren unterschiedlicher Länge berechnen
  Antworten mit Zitat      
Hallo zusammen

ich habe hier ein Problem und mir fehlen die Ideen wie ich es mit Matlab lösen kann.
Ich habe x Messdaten. (nehmen wir bspw. 5)
Über diese Messdaten führe ich folgenden Befehl aus um mir die Peakser anzusschauen:
Code:
Fpks = cell(1, size(data, 2));
Flocs = cell(1, size(data, 2));
for k=1:size(data, 2)
[Fpks{k}, Flocs{k}] = findpeaks(yplot(:,k),'minpeakheight',0.001,'minpeakdistance',20);
end


Das Ergebniss ist dann entsprechend 2 Zellen der Dimension (1x5)
Jede dieser 5 Einträge hat gewisse Länge, die LEIDER variiert.
Beispiel:
Code:

Flocs{1,1} = 51    91   120   148   193   286   323   386   424
Flocs{1,2} = 52    90   120   148   192         325         424
Flocs{1,3] = 51    86   120   148   191         322   386
Flocs{1,4} = 51    86   120   148   191         321   385
Flocs{1,5} = 51    86   120   148   192   285   324         424
 

Nun möchte ich über jede Spalte den Mittelwert bilden. Das Problem ist aber dass die Vektoren nicht gleich lang sind und entsprechend falsche Werte zur Mittelwertbildung herangezogen werden.
Beispiel: Man achte auf die 6. Spalte: (286 +325+ 322 + 321+ 324) / 5) ( Zur besseren Darstellung habe ich durch Leerzeichen relevante Werte untereinander gebracht)

Hat jemand eine Idee wie ich den Mittlerwert für jede Spalte richtig berechnen kann?
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.02.2011, 16:32     Titel: Re: Mittelwert der Vektoren unterschiedlicher Länge berechn
  Antworten mit Zitat      
Kia hat Folgendes geschrieben:

Beispiel: Man achte auf die 6. Spalte: (286 +325+ 322 + 321+ 324) / 5)


Verstehe ich nicht, 6.Spalte hat doch nur 2 Werte? 286 285?
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2011, 16:46     Titel: Re: Mittelwert der Vektoren unterschiedlicher Länge berechn
  Antworten mit Zitat      
denny hat Folgendes geschrieben:
Kia hat Folgendes geschrieben:

Beispiel: Man achte auf die 6. Spalte: (286 +325+ 322 + 321+ 324) / 5)


Verstehe ich nicht, 6.Spalte hat doch nur 2 Werte? 286 285?


das ist genau der Punkt! ich habe es oben extra schön gemacht eigentlich sieht es so aus
Code:

Flocs{1,1} = 51    91   120   148   193   286   323   386   424
Flocs{1,2} = 52    90   120   148   192   325   424
Flocs{1,3] = 51    86   120   148   191   322   386
Flocs{1,4} = 51    86   120   148   191   321   385
Flocs{1,5} = 51    86   120   148   192   285   324   424
 


Die Vektoren haben keine Leerzeilen bzw. NaN! Ich müsste in etwa die Vektoren mit Leerzeilen ausfüllen und dann über jede Spalte den Mittelwert bilden. Dabei muss ich aber vorher erkennen welche Werte zueinander gehören und diese dann in einer Spalte zusammenführen
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.02.2011, 17:21     Titel:
  Antworten mit Zitat      
Ich habe was anderes gemeint, dein Beispiel ist verwirrend.

Ich habe folgende Idee, du suchst doch Peaks in mindestens 20 Schrittweite durch.
Also dann sollst du vielleicht die Ergebnisse auf so eine Schrittweite in Matrix aufteilen
so:
Code:

max_val   =  max(cellfun(@max,Flocs));
max_col   =  floor(max_val/20)+1;
max_row   =  length(Flocs);
M         =  nan(max_row,max_col);

for k=1:length(Flocs)
   col     = floor(Flocs{k}/20)+1;
   M(k,col)= Flocs{k};
end
 


Jetzt hast du die Matrix mit gleichlangen Vektoren, also ich denke das hilft dir schon weiter.
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2011, 19:44     Titel:
  Antworten mit Zitat      
Hallo Denny,

mal wieder 1000Dank für deine tolle Tipps, damit komme ich weiter, dennoch kann ich als Anfänger deine Schleife nicht nachvollziehen! Ich wäre dir sehr dankbar , wenn du mir erklären würdest, was du mit der NaN-Matrix machst Very Happy

außerdem habe ich das Problem dass ich Median nur über jene Spalten berechnen kann, die ausschließlich aus Werten bestehen. Gibt es eine Möglichkeit median auch dann zu berechnen, wenn in einer Spalte auch NaN vorkommt?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.02.2011, 12:17     Titel:
  Antworten mit Zitat      
Hallo Kia

Code:

% suche nach maximalen Wert zur Bestimmung
% der Spaltenanzahl
max_val   =  max(cellfun(@max,Flocs));
%
% letzte Spalte in der Matrix wird berechnet
% in dem der Wert durch die Schrittweite teilt
max_col   =  floor(max_val/20)+1;

% maximale Anzahl Zeilen
max_row   =  length(Flocs);
%
% vorinitialisieren der Matrix
M         =  nan(max_row,max_col);

% in der Schliefe werden die Werte
% der Spalten zugeordnet
for k=1:length(Flocs)
% Spalten Indizien werden berechnet
% in dem man die Werte  
% durch die Schrittweite teilt
   col     = floor(Flocs{k}/20)+1;

% Eintragen in der Matrix
   M(k,col)= Flocs{k};
end
 


Um den Median mit NANs zu berechnen, kann
man NANMEDIAN nutzen, falls du Statistik Toolbox hast

sonst muss man es selbst programmieren über ISNAN und FOR-Schleife
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2011, 14:04     Titel:
  Antworten mit Zitat      
Besten Dank für den Tipp und die Erklärung!
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2011, 11:37     Titel:
  Antworten mit Zitat      
Ich habe ein Rückfrage weil ich mit dem vorgeschlagenen Code durchaus auch Fehlermeldungen bekomme. Mein Programm sieht nun wie folgt aus:

Code:
% finding peaks and locations
MPD=20;         % minimum distance between two maximas
MPH=0.003;      % miminum height of local maximas

%Looking for maximas in variable data with above conditions
Fpks = cell(1, size(data, 2));   % Pre-allocate!
Flocs = cell(1, size(data, 2));  % Pre-allocate!

for k=1:size(data, 2)
[Fpks{k}, Flocs{k}] = findpeaks(yplot(:,k),'minpeakheight',MPH,'minpeakdistance',MPD);
end

% Creating of Matrix M1 with the results of findpeaks
max_val   =  max(cellfun(@max,Flocs));  % searching for maximum value to calculate the number of column
max_col   =  floor(max_val/MPD)+1;       % calculating the last column
max_row   =  length(Flocs);              % calculating of maximum number of rows
M1        =  nan(max_row,max_col);       % creating a NaN-Matrix

% Calculating the index of the matrix
for k=1:length(Flocs)
   col      = floor(Flocs{k}/MPD)+1;
   M1(k,col)= Flocs{k};                   % put it in to the matrix
end
 


Wenn ich bei unten dargestellten Code die Peakhöhe bisschen hoch eintrage, sodass nicht für jede Messreihe minds. ein Peak gefunden wird bekomme ich folgende Fehlermeldung
Zitat:

Warning: No peaks found.
> In findpeaks at 90
In FrqAnalyse at 10

??? Error using ==> cellfun
Non-scalar in Uniform output, at index 2, output 1.
Set 'UniformOutput' to false.

Error in ==> FrqAnalyse at 14
max_val = max(cellfun(@max,Flocs)); % searching for maximum value to
calculate the number of column

ich vermutte dass es daran liegt, dass das Programm das Maximum bei jenen Zellen von "Flocs" nicht bestimmen kann, in denen keinen Eintrag, also eine Leermatrix, vorhanden ist.

Sofern meine Vermuttung richtig ist, würde ich gerne wissen, wie ich dieses Problem umgehen kann!?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 14.02.2011, 14:45     Titel:
  Antworten mit Zitat      
Hallo

versuch mal zu ersetzen, diese
Code:

max_val   =  max(cellfun(@max,Flocs));
 


durch diese
Code:
max_val   = max(vertcat(Flocs{:}))
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.