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

Monatsvektor erzeugen

 

noobuser
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 30.03.15
Wohnort: ---
Version: 2012b
     Beitrag Verfasst am: 30.03.2015, 16:12     Titel: Monatsvektor erzeugen
  Antworten mit Zitat      
Hallo alle zusammen,

ich möchte mir Zeitreihenanalyse mit Matlab aneignen, bin aber ein absolut blutiger Anfänger

ich habe ein ähnliches Problem wie

http://www.gomatlab.de/monatswerte-.....-series-tools-t25574.html

Ich möchte einen Spaltenvektor der Dimension 191x1 erzeugen, welcher die Monate in aufsteigender Reihenfolge der Jahre 1999:01 bis 2015:02 enthält.

Der folgende code liefert mir allerdings nicht das gewünschte Ergebnis, es stimmt nur Näherungsweise

Code:
clc
nobs = 191;

startDate =datenum('1999:01','yyyy:mm');

d = zeros(nobs, 1);
% d(1,1) = startDate;
for k = 1 : nobs;
   d(k)= startDate + k*(5876/nobs) ;
end

date1 = datestr(d,'yyyy:mm')

 

folgende infos zu meinen gedankengängen: 5876 = anzahl der Tage in der gewünschten Periode, 191 Monate sind enthalten, ergibt "im Schnitt" eine Monatslänge von 30,76 Tagen je Monat. Allerdings kommen hierbei gelegentlich Ungereimtheiten vor, es gibt mit Sicherheit eine deutlich elegantere Lösung für mein Problem ....

Evil or Very Mad

Schon mal vielen Dank für die Hilfe, viele Grüße

Jörg

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


noobuser
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 30.03.15
Wohnort: ---
Version: 2012b
     Beitrag Verfasst am: 30.03.2015, 16:25     Titel:
  Antworten mit Zitat      
ich korrigiere, es sind nobs = 193, ändert aber der zu Grunde liegenden Fragestellung nichts...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2015, 16:29     Titel:
  Antworten mit Zitat      
Hallo,

falls du R2014b oder neuer verwendest, bietet es sich an, mit datetime-Datentypen zu arbeiten.

Code:
d = datetime('01-Jan-1991'):calmonths(1):datetime('01-Feb-2015')


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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 30.03.15
Wohnort: ---
Version: 2012b
     Beitrag Verfasst am: 30.03.2015, 16:43     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort!

hab leider nur 2012b, datetime kennt das Programm noch nicht ...

Sad

ein weiteres Problem, welches aufgetaucht ist, dass ich den (mit meiner recht stümperhaften Herangehensweise) erzeugten Datumsvektor nicht in einer Graphik verwenden kann, da als Dimension bzw. Formatierung "<193x7 char>" angezeigt wird, es sich also um eine Matrix und eben nicht um einen Vektor handelt....

Die Skalierung mittels numerischer Werte der Form "yyyymm" (also bspw. 199901 für Januar 1999) ergibt auch nur Unsinn ...

Alles bisschen arg umständlich Rolling Eyes

Für Tipps und Hilfe jeder Art bin ich sehr dankbar^^

Grüße

Jörg
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2015, 17:02     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
hab leider nur 2012b

Dann bitte das am besten ins Profil eintragen.

In den vorherigen Versionen ist es leider mühsamer:
Code:
N = 25;
y = repmat(1990:1990+N, 12, 1);
y = y(1:end-10);
m = repmat(1:12, N+1, 1)';
m = m(1:end-10);
dates = datenum(y, m, 1);
 


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 30.03.2015, 17:04     Titel:
  Antworten mit Zitat      
man kann auch was mit sprintf basteln Smile
Code:
count=0;
nobs = 193;
for k=1999:2015
    for m=1:12
        count=count+1;
        date1{count}=sprintf('%4.0f.%02.0f',k,m);
    end
end
date1(nobs+1:end)=[];

wobei das nicht so schön ist wie die datenum und datetime lösung Smile
_________________

richtig Fragen
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 - 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.