|
|
Jede Zeile einer Excel-Tabelle durchgehen |
|
Anna9390 |
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 14.06.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.06.2018, 10:24
Titel: Jede Zeile einer Excel-Tabelle durchgehen
|
|
|
|
|
Hallo,
ich habe ein kleines Problem mit Matlab und hoffe, ihr könnt mir weiterhelfen. Ich möchte eine Excel-Datei mit 3 Spalten und 35.000 Zeilen in Matlab importieren. Das mache ich mit der Import-Data Funktion. In der ersten Spalte steht die Zeit in Minuten, also von 1 bis 35.000. In der zweiten und dritten Spalte stehen Messwerte. Die Überschriften der Spalten lauten hier a und b. Die Spaltenüberschriften werden automatisch als die Variablennamen übernommen.
Ich möchte jetzt, dass Matlab für jede Zeile, also für jeden Zeitschritt, die Differenz aus den beiden Messwerten berechnet. Dazu mache ich einfach: c=b-a;
Jetzt habe ich ja 35.000 Werte für c, richtig?
Als nächstes möchte ich, dass Matlab jede Zeile durchgeht und in Abhängigkeit von c verschiedene Anweisungen für die Berechnung von d ausführt. Am Ende, wenn das Programm für jede Zeile d ausgerechnet hat, möchte ich die Summe von d ausgegeben haben.
Beispiel:
Zeit=1:
if c>0
d=c*eta;
else
d=0;
d_ges=d_ges+d;
Hat jemand eine Idee wie ich das mache?
Ich habe es mit einer for-Schleife probiert (for Zeit 1:35000), das funktioniert bisher nicht.
Ich hoffe jemand kann mir weiterhelfen.
Grüße, Anna
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 21.06.2018, 11:10
Titel: Re: Jede Zeile einer Excel-Tabelle durchgehen
|
|
Hallo Anna9390,
Bitte poste eine Kopie Deines Codes und erkläre "funktioniert bisher nicht" mit Details: Bekopmmst Du eine Fehlermeldung? Dann füge eine Kopie der vollständigen Meldung ein. Oder weicht das ergebnis von Deinen Erwartungen ab? Falls ja, erkläre den Unterschied.
Vermutlich wird etwas in dieser Art helfen:
Gruß, Jan
|
|
|
Anna9390 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 14.06.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.06.2018, 11:52
Titel:
|
|
Hallo Jan,
das ist mein Code:
Eine Fehlermeldung bekomme ich zwar nicht, aber im Workspace stehen für die Werte d, d_ges, n, W_n und W_n_ges Nullen. Für e, W_g und W_g_ges steht bei Value 35040x1 double. Das verstehe ich jetzt so, dass das Programm immer in die zweite bedingung, c<=0 springt. Aber das stimmt nicht, c ist auch häufig positiv. Ich habe die Excel-tabelle mit den Werten auch mal angefügt.
Ist das Problem verständlich erklärt?
Gruß, Anna
Beschreibung: |
Excel_Tabelle mit Messwerten |
|
Download |
Dateiname: |
Daten.xls |
Dateigröße: |
2.5 MB |
Heruntergeladen: |
235 mal |
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 22.06.2018, 10:38
Titel:
|
|
Hallo Anna,
Der
if
Befehl benötigt eine skalare Bedingung. Wenn c ein Vektor ist, is "c > 0" ebenfalls eines. Dann fügt Matlab automatisch ein
all()
ein, damit wieder ein Skalar heraus kommt. Um genau zu sein:
Cond = (c > 0);
if all(Cond(:)) && ~isempty(Cond)
Ich rate mal, dass bei Dir die Bedingung für jedes Element geprüft werden soll, nicht für alle gleichzeitig, oder?
Die Schleife "for Zeit=1:35040" wird zwar 35040 mal durchlaufen, aber dabei wird immer der gleiche Code ausgeführt, weil der Inhalt der Schleife gar nicht viom Schleifenzähler "Zeit" abhängt.
Du brauchst also entweder eine Abhängigkeit vom Scheifenzähler:
Oder Du verwendest "logical indexing", wie bereits vorgeschlagen:
Viele Grüße, Jan
|
|
|
Anna9390 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 14.06.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.06.2018, 12:20
Titel:
|
|
Hallo Jan,
vielen Dank für deine Hilfe, es funktioniert jetzt
Gruß, Anna
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| RSS
Hosted by:
Copyright © 2007 - 2024
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.
|
|