W skrócie: cov
przede wszystkim dodaje wygody nieobrobionej formule.
Jeśli wpiszesz
edit cov
Zobaczysz wiele rzeczy, z tych linii przez całą drogę na dole:
xc = bsxfun(@minus,x,sum(x,1)/m); % Remove mean
if flag
xy = (xc' * xc)/m;
else
xy = (xc' * xc)/(m-1); % DEFAULT
end
która jest zasadniczo taka sama, jak w pierwszym wierszu zapisać dla odjęcia kolumny-środki.
Przeczytaj the wiki na próbnych kowarianiach, aby zobaczyć, dlaczego w domyślnej ścieżce znajduje się minus jeden.
Uwaga jednak, że pierwsza linia wykorzystuje normalną transpozycję (.'
), natomiast cov
-version wykorzystuje sprzężonej-transpozycję ('
). Spowoduje to, że dane wyjściowe cov
będą różne w kontekście danych o wartościach zespolonych.
Należy również pamiętać, że cov
to wywołanie funkcji do funkcji niezawierającej. Oznacza to, że podczas korzystania z pętli w trybie cov
wystąpi (prawdopodobnie poważna) kara za wydajność; Kompilator JIT Matlaba nie może przyspieszać funkcji niewbudowanych.
Z zastrzeżeniem, że liczby zespolone są traktowane inaczej niż kod w pytaniu. –
@BenVoigt: prawda, transpozycja jest inna, dziękuję. Edycja ... –
Czy według twojej edycji 2 lepiej użyć pierwszego wiersza? i który z nich jest prawidłowy lub czy są one takie same, aby zastosować transpozycyjną i transpozycyjną koniugację do obliczenia kowariancji? – kamaci