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

Aufsummieren von Variablen in einer Schleife

 

Kat
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.05.12
Wohnort: Leipzig
Version: ---
     Beitrag Verfasst am: 09.05.2012, 16:53     Titel: Aufsummieren von Variablen in einer Schleife
  Antworten mit Zitat      
Hallo,
ich schreib grad an einem Programm, was aus einem Textfile was auslesen und in einen anderen speichern soll. Es soll das Originalfile x-mal teilen (immer vom Anfang aus gehend). Leider entstehen grad zwei Fehler:
1.) Warum summiert A(k,1)=sum(b) die b-Werte aller Schleifendurchläufe auf und nicht nur von einem? Und wie kann ich das ändern?
2.)Auch im abgespeicherten File werden die b's kumuliert, obwohl ich immer nur die b's eines Durchlaufs haben möchte. Was kann man da machen?

Code:


daten=load('TOPS');

valid=daten(:,1);
pulsbreite=daten(:,13);
ampc=zeros(349,2);                  %erstellt Matrix mit 2 Spalten und Nullen drin

for j=1:349                         %in die erste Spalte kommen alle Zahlen von 1 bis 349
    ampc(j,1)=j;
end;

a=ampc(:,1);
b=ampc(:,2);      
l=length(daten);                    %Länge des Txt-files / Anzahl der totals
cut=randi(l,2,1);                   %HIER Anzahl der Teile ändern
c=cut(:,1);
L2=length(cut);
A=zeros(L2,1);
B=zeros(L2,1);                      %da in A leider die valids aller Durchläufe aufsummiert werden, müssen die Summen der einzelnen Durchläufe in neuer Matrix dargestellt werden

for k=1:L2                          %"schneidet" k-Teile
    for i=1:c(k)                           %zählt nur bis rand. Nummer
        for j=1:349
            if valid(i)==3
                if pulsbreite(i)==a(j)
                    b(j)=b(j)+1;            %zählt einen valid mit ensprechender Pulsbreite dazu
                end;    
            end;
        end;
    end;
    A(k,1)=sum(b);                                %Anzahl der Valids
    B(1,1)=A(1,1);  
    if k>=2
       B(k,1)=A(k,1)-A(k-1,1);
    end;
    ampc=[a b]
    fid=fopen(sprintf('ampc_%d.txt',B(k,1)),'wt');     %speichern
    for n=1:size(ampc)
        fprintf(fid,'%d\t%d%',ampc(n,:));
        fprintf(fid,'\n');
    end;
    fclose(fid);
end;

 
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2012, 18:51     Titel:
  Antworten mit Zitat      
Hallo Kat,
zu 1) b wird nur einmal am Anfang auf null gesetzt und bei jedem Schleifendurchgang
weiter hochgezählt. Nach dem
Code:
for k=1:L2
  b=zeros(349,1);
  [...]
 

und schon wird b bei jedem Schleifendurchgang zurückgesetzt.

Noch ein paar Fragen:
a enthält immer die Zahlen 1:349?
enthält pulsebreite nur die Zahlen 1 bis 349?

Die erste for-Schleife läßt sich auch einfach als
Code:

ampc(:,1)=1:349
 

schreiben.
Die restlichen Schleifen als:
Code:

for k=1:L2                          %"schneidet" k-Teile
    hilfe=pulsbreite(1:c(k));
    b=hist(hilfe(valid(1:c(k)==3&hilfe>=1&hilfe<=349),1:349);
    A(k,1)=sum(b);                                %Anzahl der Valids
    B(1,1)=A(1,1);  
    if k>=2
       B(k,1)=A(k,1)-A(k-1,1);
    end;
    ampc=[a b]
    fid=fopen(sprintf('ampc_%d.txt',B(k,1)),'wt');     %speichern
    for n=1:size(ampc)
        fprintf(fid,'%d\t%d%',ampc(n,:));
        fprintf(fid,'\n');
    end;
    fclose(fid);
end;
 


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.05.12
Wohnort: Leipzig
Version: ---
     Beitrag Verfasst am: 09.05.2012, 20:41     Titel:
  Antworten mit Zitat      
Mh, hab deinen Vorschlag eingefügt, aber leider summierts das immer noch auf.

Ja, a und pulsbreite sind immer 1 bis 349. Wahrscheinlich ist meine Variablenbenennung ein bisschen umständlich.

ich wollte auch die Histogrammfunktion benutzen, hab das aber nicht ganz verstanden. Mit der For-Schleife sollte es doch auch funktionieren, oder?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.05.12
Wohnort: Leipzig
Version: ---
     Beitrag Verfasst am: 09.05.2012, 21:26     Titel:
  Antworten mit Zitat      
Ich habs! Smile Die Matrizen A und B müssen auch in der Schleife immer wieder auf null gesetzt werden!

Vielen Dank für den Tip!!

Kat
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.