Symbol jest operatorem prawego macierzy w MATLAB, który wywołuje funkcję mrdivide
. Z dokumentacji, matryca prawo podział związany jest z matrix left division w następujący sposób:
B/A = (A'\B')'
Jeśli A
jest macierzą kwadratową, B/A
jest w przybliżeniu równa B*inv(A)
(chociaż jest obliczana w inny, bardziej wytrzymałe sposób). W przeciwnym razie, x = B/A
jest rozwiązaniem w sensie najmniejszych kwadratów do nieokreślonego lub nadmiernie określonego układu równań x*A = B
. Więcej szczegółów na temat algorytmów używanych do rozwiązywania układu równań podano here. Zazwyczaj pod maską używane są pakiety takie jak LAPACK lub BLAS.
NumPy package dla Pythona zawiera procedurę lstsq
do obliczania rozwiązania najmniejszych kwadratów do układu równań. Procedura ta prawdopodobnie da wyniki porównywalne do użycia funkcji mrdivide
w programie MATLAB, ale jest mało prawdopodobne, aby była ona dokładna. Wszelkie różnice w podstawowych algorytmach używanych przez każdą funkcję będą prawdopodobnie powodować odpowiedzi, które różnią się nieznacznie od siebie (tj. Można zwrócić wartość 1,0, podczas gdy druga może zwrócić wartość 0,999). Względna wielkość tego błędu może być większa, w zależności od konkretnego układu równań, które rozwiązujesz.
Do korzystania z lstsq
może być konieczne nieznaczne dostosowanie problemu. Wydaje się, że chce rozwiązać równanie postać Cb = A, gdzie B się 25 po 18 jest 1 po 18 i C jest 1 po 25. Stosowanie transpose na obie strony daje równanie B T C T = a T, która jest normowana postaci (tj Ax = b). Argumenty lstsq
powinny być (w tej kolejności) B T (tablica 18 o-25) i T (macierzy 18 elementu). lstsq
powinien zwrócić tablicę składającą się z 25 elementów (c T).
Uwaga: podczas gdy NumPy nie wprowadza rozróżnienia między tablicą 1 na 1 lub N na 1, MATLAB na pewno robi i będzie krzyczeć na ciebie, jeśli nie użyjesz właściwego.
myślę, że masz literówkę. Jeśli "a" wynosi 1-na-18, nie potrzebujesz transpozycji. – gnovice
To nie jest literówka, kod Matlab działa doskonale. – EmilyS
@Emily: Następnie "a" musi być 18-by-1 (przed transpozycją), a nie 1-na-18. W przeciwnym razie MATLAB zgłasza błąd. – gnovice