Forum: PC-Programmierung Matlab liefert anderes Ergebnis als erwartet


von Anna9390 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein kleines Problem mit Matlab und hoffe, ihr könnt mir 
weiterhelfen. Ich importiere eine Excel-Datei mit 2 Spalten und 35.040 
Zeilen in Matlab. In der ersten Spalte steht die Zeit in 
Minutenschritten, also von 1 bis 35.040. In der zweiten Spalte stehen 
Messwerte. Die Überschriften der Spalten lauten Zeit und Messwert. Die 
Spaltenüberschriften werden automatisch als die Variablennamen 
übernommen.

Ich möchte, dass mein Programm jede Zeile durchgeht und je nach dem ob 
der Messwert größer oder kleiner Null ist, verschiedene ineinander 
verschachtelte Anweisungen ausführt und Berechnungen durchführt. Die 
Ergebnisse der Berechnungen sollen am Ende alle miteinander addiert 
werden. Hier ist mein bisheriger Quellcode:
1
%Parameter 
2
eta=0.8; 
3
4
%Anfangswerte 
5
W_s=0;   
6
n=0;   
7
a_ges=0; 
8
W_n_ges=0; 
9
W_g_ges=0; 
10
11
%Excel-Tabelle einlesen 
12
data=xlsread('Daten.xlsx') 
13
14
%Variablennamen 
15
Zeit = data(:,1); 
16
Messwert = data(:,2); 
17
18
for Zeit=1:35040 
19
    if Messwert>0     
20
        a=Messwert*eta;       
21
        n=n+1; 
22
        W_g=0; 
23
        if W_s<W_s_max 
24
           W_s=W_s+a; 
25
           W_n=0; 
26
        else W_n=a; 
27
        end 
28
    else 
29
        a=0; 
30
        b=c/4; 
31
        W_n=0; 
32
        if W_s>0 
33
           W_s=0; 
34
           W_g=0; 
35
        else W_g=b; 
36
        end 
37
    end 
38
a_ges=a_ges+a; 
39
W_n_ges=W_n_ges+W_n; 
40
W_g_ges=W_g_ges+W_g; 
41
end

Eine Fehlermeldung bekomme ich zwar nicht, aber im Workspace stehen für 
die Werte a, a_ges, n, W_n und W_n_ges Nullen. Für b, W_g und W_g_ges 
steht bei Value 35040x1 double. Das verstehe ich jetzt so, dass das 
Programm immer in die zweite Bedingung, Messwert<=0 springt. Aber das 
stimmt nicht, der Messwert ist in meiner Tabelle auch häufig positiv. 
Ich habe die Excel-tabelle mit den Werten auch mal angefügt.

Hat jemand eine Idee, was ich falsch mache?

Ich hoffe jemand kann mir weiterhelfen.

Grüße, Anna

von Marek N. (Gast)


Lesenswert?

W_s_max ist nicht definiert.

von Anna9390 (Gast)


Lesenswert?

Hallo Marek,

danke für deine schnelle Antwort.
Nur W_s_max ist definiert, ich hab bloß vergessen es zu kopieren und 
hier einzufügen. Also daran liegt es leider nicht...

Hast du noch eine andere Idee?
Gruß, Celia

von pgbesa (Gast)


Lesenswert?

Hi.

Du fragst für alle Zeilen

[beachte, dass der Zeitvektor in der Exceltabelle alle paar Einträge 
"Zeit" enthält (statt einer Zahl), was zu NaN im Zeitvektor führt]

Messwert > 0 ab. Da kein Index vergeben ist, wird der Vergleich 
vektoriell gemacht. Messwert(Zeit)>0 wäre die zeilenweise Abfrage.

von Marek N. (Gast)


Lesenswert?

>> 37  -496,1747876
>> Zeit  -498,1405427
>> 38  -502,3665102
Außerdem divergiert dein Zeitindex mit den Daten, das ist aber dem 
Programm egal, da du ja eh über "for Zeit=1:35040" iterierst.

Bau dir doch print-Ausgaben ein in die Programmteile ein und stepp das 
schrittweise durch.

von Justus S. (jussa)


Lesenswert?

Marek N. schrieb:
> da du ja eh über "for Zeit=1:35040" iterierst

da wird doch gar nichts iteriert, "Zeit" wird nie benutzt...

von Bernhard S. (gmb)


Lesenswert?

for Zeit=1:35040
    if Messwert>0

Was erhoffst du dir von diesen Zeilen? In "Zeit" steht doch schon die 
ganze erste Spalte deiner Daten.xlsx, und in "Messwert" steht die zweite 
Spalte.

ich hätte sowas in der Art geschrieben:

for n=1:35040
    if Messwert(n)>0

usw.

von Anna9390 (Gast)


Lesenswert?

Vielen Dank für eure Antworten, jetzt funktioniert es! :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.