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

Problem mit for-Schleife

 

Beginner_mat
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 08.10.15
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 14.10.2015, 08:43     Titel: Problem mit for-Schleife
  Antworten mit Zitat      
Schönen guten Morgen!
Ich stehe vor einer kleinen Hürde. Ich habe nach meiner Einteilung in 151 Frames (ein Frame ist 62:20 groß) eine Variable "zwischensumme_druck" und "summe_druck" erschaffen.

Code:
alle_frames=a(1:22566,20);
 
ein_frame = cell(151,1); % Betrachte 151 Frames (von 150 bis 300 bzw. von Sekunde 1,5 bis 3)
for index=150:300
    ein_frame{index-149} = alle_frames(index*62+62:-1:index*62+1, 20);
end
 
zwischensumme_druck = zeros(62,20);
for index2 = 1:151
zwischensumme_druck = zwischensumme_druck+ein_frame{index2};
end
summe_druck = sum(sum(zwischensumme_druck));


So wie es jetzt dasteht, wird "zwischensumme_druck" immer größer und in "summe_druck" steht der aufsummierte Wert von allen 151 Frames. Ich möchte aber, dass "zwischensumme_druck" immer nur die Zwischensumme eines bestimmten Frames ist und danach abgelegt und nicht weiter verrechnet wird. Ich weiß aber nicht, wie das geht. Danach möchte ich nämlich je nach belieben mit "summe_druck" einen besitmmte "zwischensumme_druck" ausrechnen. Aber immer nur von einem Frame, nicht von allen zusammen. Also es müsste dann sowas wie
Code:
zwischensumme_druck(1)
zwischensumme_druck(2)
zwischensumme_druck(3) usw.

und genauso
Code:
summe_druck(1)
summe_druck(2)
summe_druck(3)

geben.

Wisst ihr was ich meine? Es ist glaube kein allzu großes Problem. Ich beherrsche aber die Werkzeuge nicht so gut. Deswegen weiß ich nicht weiter.

Danke für die Überlegungen!
Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.10.2015, 10:43     Titel: Re: Problem mit for-Schleife
  Antworten mit Zitat      
Hallo Beginner_mat,

Bitte erstelle nicht mehrere Threads für ein Problem.
Ich hatte ein paar Rückfragen gestellt, die Du bisher noch nicht beantwortet hast: http://www.gomatlab.de/zellen-in-vektor-t38918.html#155993 .

Zitat:
Ich stehe vor einer kleinen Hürde. Ich habe nach meiner Einteilung in 151 Frames (ein Frame ist 62:20 groß) eine Variable "zwischensumme_druck" und "summe_druck" erschaffen.

Immer noch sind die Ausdrücke "Frame" und "62:20" nicht geklärt. Bitte erkläre, was sie bedeuten.

Die Aufteilung in ein Cell-Array ist ausgesprochen unpraktisch, wenn Du hinterher doch einfache Operatoren darauf anwendest.

Wenn Du die Zwischensummen speicher möchtest:
Code:
zwischensumme_druck = zeros(1, 151);
for index2 = 1:151
  zwischensumme_druck(index2) = sum(ein_frame{index2});
end

Trotzdem bliebe es nach wie vor viel einfacher, Du würdest einfach mit einer Matrix rechnen, statt mit einem Cell-Vektor, der Vektoren enthält.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Beginner_mat
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 08.10.15
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 14.10.2015, 18:05     Titel: Zwischensumme
  Antworten mit Zitat      
Hi Jan,

tut mir leid, dass ich es zu unverständlich ausgedrückt habe. Also:
Ein Frame 1/100 Sekunde aus meiner Matrix a

Code:
alle_frames=a(1:22566,:)
.

Ich habe den Fußdruck beim Laufen von verschiedenen Probanden gemessen und in meiner Excel-Tabelle überprüft, dass ein Frame eine Matrix aus 62 Zeilen und 20 Spalten ist. Alle Frames sind untereinander in den 22566 Zeilen aufgelistet. Diese lese ich ein werte sie aus. Jeder einzelne Wert (z.b. Zeile 2392, Spalte 18) ist ein Druckwert eines Sensors einer Fußdruckmesssohle.

