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

Stundenmittel + not enough input arguments

 

glazio1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2014, 10:19     Titel: Stundenmittel + not enough input arguments
  Antworten mit Zitat      
Hallo,

habe in einem mat-file Wetterstationsdaten vom Jahr 2004 bis zum Jahr 2013. In diesem Mat-file sind folgende Spalten vorhanden:

Jahr/Monat/julianischer Tag/Tag des Monats/Stunde/10-min-Intervall/Temperatur/Luftfeuchtigkeit

Gesucht wäre nun die Berechnung der Stundenmittel aus den 10-Minuten-Werten der Temperatur für eine gewisse Periode. Diese Periode erstreckt sich zum Beispiel vom 15.7.2004 bis zum 8.8.2004.

Der folgende Ansatz scheint nicht zu funktionieren und liefert die Fehlermeldung: Not enough input arguments. für die Zeile
sdate=datenum(year,month,day,hour,minute,ss);

Anbei der bisher geschriebene Code:
Code:
function [Tmeanh]=berechnung_temperaturmean(year,jday,month,day,hour,minute,T,RH,Swin)
% date=[year month day hour minute]
sdate=datenum(year,month,day,hour,minute,ss);
sdatelim=[datenum(2004,07,15,00,00) datenum(2004,08,04,23,59)]
dt=1/24;
sdate=sdatelim(1):dt:sdatelim(2);
for i = 1:length(sdate)
    j=find(sdate >= sdate(i) & sdate < sdate(i)+dt);
    Tmeanh(i)=mean(T(j));
end
 


Hat jemand eine Idee wie man dies am besten lösen könnte?

Vielen Dank


glazio1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2014, 10:27     Titel:
  Antworten mit Zitat      
Anbei nochmals der Code

Code:

function [Tmeanh]=berechnung_temperaturmean(year,jday,month,day,hour,minute,T,RH,Swin)
%date=[year month day hour minute]
sdate=datenum(year,month,day,hour,minute,ss);
sdatelim=[datenum(2004,07,15,00,00) datenum(2004,08,04,23,59)]
dt=1/24;
sdate=sdatelim(1):dt:sdatelim(2);
for i = 1:length(sdate)
    j=find(sdate >= sdate(i) & sdate < sdate(i)+dt);
    Tmeanh(i)=mean(T(j));
end

 
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.11.2014, 13:22     Titel:
  Antworten mit Zitat      
Hallo

da übergibst keine Sekunden ss, siehe nochmal genauer hin
versuche das:
Code:


Edit:
auch diese Zeile ist falsch:
Zitat:
sdatelim=[datenum(2004,07,15,00,00) datenum(2004,08,04,23,59)]

richtig wäre 6 Parameter:

Code:

sdatelim=[datenum(2004, 7, 15, 0, 0, 0) datenum(2004, 8, 4, 23 , 59, 0)]
 
Private Nachricht senden Benutzer-Profile anzeigen
 
glazio1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2014, 16:28     Titel:
  Antworten mit Zitat      
Danke, aber es erscheint noch immer dieselbe Fehlermeldung für dieselbe Zeile.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.11.2014, 16:59     Titel:
  Antworten mit Zitat      
Versuche mal mit Debugger, setzte Breakpoint in die Zeile und schaue was für die Werte dort übergeben werden? Oder kannst du deine Werte hier posten mit denen du deine Funktion testest.

Wenn ich dein Code genauer reinschaue, ist diese Zeile je nicht mal nötig, weil du 3 Zeilen später diese Variable wieder überschreibst.
siehe rot markierten Zeilen.

function [Tmeanh]=berechnung_temperaturmean(year,jday,month,day,hour,minute,T,RH,Swin)
% date=[year month day hour minute]
sdate=datenum(year,month,day,hour,minute,ss);
sdatelim=[datenum(2004,07,15,00,00) datenum(2004,08,04,23,59)]
dt=1/24;
sdate=sdatelim(1):dt:sdatelim(2);
for i = 1:length(sdate)
j=find(sdate >= sdate(i) & sdate < sdate(i)+dt);
Tmeanh(i)=mean(T(j));
end

Private Nachricht senden Benutzer-Profile anzeigen
 
glazio1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2014, 18:51     Titel:
  Antworten mit Zitat      
Vielen Dank für die Hilfestellung. Die rote Zeile wird in der Tat überschrieben, aber auch unter geänderten Variablennamen (ohne Überschreiben) ergibt sich dieselbe Fehlermeldung.

Übergeben werden in der Zeile sdate=datenum(year,month,day,hour,minute) die jeweiligen Spalten aus dem mat-file mit Jahreszahl, Monat, Tag, Stunde und die Minuten im 10 min Intervall (0,10,20,30,40,50,60) für jede Stunde.

Das Datum muss mit datenum konvertiert werden, da ja ansonsten keine Berechnung in MATLAB möglich ist.

Kann man aus den 10-min-Mittelwerten einen Stundenmittelwert mit folgender for-Schleife überhaupt berechnen?


