2016-04-30 37 views
5

W zasadzie chciałem zapytać dwie rzeczy:Negatywne zer w Matlab

  1. Dlaczego tak się dzieje? (ujemne zero w Matlab)
  2. Kiedy to się dzieje?

Wymyśliłem this. Octave ma pewne podobieństwa z Matlabem, więc przydatność tej funkcji jest oczywista, ale jedną z rzeczy, które powiedzieli, jest to, że nie pojawia się ona w domyślnym pliku wyjściowym. i właśnie to rozwiązałem. Może więc nowy wgląd w to?

Na drugie pytanie, w odpowiedzi na pytanie, do którego się odniosłem, po prostu powiedzieli, że może się to zdarzyć w niektórych obliczeniach, a w poniższym wyliczeniu, które właśnie zrobiłem, nie wydaje się konieczne używanie (lub uzyskiwanie) to ujemne zero.

Kod gdzie natknąłem to:

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

gdzie jest wyjście:

-0.0000 -0.0000 1.0000 1.0000 1.0000 2.0000 1.0000 0.0000 0.0000 

xcorr jest rzeczywiście krzyż funkcja korelacji, który wykonuje tylko kilka prostych czynności jak sumowanie i mnożenia , gdzie dokładnie można znaleźć szczegóły funkcji here. W każdym razie, nic takiego „skomplikowanych cięć gałęzi i przekształceń płaszczyzny zespolonej

Thanks

Odpowiedz

3

Wartości te nie oznaczają zera. Zamiast tego są to wartości ujemne, które są bardzo bliskie zeru. Powód pobrania tych wartości, a nie samych zer, wynika z przybliżenia, które są wykonywane w implementacji funkcji. Zgodnie z dokumentacją Matlab: "xcorr estimates the cross-correlation sequence of a random process".

Innymi słowy - wartości wyświetlane na ekranie to tylko przybliżenia wartości ujemnych.

Aby to sprawdzić, możesz zmienić format wyświetlania Matlaba.

Kod:

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

Wynik:

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 

Jak widać, wartości we współrzędnych 1,2,8 i 9 są w rzeczywistości ujemne.

+0

Dzięki za odpowiedź. Jest tak, jak powiedziałeś, nie zero, ale bardzo mała liczba. Ale dlaczego tak się dzieje? Ponieważ dokumentacja Matlab (i oczywiście formuła tej funkcji) jest po prostu sumą multiplikacji. – lazary

+1

Według wzoru masz rację. Jednak implementacja MATLAB dla xcorr jest tylko przybliżeniem tej formuły. Jak napisano w oficjalnej dokumentacji Matlaba: "xcorr ** szacuje ** sekwencję korelacji krzyżowej". Dlatego ostateczny wynik nie jest w 100% dokładny. – drorco