Tuesday 11 July 2017

Octave Moving Average Funktion

11.2 Funktionen definieren Die Definition einer Funktion namens name sieht in ihrer einfachsten Form wie folgt aus: Ein gültiger Funktionsname ist wie ein gültiger Variablenname: eine Folge von Buchstaben, Ziffern und Unterstrichen, die nicht mit einer Ziffer beginnen. Funktionen teilen sich denselben Pool von Namen wie Variablen. Der Funktionskörper besteht aus Octave-Anweisungen. Es ist der wichtigste Teil der Definition, weil er sagt, was die Funktion eigentlich tun sollte. Zum Beispiel, hier ist eine Funktion, die, wenn ausgeführt, läutet die Glocke auf Ihrem Terminal (vorausgesetzt, dass es möglich ist, dies zu tun): Die printf-Anweisung (siehe Input und Output) sagt einfach Octave, die Zeichenfolge quotaquot zu drucken. Das spezielle Zeichen lsquo a rsquo steht für das Warnungszeichen (ASCII 7). Siehe Strings. Sobald diese Funktion definiert ist, können Sie Octave bitten, sie zu bewerten, indem Sie den Namen der Funktion eingeben. Normalerweise möchten Sie einige Informationen an die von Ihnen definierten Funktionen übergeben. Die Syntax für das Übergeben von Parametern an eine Funktion in Octave ist, wo arg-list eine kommagetrennte Liste der Argumente von functionrsquos ist. Wenn die Funktion aufgerufen wird, werden die Argumentnamen verwendet, um die im Aufruf angegebenen Argumentwerte zu halten. Die Liste der Argumente kann leer sein. In diesem Fall entspricht dieses Formular dem oben gezeigten. Um eine Nachricht zusammen mit dem Klingeln der Klingel zu drucken, können Sie den Wakeup wie folgt aussehen: Wenn Sie diese Funktion mit einer solchen Anweisung aufrufen, wird Octave Ihre Klingeltonklingel klingeln lassen und die Nachricht lsquo Rise and shine rsquo ausdrucken, gefolgt von einem Zeilenumbruch (Das lsquo n rsquo im ersten Argument der printf-Anweisung). In den meisten Fällen möchten Sie auch einige Informationen aus den von Ihnen definierten Funktionen erhalten. Hier ist die Syntax zum Schreiben einer Funktion, die einen einzelnen Wert zurückgibt: Das Symbol ret-var ist der Name der Variablen, die den von der Funktion zurückzugebenden Wert enthält. Diese Variable muss vor dem Ende des Funktionskörpers definiert werden, damit die Funktion einen Wert zurückliefert. Variablen, die im Körper einer Funktion verwendet werden, sind lokal für die Funktion. Variablen, die in arg-list und ret-var benannt werden, sind ebenfalls lokal für die Funktion. Siehe Globale Variablen. Wie Sie auf globale Variablen innerhalb einer Funktion zugreifen können. Zum Beispiel, hier ist eine Funktion, die den Durchschnitt der Elemente eines Vektors berechnet: Wenn wir so geschrieben haben, und dann rief die Funktion mit einer Matrix anstelle eines Vektors als Argument, hätte Octave eine Fehlermeldung gedruckt Wie dies: weil der Körper der if-Anweisung wurde nie ausgeführt, und Retval war nie definiert. Um dunkle Fehler zu vermeiden, ist es eine gute Idee, immer sicherzustellen, dass die Rückgabevariablen immer Werte haben und sinnvolle Fehlermeldungen erzeugen, wenn Probleme auftreten. Beispielsweise könnte avg so geschrieben worden sein: Es gibt noch ein zusätzliches Problem mit dieser Funktion. Was ist, wenn es ohne Argument aufgerufen wird Ohne zusätzliche Fehlerprüfung wird Octave wahrscheinlich eine Fehlermeldung ausgeben, die wonrsquot wirklich hilft, die Quelle des Fehlers aufzuspüren. Damit Sie Fehler wie diese fangen können, bietet Octave jede Funktion mit einer automatischen Variablen namens nargin. Jedes Mal, wenn eine Funktion aufgerufen wird, wird nargin automatisch auf die Anzahl der Argumente initialisiert, die tatsächlich an die Funktion übergeben wurden. Zum Beispiel könnten wir die avg-Funktion wie folgt umschreiben: Obwohl Octave nicht automatisch einen Fehler meldet, wenn Sie eine Funktion mit mehr Argumenten als erwartet aufrufen, bedeutet dies wahrscheinlich, dass etwas nicht stimmt. Octave meldet auch nicht automatisch einen Fehler, wenn eine Funktion mit zu wenigen Argumenten aufgerufen wird, aber jeder Versuch, eine Variable zu verwenden, die keinen Wert gegeben hat, wird zu einem Fehler führen. Um derartige Probleme zu vermeiden und nützliche Meldungen zu liefern, prüfen wir beide Möglichkeiten und geben eine eigene Fehlermeldung aus. Geben Sie die Anzahl der Eingabeargumente einer Funktion an. Wird innerhalb einer Funktion aufgerufen, geben Sie die Anzahl der an die Funktion übergebenen Argumente zurück. Geben Sie auf der obersten Ebene die Anzahl der an Octave übergebenen Befehlszeilenargumente zurück. Bei Aufruf mit dem optionalen Argument fcn mdasha function name oder handlemdashreturnieren Sie die deklarierte Anzahl der Argumente, die die Funktion akzeptieren kann. Wenn das letzte Argument für fcn varargin ist, ist der zurückgegebene Wert negativ. Zum Beispiel wird die Funktion union für Sätze als Programmieranweisung deklariert. Anmerkung: nargin funktioniert nicht für kompilierte Funktionen (.oct-Dateien) wie integrierte oder dynamisch geladene Funktionen. Geben Sie den Namen des n-ten Arguments an die aufrufende Funktion zurück. Wenn das Argument kein einfacher Variablenname ist, geben Sie einen leeren String zurück. Als Beispiel ist ein Verweis auf ein Feld in einer Struktur wie s. field kein einfacher Name und wird Quotient zurückgeben. Inputname ist nur innerhalb einer Funktion nützlich. Wenn sie an der Befehlszeile verwendet wird, gibt sie immer eine leere Zeichenfolge zurück. Abfrage oder setzen Sie die interne Variable, die steuert, ob interne Ausgabe von einer Funktion unterdrückt wird. Wenn diese Option deaktiviert ist, zeigt Octave die Ergebnisse an, die durch Auswerten von Ausdrücken innerhalb eines Funktionskörpers erzeugt werden, die nicht mit einem Semikolon abgeschlossen werden. Wenn von innen eine Funktion mit der Option quotLocalquot aufgerufen wird, wird die Variable lokal für die Funktion und alle Unterroutinen, die sie aufruft, geändert. Der ursprüngliche Variablenwert wird beim Verlassen der Funktion wiederhergestellt. Weight Moving Average In Antwort auf diesen Beitrag von Luca Delucchi Eine Online-Methode, um wma (dh, wo Sie einen einzelnen Wert auf einmal hinzufügen können) mit einem expinentiellen Fenster (das neuere Ereignisse wiegt) zu tun (Xmean (t) x (t) tau), so erhält man eine wma von x (t). Tau ist so etwas wie die Länge des Gedächtnisses (Ereignisse, die weiter zurück als tau sind, werden nicht quittrememberedquot zu gut). Am 10.08.2007 um 09:19 schrieb Luca Delucchi: gt Hallo, ich kann eine Funktion auf Weighted Moving Average, wo der Wert sind gt nehmen im automatischen Modus diese meine Idee gt gt yy1, y2, y3, y4, y5 gt Funktion wma (Y) gt (y12y2y3) 4 gt (y22y3y4) 4 gt etc gt usw gt Endfunktion gt gt I konnte die Formel (y12y2y3) 4 nicht wiederholen (weil, wenn der lange Gt-Vektor unterschiedlich ist, die Funktion ändern muss) nur eine gt Formel, die die Formel für alle Werte von Vektor gt gt verwende ich Ive hoffe, eine klare Erklärung gt gt Luca gt gt gegeben Hilfe-Oktaven-Mailing-Liste gt versteckte E-Mail gt cae. wisc. edumailmanlistinfohelp-Oktaven-Sein nicht eine Oktave Sache, aber Eine Signalverarbeitungssache. Ein FIR (Finite-Input-Response) - Filter wird durch den Vektor der Koeffizienten bestimmt. Wenn also der Filter die Länge 4 hat, wäre der Ausgang so: y (t) b (1) x (t) b (2) T-1) b (3) x (t-2) b (4) x (t-3) Wenn b eine (1,4) 4 ist, ist es nur der Durchschnitt der letzten vier Elemente. In Oktave können Sie mit der Funktion quotfilterquot genau das tun, wenn x Ihr Signal ist, können Sie einfach y Filter (b, 1, x) P. S. Dies ist fast das gleiche wie Sren39s Vorschlag zur Verwendung von Faltung (mit der conv-Funktion). Der einzige Unterschied (glaube ich) ist, dass Filter die gleiche Ausgabe wie conv geben wird, aber abgeschnitten auf die Länge von x. Auf 81007, Luca Delucchi lthidden E-Mail gt schrieb: 2007810, Schirmacher, Rolf lthidden E-Mail gt: gt Filter mit einem FIR-Filter Koeffizienten wäre gt gt b 1 1 1 1. 4 gt Was ist das Sorry, aber I39m ein Neuling von Oktave gt gt ----- Ursprüngliche Nachricht ----- gt gt Von: Luca Delucchi mailto: versteckte e-Mail gt gt Gesendet: Friday, August 10, 2007 9:20 AM gt gt: Oktave gt gt Betreff: Weighted Moving Average gt gt gt gt gt gt Hallo, ich kann auf gewichteten gleitenden Durchschnitt eine Funktion zu tun, wenn der Wert sind gt gt nehmen im Automatikbetrieb diese meine Idee gt gt gt gt yy1, y2, y3, y4, y5 gt gt Funktion wma (y) gt gt (y12y2y3) 4 gt gt (y22y3y4) 4 gt gt etc gt gt usw. gt gt Ende Funktion gt gt gt gt ich nicht die Formel (y12y2y3) wiederholen könnte 4 (weil Wenn die Länge des gt-gt-Vektors unterschiedlich ist, i die Funktion ändern muß), sondern nur eine gt gt-Formel haben, die die Formel für alle Werte des Vektors gt gt gt gt verwendet, hoffe ich eine klare Erklärung gegeben gt gt gt gt Luca gt gt gt gt Hilfe-Oktaven-Mailing-Liste gt gt versteckte E-Mail gt gt cae. wisc. edumailmanlistinfohelp Oktaven gt gt gt in Antwort auf dieses Thema von Luca Delucchi Hallo, kann ich eine Funktion auf gewichteten gleitenden Durchschnitt zu tun, wenn der Wert nehmen sind im Automatik-Modus dieser meine Idee yy1, y2, y3, y4, y5 Funktion wma (y) (y12y2y3) 4 (y22y3y4) 4 etc etc Ende Funktion ich nicht die Formel (y12y2y3) wiederholen könnte 4 (denn wenn der lange von Vektor verschieden ist, muss ich ändern Die Funktion) haben aber nur eine Formel, die die Formel für alle Werte des Vektors verwendet. Sie müssen an Ihre Daten anders denken, wenn Sie die Matlaboctave effizient nutzen wollen. Die Daten werden als Vektoren oder Matrizen dargestellt, und Sie sollten alle Operationen auf den gesamten Daten durchführen - denken Sie nicht an Elemente y1, y2 usw., sondern behandeln Sie den gesamten Vektor y. Sie müssen Vektorelemente aus verschiedenen Positionen mischen, also müssen Sie verschobene Versionen des Vektors konstruieren. Zum Beispiel ist y (2: Ende) der Vektor, dessen erstes Element das zweite Element von y ist. Wenn du es auf diese Weise tust, zwingt es dich, verschiedene Probleme zu erkennen, die unter den Teppich gekehrt werden, sonst zum Beispiel, was ist die Bedeutung deines gewichteten Mittelwertes für y1, der nicht über einen früheren Datenpunkt verfügt. Ein Ansatz könnte sein, das zu duplizieren Erster und letzter Punkt: temp y (1) yy (Ende) Durchschnitt (temp (1: end-2) 2temp (2: end-1) temp (3: end)) 4 oder geben Sie auf und geben Sie zu, dass Sie nur berechnen können (2: end-1) y (3: end)) 4 Es gibt eine Oktave-Funktion mit dem Namen filter (), die beliebigen linearen Filter sein kann Ziemlich kompliziert, weil es ermöglicht eine lineare Rückmeldung, die Sie arent interessiert, so dass Sie eine bestimmte Form eines Feedback-Vektor b1 0 0 0 0 0. durchschnittliche Filter (1 2 14,1, y)) Schließlich hat Octave einige Filter in meinem gebaut (1, 10), 1, x) Dies setzt voraus, daß die Werte bei negativer Zeit (x (0), x (-1), usw.) gleich sind Alle null. So wäre zum Beispiel der erste Wert von y x (1) 10. Ich schaute auf beide conv () und Filter (), aber can39t herauszufinden, wie man einen gleitenden Durchschnitt mit ihnen zu tun. Vielleicht I39m nicht verstehen, die Funktionen der Eingabevars richtig. Let39s sagen, ich habe ein Array, ein rand (1.100). Können Sie mir sagen, wie I39d verwenden conv () und Filter () zu nehmen, sagen die 10-Tage gleitenden Durchschnitt, mit einer Gewichtung von 0,5 gt ----- Ursprüngliche Nachricht ----- gt Von: Andy Buckle Mailto: hidden email gt Gesendet am: Donnerstag, den 06. Mai 2010 um 12:06 Uhr gt an: versteckte E-Mail gt Cc: versteckte E-Mail gt Thema: Re: vectorized gleitende gt gt Conv ist auch eine m-Datei, aber es hat nur ein paar Ifs in. Dann es gt ruft Filter, um den Job zu erledigen. Die eine oct-Datei ist. Gt gt Andy gt gt Am Thu, 6. Mai 2010 um 06.28 Uhr, Tim Rueth lthidden E-Mail gt schrieb: gt gt Wer weiß, wie man einen n-Tag gewichteten gleitenden Durchschnitt eines gt gt Vektor ohne Verwendung einer for - Loop Ich schaute auf die M-Code gt für movavg () gt gt und es verwendet eine for-Schleife, so I39m Vermutung dort wahrscheinlich isn39t ein Weg, gt gt aber ich dachte, I39d überprüfen. Vielen Dank. gt gt gt gt --Tim gt gt gt gt Hilfe-Oktaven-Mailing-Liste gt gt versteckte E-Mail gt gt www-old. cae. wisc. edumailmanlistinfohelp Oktaven gt gt gt gt gt gt gt gt - gt andy gt Dank Schnalle für das Zeigen Wie man filter () verwenden, um einen einfachen gleitenden Durchschnitt zu machen. Ich implementierte Ihren Code, und es stimmt mit movavg (x, 10,10,0), die einen 10-tägigen einfachen gleitenden Durchschnitt berechnet. Es gibt nur einen Unterschied in den ersten 9 Zahlen aufgrund der angenommenen Werte der negativen Zeit (movavg berechnet eine Einlaufperiode). Wie Sie vielleicht daran erinnern, Im versucht, Filter () verwenden, um movavg () s for-Schleife zu vermeiden. Nun, was ich versuche zu tun ist ein gewichteter gleitender Durchschnitt, identisch mit dem Alpha-Parameter von movavg (). Wenn alpha0, es ist ein einfacher gleitender Durchschnitt, und stimmt mit filter () überein. Wenn ich Alpha zu 1 ändere, Im annehmen, um eine lineare MA zu erhalten. Heres den Code in movavg. m, dass die Gewichtung (Blei ist die Anzahl der Tage zu durchschnittlich, gleich 10 im obigen Fall): Blei (1: Blei).Alpha Anpassung der Gewichte zu 1 Bleifreiespitze (Blei) So, für einen 10-Tage linear gewichteten gleitenden Durchschnitt (Blei 10, Alpha 1). Sollten die letzten 9 Tage und der aktuelle Tag wie folgt gewichtet werden: 155, 255, 355. 1055, wobei das größte Gewicht (1055) auf den aktuellen Tag angewendet wird. Also, ich versuchte eine einfache Testfall mit nur ein 2-Tage-MA auf einem 6-Element-Vektor. madays 2 alpha 1 len 6 a rand (1. len) berechnen MA mit movavg () ma movavg (a, madays, madays, alpha) berechnen MA mit filter () Sweep (1: madays) alpha normsweep sweepsum (Sweep) f Filter (normsweep, 1, a) Die Ergebnisse von movavg () und filter () sind ähnlich, aber nicht gleich. Ich vermute, ich habe nicht die Argumente für Filter () richtig, aber ich kann nicht herausfinden, was ich falsch gemacht habe. Insbesondere bin ich nicht sicher, was das zweite Argument von Filter () soll. Hilfe Im nicht sicher, was Sie mit der Gewichtung von 0,5 bedeuten, aber um eine einfache 10-Tage-Durchschnitt zu tun, itd y-Filter (110ones (1, 10), 1, x) Dies setzt voraus, dass die Werte bei negativen Zeit (x (0 ), X (-1), usw.) alle Null sind. So wäre zum Beispiel der erste Wert von y x (1) 10. Hallo ihr Lieben, ich glaube nicht, dass es sich hierbei um ein Problem handelt. Vielleicht Im nicht verstehen, die Funktionen der Eingabevars richtig. Lets sagen, ich habe ein Array, ein rand (1.100). Können Sie mir sagen, wie Id verwenden conv () und Filter () zu nehmen, sagen die 10-Tage gleitenden Durchschnitt, mit einer Gewichtung von 0,5 gt ----- Ursprüngliche Nachricht ----- gt Von: Andy Buckle Mailto: hidden email gt Gesendet am: Donnerstag, den 06. Mai 2010 um 12:06 Uhr gt an: versteckte E-Mail gt Cc: versteckte E-Mail gt Thema: Re: vectorized gleitende gt gt Conv ist auch eine m-Datei, aber es hat nur ein paar Ifs in. Dann es gt ruft Filter, um den Job zu erledigen. Die eine oct-Datei ist. Gt gt Andy gt gt Am Thu, 6. Mai 2010 um 06.28 Uhr, Tim Rueth lthidden E-Mail gt schrieb: gt gt Wer weiß, wie man einen n-Tag gewichteten gleitenden Durchschnitt eines gt gt Vektor ohne Verwendung einer for - Loop Ich schaute auf die M-Code gt für movavg () gt gt und es nutzt eine for-Schleife, so Im vermutlich gibt es wahrscheinlich nicht eine Möglichkeit, gt gt aber ich dachte, Id-Check. Vielen Dank. gt gt gt gt --Tim gt gt gt gt Hilfe-Oktaven-Mailing-Liste gt gt versteckte E-Mail gt gt www-old. cae. wisc. edumailmanlistinfohelp Oktaven gt gt gt gt gt gt gt gt - gt andy gt gtYour Filtercode Schnalle Unten funktioniert im Vergleich zu dem, was ich hatte gtdoing, außer für eine Reihe von ersten Tagen, aufgrund dessen, welche Werte gtin negative Zeit angenommen werden. Ich hatte den folgenden Code verwendet: gt gt quotndaysquot ist die Anzahl der Tage, die beim Berechnen des exponentiellen gtmoving-Mittels von quotdataquot (Daten ist ein Spaltenvektor) gt data repmat (Daten (1), ndays, 1) Datenwiederholungsdaten zu verwenden sind (1) gt avg (1) Daten (1) Die obige Anweisung ist alles, was Sie benötigen Auf negative Werte zurücksetzen. Sie sollten das gleiche für die Filter-Funktion tun, aber ich konnte nicht sagen, wie es zu tun, offhand. Gt für i 2. n gt ao avg (i-1) gt avg (i) ao alpha (Daten (i) - ao) gt end für gt gt trim off Einlaufzeit für negative Zeitwerte gt longma longma (lmadays1 ) Ich verstehe nicht die oben genannten Anweisung. Was ist longma gtFor kleine Werte von ndays, die Anzahl der ersten Tage, wo theres eine gtdiscrepancy mit Ihrer Filter () - Implementierung ist minimal, aber für größere gtvalues ​​von ndays wächst die Anzahl der ersten Tage der Diskrepanz (offensichtlich, gtdue auf die Natur der Ein exponentielles MA mit einem Long-Tail-Speicher). Beachten Sie, dass ich gtadd ähnliche negative Zeitwerte auf die Vorderseite des Vektors bei der Verwendung von gtfilter () auch. Im nur nicht sicher, was ist die Konvention, wenn es darum geht, gtcalculating exponentielle gleitende Mittelwerte für Punkte in quotdataquot wo quotndaysquot gtreaches zurück in negative Zeit. Danke noch einmal. - Francesco Potort (ricercatore) Stimme: 39 050 315 3058 (op.2111) ISTI - Bereich della ricerca CNR Fax: 39 050 315 2040 über G. Moruzzi 1, I-56124 Pisa Email: versteckte E-Mail (Eingang 20, 1. Stock , Raum C71) Web: fly. isti. cnr. it Help-octave Mailing-Liste versteckte E-Mail www-old. cae. wisc. edumailmanlistinfohelp-Oktave Ich kann es derzeit prüfen, aber wenn ich mich richtig erinnere, ist das 4. Argument zu filtern initial Bedingungen. Ich denke, der Befehl wäre: b alpha a 1, Alpha-1 s-Filter (b, a, x, x (1)) Es braucht nur Ein Element in diesem Fall sein, weil die einzige Anfangsbedingung, die Sie benötigen, s0 ist. Am Thu, 13. Mai 2010 um 02.21 Uhr, Francesco Potort lthidden E-Mail gt schrieb: gtYour Filtercode unten funktioniert gut, wenn im Vergleich zu dem, was ich hatte gtdoing, außer für eine Reihe von ersten Tagen, aufgrund der Werte angenommen werden Gtin negative Zeit. Ich hatte den folgenden Code verwendet: gt gt quotndaysquot ist die Anzahl der Tage, die beim Berechnen des exponentiellen gtmoving-Mittels von quotdataquot (Daten ist ein Spaltenvektor) gt data repmat (Daten (1), ndays, 1) Datenwiederholungsdaten zu verwenden sind (1) gt avg (1) Daten (1) Die obige Anweisung ist alles, was Sie benötigen Auf negative Werte zurücksetzen. Sie sollten das gleiche für die Filter-Funktion tun, aber ich konnte nicht sagen, wie es zu tun, offhand. Gt für i 2. n gt ao avg (i-1) gt avg (i) ao alpha (Daten (i) - ao) gt end für gt gt trim off Einlaufzeit für negative Zeitwerte gt longma longma (lmadays1 ) Ich verstehe die obige Anweisung nicht. Was ist longma gtFor kleine Werte von ndays, die Anzahl der ersten Tage, wo there39s eine gtdiscrepancy mit Ihrer Filter () Implementierung ist minimal, aber für größere gtvalues ​​von ndays, die Anzahl der ersten Tage der Diskrepanz wächst (offensichtlich, gtdue auf die Natur der Ein exponentielles MA mit einem Long-Tail-Speicher). Beachten Sie, dass ich gtadd ähnliche negative Zeitwerte an der Vorderseite des Vektors bei der Verwendung von gtfilter () auch. I39m nur nicht sicher, was ist die Konvention, wenn es darum geht, gtcalculating exponentielle gleitende Mittelwerte für Punkte in quotdataquot wo quotndaysquot gtreaches zurück in negative Zeit. Danke noch einmal. - Francesco Potort (ricercatore) Stimme: 39 050 315 3058 (op.2111) ISTI - Bereich della ricerca CNR Fax: 39 050 315 2040 über G. Moruzzi 1, I-56124 Pisa Email: versteckte E-Mail (Eingang 20, 1. Stock) , Raum C71) Web: fly. isti. cnr. it Als Antwort auf diesen Beitrag von Francesco Potort Der letzte Befehl mit quotlongmaquot sollte gelesen haben: quotavg avg (n1. Ende) quot, die effektiv trimmt die berechneten Werte aus negativer Zeit. Aber, wie Sie sagen, es sieht aus wie ich didnt Notwendigkeit, dies zu tun, weil die Geschichte vollständig erfasst ist in avg (1) Daten (1), so dass keine Notwendigkeit, eine quotrun-inquot Zeit zu berechnen. Vielen Dank Francesco. Sherman hatte herausgefunden, dass ich die Anfangsbedingung festlegen kann, indem ich einen 4. Parameter in filter () angegeben habe, der gleich dem ersten Datenpunkt ist. Ich habe versucht, und bekam sehr ähnlich (aber nicht ganz exakt) Ergebnisse im Vergleich zu der for-Schleife unten ohne negative Zeitwerte. Aber diese kleine Differenz dissipated innerhalb quotndaysquot und isnt eine große Sache. Vielen Dank Sherman. Um den exponentiellen gleitenden Durchschnitt von quotdataquot für quotndaysquot zu berechnen, gilt der folgende Code: alpha 2 (ndays1) n Länge (Daten) avg Nullen (n, 1) avg (1) Daten (1) für i 2. n ao avg (Alpha, 1 alpha-1, Daten, Daten (1) avg (i) ao alpha (Daten (i) - ao) endfor ist nahe, aber nicht ganz gleich: ) Für ungefähr die ersten Tage von avg. Gt ----- Ursprüngliche Nachricht ----- gt Von: Francesco Potort mailto: verborgene e-mail gt Gesendet: Wednesday, May 12, 2010 11:22 PM gt An: hidden email gt Cc: Octave-ML James Sherman Jr. Gt gtYour-Filtercode unten funktioniert gut, wenn im Vergleich zu dem, was gt ich gt gtdoing, mit Ausnahme einer Reihe von ersten Tagen, aufgrund der Werte gt gtassumed in negativer Zeit. Ich hatte den folgenden Code verwendet: gt gt gt gt quotndaysquot ist die Anzahl der Tage, die bei der Berechnung des gt gtexponentialen gleitenden Mittelwertes von quotdataquot (Daten ist ein Spaltenvektor) gt gt data repmat (data (1), ndays, 1 verwendet werden soll ) Daten wiederholen gt Daten (1) ndays mal bei gt gtthe Anfang der Daten für negative Zeitwerte alpha gt 2 (ndays1) n gt gt Länge (Daten) avg Nullen (n, 1) gt gt avg (1) Daten (1) Gt gt Die obige Anweisung ist alles, was Sie brauchen, um quotinventquot Vergangenheit Speicher gt für negative Werte. Sie sollten das gleiche für die Filter-gt-Funktion zu tun, aber ich konnte nicht sagen, wie es zu tun offhand. Gt gt für i 2 n gt gt ao avg (i-1) gt gt avg (i) ao alpha (Daten (i) - ao) end für gt gt gt gt die Einlaufzeit für negative Zeitwerte gt gt abzuschneiden Ich verstehe nicht die oben genannten Anweisung. Was ist longma gt gt gt Für kleine Werte von ndays ist die Anzahl der anfänglichen Tage, in denen gt theres eine gt gtdiscrepancy mit Ihrer Filter () Implementierung ist minimal, aber für gt gtlarger Werte von ndays wächst die Anzahl der ersten Tage der gt Diskrepanz gt gt (Offensichtlich aufgrund der Natur eines exponentiellen MA mit einem gt-long-tail-gt-Speicher). Anmerkung, füge ich ähnliche negative Zeitwerte zur gt Vorderseite des gt gtvector bei Verwendung von gt gtfilter () hinzu. Im nur nicht sicher, was ist die Konvention, wenn es gtcomes zu berechnen exponentielle gleitende Mittelwerte für Punkte gt in quotdataquot wo quotndaysquot gt gtreaches zurück in negative Zeit. Danke noch einmal. Gt gt - gt Francesco Potort (ricercatore) Stimme: 39 050 315 gt 3058 (op.2111) gt ISTI - Gebietsbezirke CNR Fax: 39 050 315 2040 gt über G. Moruzzi 1, I-56124 Pisa Email: Versteckte E-Mail-Adresse Gt (Eingang 20, 1. Etage, Raum C71) Web: fly. isti. cnr. it gt So, das hat mich gequält, also sah ich ein wenig an der Filterfunktion, und ich glaube, ich fand, wo der Fehler war in meinem ersten Vorschlag . Der Anfangsbedingungsvektor hat mit den internen Zuständen des Filters zu tun, nicht die negativen Zeitausgänge des Filters (zumindest nicht direkt), um so zu bekommen, was ich denke, genau das ist, was dein Code mit der for-Schleife die Filterzeile sein sollte : Avg filter (alpha, 1 alpha-1, data, data (1) (1-alpha)) Es ist ziemlich unintuitive, warum der 1-Alpha-Begriff dort sein muss, und ich weiß nicht, ob es viel Interesse daran gibt Es sollte nicht so schwer sein (wahrscheinlich brauche ich nur, um meine Signale und Systeme Buch zu knacken), um eine Funktion schreiben, um die jene Anfangsbedingungen zu berechnen, dass die Filter-Funktion nur die Ausgänge und Eingaben von negativen Zeit zu erwarten. Die letzte Anweisung mit quotlongmaquot sollte gelesen haben: quotavg avg (n1: end) quot, die effektiv trimmt die berechneten Werte aus negativer Zeit. Aber, wie Sie sagen, es sieht aus wie ich didn39t Notwendigkeit, dies zu tun, weil die Geschichte vollständig erfasst wird in avg (1) Daten (1), so dass keine Notwendigkeit, eine quotrun-inquot Zeit zu berechnen. Vielen Dank Francesco. Sherman hatte herausgefunden, dass ich die Anfangsbedingung festlegen kann, indem ich einen 4. Parameter in filter () angegeben habe, der gleich dem ersten Datenpunkt ist. Ich habe versucht, und bekam sehr ähnlich (aber nicht ganz exakt) Ergebnisse im Vergleich zu der for-Schleife unten ohne negative Zeitwerte. Aber dieser kleine Unterschied verschwand innerhalb quotndaysquot und isn39t eine große Sache. Vielen Dank Sherman. Um den exponentiellen gleitenden Durchschnitt von quotdataquot für quotndaysquot zu berechnen, gilt der folgende Code: alpha 2 (ndays1) n Länge (Daten) avg Nullen (n, 1) avg (1) Daten (1) für i 2. n ao avg (I-1) avg (i) ao alpha (Daten (i) - ao) ist nah, aber nicht ganz gleich: alpha 2 (ndays1) avg Filter (alpha, 1 alpha-1, Daten, Daten (1)) Für ungefähr die ersten Tage von avg. Gt ----- Ursprüngliche Nachricht ----- gt Von: Francesco Potort mailto: verborgene e-mail gt Gesendet: Wednesday, May 12, 2010 11:22 PM gt An: hidden email gt Cc: 39Octave-ML39 39James Sherman Jr. 39 gt Thema: Re: Vektorisierten gleitenden Durchschnitt gt gt gtYour Filtercode unten funktioniert nur gut, wenn im Vergleich zu dem, was gt gt gtdoing, mit Ausnahme einer Reihe von ersten Tagen, aufgrund der Werte gt gtassumed in negativer Zeit. Ich hatte den folgenden Code verwendet: gt gt gt gt quotndaysquot ist die Anzahl der Tage, die bei der Berechnung des gt gtexponentialen gleitenden Mittelwertes von quotdataquot (Daten ist ein Spaltenvektor) gt gt data repmat (data (1), ndays, 1 verwendet werden soll ) Daten wiederholen gt Daten (1) ndays mal bei gt gtthe Anfang der Daten für negative Zeitwerte alpha gt 2 (ndays1) n gt gt Länge (Daten) avg Nullen (n, 1) gt gt avg (1) Daten (1) Gt gt Die obige Anweisung ist alles, was Sie brauchen, um quotinventquot Vergangenheit Speicher gt für negative Werte. Sie sollten das gleiche für die Filter-gt-Funktion zu tun, aber ich konnte nicht sagen, wie es zu tun offhand. Gt gt für i 2 n gt gt ao avg (i-1) gt gt avg (i) ao alpha (Daten (i) - ao) end für gt gt gt gt die Einlaufzeit für negative Zeitwerte gt gt abzuschneiden Longma longma (lmadays1. Ende) gt gt Ich don39t verstehen die obige Anweisung. Was ist longma gt gt gt Für kleine Werte von ndays ist die Anzahl der anfänglichen Tage, an denen gt eine gt gtdiscrepancy mit Ihrer filter () Implementierung minimal ist, aber für gt gtlarger Werte von ndays wächst die Anzahl der anfänglichen Tage der gt Diskrepanz gt gt (Offensichtlich aufgrund der Natur eines exponentiellen MA mit einem gt-long-tail-gt-Speicher). Anmerkung, füge ich ähnliche negative Zeitwerte zur gt Vorderseite des gt gtvector bei Verwendung von gt gtfilter () hinzu. I39m nur nicht sicher, was ist die Konvention, wenn es gtcomes zur Berechnung der exponentiellen gleitenden Mittelwerte für Punkte gt in quotdataquot wo quotndaysquot gt gtreaches zurück in negative Zeit. Danke noch einmal. Gt gt - gt Francesco Potort (ricercatore) Stimme: 39 050 315 gt 3058 (op.2111) gt ISTI - Gebietsbezirke CNR Fax: 39 050 315 2040 gt über G. Moruzzi 1, I-56124 Pisa Email: Versteckte E-Mail-Adresse Gt (Eingang 20, 1. Etage, Raum C71) Web: fly. isti. cnr. it gt So, das hat mich gequält, also sah ich ein wenig an der Filterfunktion, und ich glaube, ich fand, wo der Fehler war in meinem ersten Vorschlag . Der Anfangsbedingungsvektor hat mit den internen Zuständen des Filters zu tun, nicht die negativen Zeitausgänge des Filters (zumindest nicht direkt), um so zu bekommen, was ich denke, genau das ist, was dein Code mit der for-Schleife die Filterzeile sein sollte : Avg Filter (Alpha, 1 Alpha-1, Daten, Daten (1) (1-alpha)) Es ist ziemlich unintuitive, warum die 1-alpha Begriff muss dort sein, und ich weiß nicht, ob theres viel Interesse daran, aber Es sollte nicht so schwer sein (wahrscheinlich brauche ich nur zu knacken meine Signale und Systeme Buch), um eine Funktion schreiben, um die jene Anfangsbedingungen, die die Filter-Funktion erwartet nur die Ausgänge und Eingänge aus negativer Zeit zu berechnen. Die letzte Anweisung mit longma sollte gelesen haben: avg avg (n1: Ende), die effektiv trimmt die berechneten Werte aus negativer Zeit. Aber, wie Sie sagen, es sieht aus wie ich didnt Notwendigkeit, dies zu tun, weil die Geschichte vollständig erfasst wird in avg (1) Daten (1), so dass keine Notwendigkeit, eine Einlaufzeit zu berechnen. Vielen Dank Francesco. Sherman hatte herausgefunden, dass ich die Anfangsbedingung festlegen kann, indem ich einen 4. Parameter in filter () angegeben habe, der gleich dem ersten Datenpunkt ist. Ich habe versucht, und bekam sehr ähnlich (aber nicht ganz exakt) Ergebnisse im Vergleich zu der for-Schleife unten ohne negative Zeitwerte. Aber diese kleine Differenz dissipated innerhalb von ndays und isnt eine große Sache. Vielen Dank Sherman. Um den exponentiellen gleitenden Durchschnitt der Daten für ndays zu berechnen, gilt der folgende Code: alpha 2 (ndays1) n Länge (Daten) avg Nullen (n, 1) avg (1) Daten (1) für i 2. n ao avg (I-1) avg (i) ao alpha (Daten (i) - ao) ist nah, aber nicht ganz gleich: alpha 2 (ndays1) avg Filter (alpha, 1 alpha-1, Daten, Daten (1)) Für ungefähr die ersten Tage von avg.


No comments:

Post a Comment