Code:


for i = 1:length(sdate)
j=find(sdate >= sdate(i) & sdate < sdate(i)+dt);
Tmeanh(i)=mean(T(j));
end

 

Das mat-file kann ich leider nicht anhängen, da die Veröffentlichung dieser Daten nicht erlaubt ist.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.11.2014, 20:30     Titel:
  Antworten mit Zitat      
Hallo

Zitat:
Vielen Dank für die Hilfestellung. Die rote Zeile wird in der Tat überschrieben, aber auch unter geänderten Variablennamen (ohne Überschreiben) ergibt sich dieselbe Fehlermeldung.

Das war nur ein Hinweis, damit du überprüfst die Richtigkeit.
Bitte den geänderten Code hier posten.

Zitat:
Das mat-file kann ich leider nicht anhängen, da die Veröffentlichung dieser Daten nicht erlaubt ist.

Du kannst die MAT-File ja zippen und dann das ZIP-File anhängen.

Zitat:
sdate=datenum(year,month,day,hour,minute)

Da müssen 6 Parameter übergeben, siehe in der Doku
Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
glazio1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2014, 22:07     Titel:
  Antworten mit Zitat      
Code:
function [Tmeanh]=berechnung_temperaturmean(year,jday,month,day,hour,minute,T,RH,Swin)
%date=[year month day]
%sdate=datenum(sdate);

ss = 0
sdate=datenum(year,month,day,hour,minute,ss);
sdatelim=[datenum(2004,07,15,0,0,0) datenum(2004,08,04,23,59,0)]
dt=1/24;
sdate1=sdatelim(1):dt:sdatelim(2);
for i = 1:length(sdate1)
    j=find(sdate >= sdate1(i) & sdate < sdate1(i)+dt);
    Tmeanh(i)=mean(T(j));
end
 


Dies ist der abgeänderte Code. Der Variablenname wurde nun geändert, damit die beiden Zeilen nicht überschrieben werden. Die Fehlermeldung erscheint jedoch noch immer für die Zeile mit der Umrechnung in die Serial date Number.


Ich hänge einmal mein gesamtes m-file an. Die Daten-Dateien (mat-file) darf ich aus urheberrechtlichen Gründen nicht anhängen.

gradtagklassisch.m
 Beschreibung:
alle subfunctions für das einlesen der pegeldaten sind für das Problem irrelevant

mat-file metinput_mad_10.mat darf aus urheberrechtlichen Gründen nicht angehängt werden

Download
 Dateiname:  gradtagklassisch.m
 Dateigröße:  5.17 KB
 Heruntergeladen:  278 mal
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.11.2014, 15:52     Titel:
  Antworten mit Zitat      
Hallo

in Zeile 16 deines M-Files(gradtagklassisch.m) rufst du die Funktion berechnung_temperaturmean ohne Parameter, du muss deine Funktion aber mit den definierten Eingabe-Parametern aufrufen.
Ich vermute das ich der Grund für den Fehler.

ändere die Zeile 16 zu:
Code:


[Tmeanh] = berechnung_temperaturmean(year,jday,month,day,hour,minute,T,RH,Swin)

 
Private Nachricht senden Benutzer-Profile anzeigen
 
glazio1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2014, 21:42     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank nun erscheint die Fehlermeldung (not enough inputarguments)nicht mehr und die Mittelwertbildung erfolgt nun aber für die gesamte Periode.

Wie könnte man folgende for-Schleife umbasteln damit die Mittelwerte (Stundenmittel) für einen gewünschten Zeitraum berechnet werden.

Code:

function [Tmeanh]=berechnung_temperaturmean(year,jday,month,day,hour,minute,T,RH,Swin)
%date=[year month day]
%sdate=datenum(sdate);

ss = 0
sdate=datenum(year,month,day,hour,minute,ss);
% %sdate = datenum(date)
%
sdatelim=[datenum(2004,07,15) datenum(2004,08,04)]

%if sdate == sdatelim;
dt=1/24;
sdate1=sdatelim(1):dt:sdatelim(2);
for i = 1:length(sdate1)
     j=find(sdate >= sdate1(i) & sdate < sdate1(i)+dt);
     Tmeanh(i)=mean(T(j));
end

% data60min=T
for i = 1:length(T)/6;
Tmeanh(i) = mean(T(i*6-5:i*6));
end

 

Die erste for-Schleife liefert korrekte Ergebnisse, weiß aber nicht ob mit einem Zeitintervall dt=1/24 wirklich die Stundenmittel aus den jeweiligen 10-Minutenintervalle berechnet wird.

Die zweite for-Schleife würde den Stundenmittel aus den 6, 10-Minuten-Werte, aber wie kann ich dort die zeitliche Periode festlegen?

Viele Grüße und besten Dank
 
glazio1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2014, 18:22     Titel:
  Antworten mit Zitat      
Vielen Dank für die Hilfestellung, alle Fehler konnten behoben werden.
 
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.