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

Messwerte aus Matrix weiterverarbeiten

 

Haselbacher
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 08.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 14:43     Titel: Messwerte aus Matrix weiterverarbeiten
  Antworten mit Zitat      
Hallo Leute,

ich hoffe, dass mein Thema hier richtig ist. Ansonsten bitte einfach ignorieren oder verschieben.

Mein Problem:

Ich habe nach Versuchen eine 2xn Matrix mit meinen Daten. Druck und Weg.
In etwa so: A[0.2 0.4 0.4 0.2 0.4 0.4 0.4 0.6 0.4; 60 120 180 240 300 360 420 480 540]

Nun möchte ich mir die Drücke ohne Schwingungen anschauen und dazu den Mittelwert des Weges bilden. Die Bereiche mit den Schwingungen können einfach ignoriert werden.

Bei diesem Beispiel den Wert 0.4 zum Beispiel. Ich möchte nun nur die Werte, bei denen sich der Druck nicht verändert. Also die Werte vom ersten 0.4 nachdem kein Wert 0.2 mehr kommt, bis zum letzten 0.4, bevor der Wert 0.6 annimmt. Von diesen ermittelten Werten möchte ich dann den Mittelwert der zugehörigen Werte der 2ten Zeile bilden.

Ich hab ein paar Sachen ausprobiert, aber irgendwie hab ich nicht das Gefühl, dass ich mich vorwärts bewege mit meinen Überlegungen…
Ich hoffe ich konnte einigermaßen genau erklären, wo mein Problem liegt.

Wäre super wenn Ihr mir helfen könntet!

Vielen Dank schon mal!!!
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.11.2011, 15:19     Titel:
  Antworten mit Zitat      
Code:
clear
A=[0.2 0.4 0.4 0.2 0.4 0.4 0.4 0.6 0.4; 60 120 180 240 300 360 420 480 540] ;
[a b]=size(A);
n=1;
for k=2:b-1
    if A(1,k)==A(1,k+1) || A(1,k)==A(1,k-1)
       B(1,n)=A(2,k);
       n=n+1;
    end
end

sowas in der art?
Private Nachricht senden Benutzer-Profile anzeigen
 
Haselbacher
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 08.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 17:55     Titel:
  Antworten mit Zitat      
Hey,

Danke schon mal für deine schnelle Antwort. Allerdings soll das Programm erst ab dem 3ten Wert von 0.4 anfangen zu zählen, da vorher der Druck nochmal auf 0.2 fällt. Das heißt ich möchte als Ergebnis nur A(1, 5:7) bekommen.
Ich möchte im Endeffekt die längste Abfolge von gleichen Werten (für jeden möglichen Druck) herausfinden und zu diesen dann die Mittelwerte berechnen.

Meine Überlegung war, mit „find“ die Stellen zu ermitteln, an denen meine gesuchten Werte liegen und dann zu vergleichen, wie viele „Stellen“ zwischen den Werten liegen. Alles außer „1“ ist nicht brauchbar. Und dann den Bereich mit den meisten zusammenliegenden „1ern“ ermitteln und aus diesem dann den Mittelwert des Weges ermitteln.

Ich bin mir allerdings nicht sicher, ob das nicht ein bisschen zu kompliziert gedacht ist. Davon abgesehen, dass ich noch nicht weiß, wie ich es realisieren soll…
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2011, 13:36     Titel:
  Antworten mit Zitat      
Ich habs jetzt soweit hinbekommen, wie ich mir des vorgestellt hab.

Allerdings habe ich jetzt das Problem, dass das Ganze auf einer Autobox laufen muss, was mich grade vor neue Probleme stellt, weil ich da doch sehr mit dem Speicherplatz Probleme hab und meine eigentliche Idee nichtmehr funktioniert.

Falls jemand Tipps und Tricks zum Umgang mit Autobox hat, immer melden!!!

Hier mal was ich verbrochen hab. evtl kanns ja später mal jemand brauchen. Ich denk, es ist ein bisschen umständlich und sollte auch einfacher gehen. Aber so funktioniert es schonmal...


Code:
load test001.mat %meine Daten
A=test001.Y(1,1).Data(1:end);
B=test001.Y(1,2).Data(1:end);
i=1;
j=1;
z=1;
Alength=length(A);
Anfang=[];
 
 
Q=diff(A);
 
Steigung_pos=find(Q>0);
pos_length=length(Steigung_pos);
 
 
Steigung_neg=find(Q<0);
neg_length=length(Steigung_neg);
 
while i:pos_length-1
   
    POS1=Steigung_pos(i);
    POS2=Steigung_pos(i+1);
   
    for j=1:neg_length-1
       
        NEG1=Steigung_neg(j);
        NEG2=Steigung_neg(j+1);
       
        if POS1>NEG1 && POS2<NEG2
 
        Anfang(z)=POS1+1;
        Ende(z)=POS2;
       
        z=z+1;
        else
     

        end
       j=j+1;
    end
   
  i=i+1;
   
end
 
i=1;
Anfang_length=length(Anfang);
 
 
% Mittelwert bilden
while i:Anfang_length
   
   Temp = Anfang(i):Ende(i);
   Temp2 = B(Temp);
   Temp2_length = length(Temp2);
   
   Mittelwert(i) = sum(Temp2) / Temp2_length;
   length_Mittelwert = length(Mittelwert);

   
 
    i=i+1;
end
 
%plotten
EndePlot = 0.2+0.2*length_Mittelwert;
Funktion = [Mittelwert; 0.4:0.2:EndePlot]
plot(Mittelwert(1:end), 0.4:0.2:EndePlot)
 
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2011, 19:50     Titel:
  Antworten mit Zitat      
hallo Haselbacher,

was soll denn passieren, wenn mehrere Abschnitte die gleiche Länge haben?

Aber hier erst mal eine Lösung:
Code:
druecke=cell2mat(arrayfun(@(x[x;mean(longest(A,x))],unique(A(1,:)),'UniformOutput',false))

function values=longest(A,v)
x=find(A(1,:)~=v);
[l,p]=max([x size(A,2)]-[0 x]);
values=A(2,x(p)-l+1:x(p)-1);
end


Grüße
Sirius
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.