2016-04-30 18 views
5

Im Grunde wollte ich zwei Dinge fragen:Negative Nullen in Matlab

  1. Warum geschieht das? (negative Null in Matlab)
  2. Wann passiert das?

Ich kam mit this. Octave hat einige Ähnlichkeiten mit Matlab, daher ist die Nützlichkeit dieses Features klar, aber eines der Dinge, die sie sagten, ist, dass es nicht in der Standardausgabe erscheint. und ich habe es gerade angepackt. Also vielleicht eine neue Erkenntnis dazu?

Für die zweite Frage, in der beantworteten Frage, auf die ich Bezug genommen habe, sagten sie nur, dass es in einigen Berechnungen passieren könnte, und in der folgenden Berechnung, die ich gerade getan habe, scheint es nicht wirklich notwendig zu sein (oder zu bekommen) diese negative Null.

Der Code, wo ich begegnet ist dies:

xcorr([1 0 1 1], [0 1 1 0 0]) 

wo es Ausgabe lautet:

-0.0000 -0.0000 1.0000 1.0000 1.0000 2.0000 1.0000 0.0000 0.0000 

Die xcorr ist eigentlich eine Quer Korelation Funktion, die wie Summieren und Multiplikationen nur einige einfache Operationen tut , wo genaue Funktionsdetails gefunden werden können here. Wie auch immer, nichts wie „komplexe Verzweigungsschnitte und Transformationen der komplexen Ebene

Dank

Antwort

3

Diese Werte stellen keine Nullen. Stattdessen sind sie negative Werte, die sehr nahe bei Null liegen. Der Grund dafür, diese Werte und nicht einfach Nullen zu erhalten, ist auf Näherungen zurückzuführen, die bei der Funktionsimplementierung durchgeführt werden. Laut Matlab Dokumentation: "xcorr estimates the cross-correlation sequence of a random process".

Mit anderen Worten - die Werte, die auf dem Bildschirm angezeigt werden, sind nur Annäherungen für negative Werte.

Um dies zu testen, können Sie das Anzeigeformat von Matlab ändern.

Code:

format shortE; 
xcorr([1 0 1 1], [0 1 1 0 0]) 

Ergebnis:

ans = 

    Columns 1 through 5 

-6.2450e-017 -5.5511e-017 1.0000e+000 1.0000e+000 1.0000e+000 

    Columns 6 through 9 

    2.0000e+000 1.0000e+000 1.1102e-016 1.1796e-016 

Wie Sie sehen können, werden die Werte in Koordinaten 1,2,8 und 9 sind tatsächlich negativ.

+0

Danke für Ihre Antwort. Es ist wie du sagtest, nicht null, sondern eine sehr kleine Zahl. Aber warum passiert das? Wie die Matlab-Dokumentation (und natürlich die Formel dieser Funktion) ist nur eine Summe von Multiplikationen. – lazary

+1

Nach der Formel sind Sie richtig. Die Implementierung von MATLAB für xcorr ist jedoch nur eine Näherung für diese Formel. Wie in der offiziellen Matlab-Dokumentation geschrieben: "xcorr ** schätzt ** die Kreuzkorrelationssequenz". Daher ist die endgültige Ausgabe nicht 100% genau. – drorco