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

in array maximum in jedem Jahr finden

 

leeni
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2011, 14:17     Titel: in array maximum in jedem Jahr finden
  Antworten mit Zitat      
Hallo,

ich bin greenhorn im bereich matlab, hab vorher schon programmiert aber nur in VBA.
Ich beiße mir daran heute schon den ganzen Tag die Zähne aus, ich muss in meinem Programm verwirklichen dass in einem Array maximale Werte für jedes Jahr gefunden werden und in ein neues Array zu weiterverarbeitung speichert.
Bedeutet ich habe ein 2D Array das sowohl das Datum, als auch die dazugehörigen Werte beinhaltet.

Habt Ihr eine Idee wie sich das realisieren lässt!?

Lg
Eleen
Private Nachricht senden Benutzer-Profile anzeigen


Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2011, 14:44     Titel:
  Antworten mit Zitat      
Hi,
ich welchem Format liegt denn das Datum vor?
 
leeni
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2011, 14:56     Titel:
  Antworten mit Zitat      
Im Moment noch in einem ganz normalen Datumsformat, aber ich hab irgendwo gelesen, dass es wohl bessere wäre das Datum als numerisches Format abzulegen:

29587 = 01.01.1981!?

aso und falls du das andere Format meinst, dann Tag, Monat, Jahr Smile

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.09.2011, 19:25     Titel:
  Antworten mit Zitat      
Zitat:
...dass in einem Array maximale Werte für jedes Jahr gefunden werden und in ein neues Array zu weiterverarbeitung speichert.
Bedeutet ich habe ein 2D Array das sowohl das Datum, als auch die dazugehörigen Werte beinhaltet.


Was haben denn die Werte mit dem Datum zu tun? Was für maximale Werte?
Du kannst mit

Code:
n = datenum(['19.05.2000','10.12.2010'], 'dd.mm.yyyy')


das Datum in eine serial date number umwandeln und dann mit max(n) das Maximum suchen.
Private Nachricht senden Benutzer-Profile anzeigen
 
leeni
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2011, 20:00     Titel:
  Antworten mit Zitat      
Ok ich fang am besten vom anfang an. Ich habe Niederschlagssummen die jeweils einem Tag zugordnet werden, da ich davon 60 Jahre habe ist das per Hand schwierig heraus zu filtern.
Ich möchte in dem Code, für jedes Jahr den dazugehörigen maximalen Niederschlag finden. Spalte a ist das Datum und spalte b ist der dazugehörige Niederschlag.

bis jetzt hab ich das so versucht (auch auf die gefahr hin dass ich mich lächerlich mache...)
Code:
varNames = char(txt(1,:));  %Bestimmen der Spaltenüberschriften=Variablennamen
Date = txt(:,1);    
NS = nums(:,2);      

a = double(NS);
b = string (date);

for each b to year.count find max(a)
   
    [maxWert, maxDate] = max(a(:,2));
 


ich brauche die maximalen Werte um danach eine statistische Analyse zu machen.

liebe grüße
leeni
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2011, 07:54     Titel:
  Antworten mit Zitat      
Hi,
poste doch bitte mal ein paar Beispiel Zeilen von a und b.

Dein Code sagt mir so irgendwie nix, ist das MATLAB Code oder soll das so eine Art Pseudo Code sein?
 
leeni
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2011, 08:13     Titel:
  Antworten mit Zitat      
äähmmm jaaa pseudo-code ist gut möglich, da ich ja geschrieben habe das ich anfänger bin und gerade von VBA umsteige, lässt es sich vielleicht damit erklären....

ich weiß zwar nicht was du mit a und b meinst, aber ich denke du meinst wie die Rohdaten aussehen:

[list=]A B

Mess_datum NS korr.
1961-01-01 0.9384
1961-01-02 0
1961-01-03 0.1173
1961-01-04 1.7595
1961-01-05 3.6363
1961-01-06 0
1961-01-07 2.1114
1961-01-08 0.4692
1961-01-09 2.2287
1961-01-10 0
1961-01-11 1.4076[/list]
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2011, 09:01     Titel:
  Antworten mit Zitat      
Hi,

Deine Daten liegen also in einer Textdatei vor?

Dann ist das erste Problem, die Daten einzulesen.

Wenn du dabei Probleme hast, such einfach mal im Forum etwas, es gibt hunderte Threads zu dem Thema. Ich zeige dir hier eine Möglichkeit für eine txt Datei mit folgendem Inhalt:
Zitat:

Mess_datum NS korr.
1961-01-01 0.9384
1961-01-02 0
1961-01-03 0.1173
1961-01-04 1.7595
1961-01-05 3.6363
1961-01-06 0
1961-01-07 2.1114
1961-01-08 0.4692
1961-01-09 2.2287
1961-01-10 0
1961-01-11 1.4076
...


Also, dann mal einlesen:
Code:

L=importdata('name.txt');
datum_str=L.textdata(2:end); % in der 1. Zeile steht der "header", deswegen geht es erst bei 2 los
% umwandeln in einen datevec
datum_vec=datevec(datum,'yyyy-mm-dd');
% Da dich nur die Jahre interessieren, nehmen wir nur  die erste Spalte
datum=datum_vec(:,1);
NS=L.data;
 


Nun haben wir 2 Vektoren mit gleicher Länge, in einem stehen nur die Jahreszahlen für jeden Tag drin, im anderen
der zugehörige Niederschlag.
Jetzt ist alles vorbereitet um es elgegant zu lösen.
Wenn du den Code nicht verstehst, lies dir am besten in der MATLAB Doku die Beiträge zu "logical Indexing" und Arrayfun durch.

Code:

startjahr=min(datum);
endjahr=max(datum);
jahre=startjahr:endjahr; % Vektor mit den Jahren
maxNS=arrayfun(@(x) max(NS(datum==x)),jahre);
 


Das Ergebnis sollten nun 2 Vektoren sein, einer mit den Jahreszahlen ("jahre") und einer mit den entsprechenden maximalen Niederschlägen ("maxNS")
 
leeni
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2011, 10:32     Titel:
  Antworten mit Zitat      
Vielen Dank erst mal für deine Hilfe!!! Smile

Ich hab versucht es einzubinden, wollte aber gerne die dateien aus excel einlesen und hab das so gemacht:


Code:
[nums, txt] = xlsread('chemnitz.xlsx','81-2010'); %Einlesen der Datei

datum_str=L.textdata(2:end); % in der 1. Zeile steht der "header", deswegen geht es erst bei 2 los
% umwandeln in einen datevec
datum_vec=datevec(datum,'yyyy');
% Da dich nur die Jahre interessieren, nehmen wir nur  die erste Spalte
datum=datum_vec(:,1);
NS=L.data;

startjahr=min(datum);
endjahr=max(datum);
jahre=startjahr:endjahr; % Vektor mit den Jahren
maxNS=arrayfun(@(x) max(NS(datum==x)),jahre);



um besser zu verstehen wie die daten aussehen hab ich sie einfach mal angehangen.

problematisch ist auch dass mir bei dem Ergebniss nicht nur das Jahr genügt, für die spätere Auswertung bräuchte ich dann auch das dazu passende Datum.

Lg

Chemnitz.xls
 Beschreibung:

Download
 Dateiname:  Chemnitz.xls
 Dateigröße:  4.35 MB
 Heruntergeladen:  482 mal
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.