Das Cell-array ist ein externer Tipp, mit dem ich mich jetzt langsam angefreundet habe, der aber auch meiner Meinung nach etwas kompliziert ist. Denn damit kann man nicht so leicht weiterrechnen. Vielleicht probiere ich mal den "reshape"-Tipp aus. Mal sehen.

Dein letzter Tipp mit der Zwischensumme sieht einleuchtend aus. Eigentlich müsste er auch funktionieren. Aber es kommt ein Error:

Code:
In an assignment  A(I) = B, the number of elements in B and I must be the same.

Error in einlesen_plotten (line 40)
  zwischensumme_druck(index2) = sum(ein_frame{index2});


Denkt matlab, dass ein_frame nicht 1 bis 151 lang ist oder wo liegt das Problem?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Beginner_mat
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 08.10.15
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 15.10.2015, 21:38     Titel: Problem for-Schleife
  Antworten mit Zitat      
Hi,

habs rausgefunden. Mehr als einen Tag später ^^.
Mit
Code:
sum(ein_frame{index2});

erhält man nicht einen Wert, sondern einen Vektor... Weil sum aus einer Matrix nur einen Vektor macht. Ich muss noch ein "sum" davor packen, damit ich einen Wert habe. Sonst kann ich ja die "zeros(1, 151)" gar nicht ordnungsgemäß füllen.

Aber trotzdem danke. Sonst passt die Lösung!

Grüße,

Paul
Private Nachricht senden Benutzer-Profile anzeigen
 
Beginner_mat
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 08.10.15
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 16.10.2015, 14:15     Titel: Problem for-Schleife
  Antworten mit Zitat      
Ich komme wieder nicht weiter =/.

Hier mein Stand:
Code:
%% alle Frames einzeln %%
 
alle_frames=a(1:22566,:);
 
ein_frame = cell(151,1); % Betrachte 151 Frames (von 150 bis 300 bzw. von Sekunde 1,51 bis 3)
for index1=150:300
    ein_frame{index1-149} = alle_frames(index1*62+62:-1:index1*62+1, :);
end
 
%% Schwellenwert %%
 
drucksumme = zeros(1, 151);
for index2 = 1:151
  drucksumme(index2) = sum(sum(ein_frame{index2}));
end
if durcksumme>=5000
    """starte bei index1(durcksumme>=5000)"""
end


Ich möchte jetzt normieren, also dass die Auswertung nicht schon ab ein_frame{1} beginnt, sondern erst ab dem Frame, bei dem die drucksumme mindestens 5000 beträgt. Wie könnte das funktionieren? In den """""" hab ich meinen Gedanken festgehalten. Ich denke, dass man das jetzt vielleicht sogar in die allererste for-Schleife des Codes setzen muss. Weiß ich nicht genau. Kannst du mir helfen?

Liebe Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Beginner_mat
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 08.10.15
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 16.10.2015, 18:13     Titel: Problem mit for-Schleife
  Antworten mit Zitat      
Es funktioniert zwar nicht, aber ungefähr so könnte es wahrscheninlich aussehen:

Code:
ein_frame = cell(151,1); % Betrachte 151 Frames (von 150 bis 300 bzw. von Sekunde 1,51 bis 3)
drucksumme = zeros(1, 151);
for index1=150:300
    ein_frame{index1-149} = alle_frames(index1*62+62:-1:index1*62+1, :);
   
    for index2 = 1:151
        drucksumme(index2) = sum(sum(ein_frame{index2}));
    end
   
    if drucksumme<=5000
        ein_frame{index1}={};
    end
end


Danach könnte man dann noch sowas programmieren, womit alle "{}" rausgeworfen werden, oder so...

Kann mir jemand helfen und einen Tipp geben, wie es vielleicht funktioiniert?

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