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

Zeitverschiebung Zeitreihen und Differenzenbildung

 

la_rosee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2012, 20:02     Titel: Zeitverschiebung Zeitreihen und Differenzenbildung
  Antworten mit Zitat      
Hallo an alle,

ich muss zugeben, dass ich ein totaler Anfänger in Matlab und überhaupt irgendwelche Programmiersprachen bin. Wahrscheinlich fällt es mir deswegen auch so schwer eine Lösung für mein Problem zu finden. Folgendes:

Ich habe eine Beispielzeitreihe X=[1;2;3;4;5;6;7...], kurz ein Spaltenvektor.

Zur Glättung dieser Zeitreihe (ist im richtigen Beispiel eine mit saisonalen Einfluss und Trend) soll für diese nun 2 mal eine Differenz gebildet werden. Dies soll erreicht werden indem ich zunächst die Differenz zwischen xt und xt-12 bilde und dann mit bei der sich ergebende Zeitreihe Y noch einmal die Differenz zwischen yt und yt-1 bilde.

Mit Bezug auf das obige Beispiel, wenn es so fortgeführt wird also in Zahlen [13;14;15;16;17...]-[1;2;3;4;5;6...]=Y mit [12;12;12...] und bei dieser Zeitreihe soll dann erneut eine Differenz mit dem Vorgänger gebildet werden,d.h. (ist halt jetzt ein blödes beispiel) [12;12;12..]-[12;12;12...]

Im Original sind es andere Zahlen (Dax-Werte). Leider habe ich nicht einmal ansatzweise eine Idee bzw. LagOp oder was die Hilfe noch alles bietet passt nicht oder führt zu keinem Ergebnis.

Wie kann man das Problem am besten umsetzen?

Danke für eine Antwort


dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2012, 20:49     Titel:
  Antworten mit Zitat      
Ich bin mir aufgrund deiner Beschreibung nicht ganz sicher, ob das das ist was du suchst:
Code:

x=1:100 %dummy daten
lag=12
xa=x(lag+1:end)-x(1:end-lag)
lag=1
xb=xa(lag+1:end)-xa(1:end-lag)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
la_rosee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2012, 15:50     Titel:
  Antworten mit Zitat      
Ja super, dass ist genau das was ich gesucht habe. Musste es nur umdrehen, da meine Dax-Werte genau anders herum angeordnet sind und habe zusätzlich die entsprechende lag-Werte als Inputgröße L definiert.

Wo ich das gerade anwende, habe ich auch noch eine weiteren Idee der Vereinfachung für den universellen Einsatz gehabt. Ich bin mir allerdings nicht sicher,ob dass mit Matlab umsetzbar ist:

Kann ich in das kleine "Programm" noch integrieren, dass ich über eine Inputgröße die beiden Differenzenbildung mehrmals durchlaufen lasse?

Am Beispiel:
D=2, wenn ich diese auf die erste Differenzenbildung beziehe - bilde, wie bisher, die Differenz zwischen xt und xt-12. Mache dass dann mit dem sich ergebenden Vekor Y nochmal und bilde erst dann, wie bisher die sich dabei ergebende Differenz zum direkten Vorgänger.

Ist das darstellbar oder müsste ich dann jedesmal das Programm anpassen?

Danke schon einmal.
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2012, 16:41     Titel:
  Antworten mit Zitat      
Code:

function o=mylag(ip,l)
o=ip;
for lag=l
o=o(lag+1:end)-o(1:end-lag)
end
end
 

Was du suchst müsste dann so verwenden können:
Code:
output=mylag(V,[12,1])

(Code nicht getestet, ich hoffe ich hab keine Tippfehler drin)
Private Nachricht senden Benutzer-Profile anzeigen
 
la_rosee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2012, 16:45     Titel:
  Antworten mit Zitat      
Ohjey....also ich merke schon: Matlab ist für einen totalen Anfänger wirklich nicht besonders einfach zu lernen.

Also dein 2. Vorschlag passt genau so, wie er darsteht. Allerdings muss ich diesen als "function" eingeben. Kann ich diesen auch irgendwie in meinem "scipt" integrieren. Momentan gebe ich ja als Befehl dann "mylag(DAX-Werte,[12,12,1])", um zwei mal die Differenz zum 12. Vorgänger und dann erst zum direkten Vorgänger zu ermitteln -direkt weiterverarbeiten kann ich das endgültige Ergebnis aber nicht oder (müsste es quasi als neue Matrix nochmal definieren, indem ich es abtippe oder?). Eine Integration hat bei meinem Versuchen allerdings nicht geklappt - es kommt die Fehlermeldung "function defintions are not permitted in this context"

Zusätzlich wollte ich es auch vereinfachen, indem ich 2 Inputparameter für die Anzahl der Differenzenbildung für die beiden Lags definiere. Bsp. w für w-mal durchführen von lag=12 und v für danach noch v-mal durchführen von lag=1. Das konnte ich leider aus dem Vorschlag jetzt auch nicht weiterentwickeln. Mir würde es aber auch schon reichen, wenn ich es in das script integrieren kann und dann einfach als Inputgröße die Lags wie in deinem 2. Vorschlag in der Form [12,12,1...] eingeben kann.

Danke noch einmal, falls mir hier jemand weiterhelfen kann.
 
blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2012, 22:06     Titel: antwort
  Antworten mit Zitat      
Moin,

speicher die funktion mal in einem separaten file ab und öffne sie dann, wie dmjr schon geschrieben hat, mit

o=mylag(DAX-Werte,[12,12,1])

dann hast du die daten auch direkt gespeichert.

achja, funktionen können nur unter dem namen aufgerufen werden wie sie auch gespeichert wurden.
die datei sollte also mylag.m heissen und natürlich auch an dem ort liegen wo matlab auch zugriff drauf hat.
 
blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2012, 22:25     Titel:
  Antworten mit Zitat      
habe deinen zweiten teil des posts gar nicht gelesen:

Zitat:
function o=mylag(ip,lag1,lag2,w,v)
o=ip;
for first=1:w
o=o(lag1+1:end)-o(1:end-lag1);
end
for second=1:v
o=o(lag2+1:end)-o(1:end-lag2);
end
 
la_rosee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2012, 23:11     Titel:
  Antworten mit Zitat      
Super, es klappt - Danke an euch beide noch einmal;)
 
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.