___ answer15739248 ___

MRDIVIDE oder der Operator %code% löst tatsächlich das lineare System %code% als im Gegensatz zu MLDIVIDE oder dem Operator %code% , der das System %code% löst.

Um ein System %code% mit einer unsymmetrischen, nicht invertierbaren Matrix %code% zu lösen, können Sie sich entweder auf %code% verlassen, was über die Faktorisierung von %code% mit Gauss Elimination oder %code% geschieht. Dies geschieht über die Singular Value Decomposition und das Zero-Sing der Singulärwerte unterhalb einer (Default-) Toleranzgrenze.

Hier ist der Unterschied (für den Fall %code% ): Was ist der Unterschied zwischen PINV und MLDIVIDE, wenn ich A * x = b löse?

  

Wenn das System überbestimmt ist, liefern beide Algorithmen die   gleiche Antwort. Wenn das System unterbestimmt ist, gibt PINV die   Lösung x, die die Mindestnorm hat (min NORM (x)). MLDIVIDE wird   Wählen Sie die Lösung mit der geringsten Anzahl von Nicht-Null-Elementen.

In Ihrem Beispiel:

%Vor%

das System ist unterbestimmt, und die zwei verschiedenen Lösungen werden sein:

%Vor%

In beiden Fällen ist der Approximationsfehler von %code% nicht vernachlässigbar (nicht exakte Lösung) und dasselbe, d. h. %code% und %code% werden das gleiche Ergebnis liefern.

Was macht MATLAB?

In diesem Beitrag in scicomp.stackexchange.com . Ich gehe davon aus, dass ähnliche Optionen für den Operator %code% gelten.

Für Ihr Beispiel wird MATLAB höchstwahrscheinlich eine Gauß-Eliminierung durchführen, die die einfachste Lösung unter einer Unendlichkeit ergibt (da kommt die 5 her).

Was macht Python?

Python, in %code% verwendet pseudoinverse / SVD, wie oben gezeigt (deshalb erhalten Sie einen Vektor von 0.2). Im Endeffekt erhalten Sie mit dem folgenden Befehl das gleiche Ergebnis wie in %code% von MATLAB:

%Vor%     
___ qstntxt ___

Ich habe diese Zeile des MATLAB-Codes:

%Vor%

Ich verwende diese Eingaben:

%Vor%

Dies ist das Ergebnis (eine 1x25-Matrix):

%Vor%

Was macht MATLAB? Ich versuche, dieses Verhalten in Python zu kopieren, und die %code% -Dokumentation in MATLAB war nicht hilfreich. Woher kommt die 5 und warum sind die restlichen Werte 0?

Ich habe dies mit anderen Eingaben versucht und ähnliche Ergebnisse erhalten, normalerweise nur ein anderes erstes Element und Nullen, die den Rest der Matrix füllen. In Python, wenn ich %code% verwende, sind alle Werte in der ersten zurückgegebenen Matrix (d. H. Nicht die Einzahl) 0,2. Ich habe schon in Python die richtige Aufteilung versucht und es gibt etwas komplett mit den falschen Dimensionen aus.

Ich verstehe, was eine Approximation kleinster Quadrate ist, ich muss nur wissen, was %code% macht.

Siehe auch:

___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ tag123matlab ___ MATLAB ist eine von MathWorks entwickelte Hochsprachen- und interaktive Programmierumgebung für numerische Berechnungen und Visualisierung. Fragen sollten entweder mit [tag: matlab] oder [tag: oktave] versehen werden, aber nicht mit beiden, es sei denn, die Frage bezieht sich explizit auf beide Pakete. Wenn Sie dieses Tag verwenden, erwähnen Sie bitte die MATLAB-Version, mit der Sie arbeiten (z. B. R2017a). ___ tag123numpy ___ NumPy ist eine Erweiterung der Python-Programmiersprache für den naturwissenschaftlichen und numerischen Bereich. ___ ___ qstnhdr mrdivide Funktion in MATLAB: was es tut, und wie kann ich es in Python? ___ answer1007532 ___

Per dieses handliche "Spickzettel" von numpy für Matlab Benutzer %code% - %code% numpy.linalg.linalg , eine leichtgewichtige Version des vollen %code% .

    
___ answer1007469 ___

a / b findet die Lösung des kleinsten Quadrats für das lineare Gleichungssystem bx = a

Wenn b invertierbar ist, ist dies a * inv (b), aber wenn es nicht ist, ist es das x, das norm (bx-a)

minimiert

Sie können mehr über die kleinsten Quadrate auf wikipedia .

nach matlab documentation , mrdivide liefert höchstens k Werte ungleich null, wobei k der berechnete Rang von b ist. Meine Vermutung ist, dass Matlab in Ihrem Fall das Problem der kleinsten Quadrate löst, das durch Ersetzen von b durch b (: 1) (das den gleichen Rang hat) gegeben ist. In diesem Fall wird die moore-penrose inverse %code% definiert und gibt die gleiche Antwort

    
___ tag123linearalgebra ___ Lineare Algebra ist ein Kernbereich der Mathematik, der Vektorräume und lineare Abbildungen zwischen diesen Räumen untersucht. Hauptthemen sind: Matrizen, Vektoren, simultane Systeme linearer Gleichungen, diagonale Form, Eigenwerte, Eigenvektoren, Projektionen, Punkte, Linien, Ebenen, Hyperebenen, Rotationen und Reflexionen. ___

8

Ich habe diese Zeile des MATLAB-Codes:

%Vor%

Ich verwende diese Eingaben:

%Vor%

Dies ist das Ergebnis (eine 1x25-Matrix):

%Vor%

Was macht MATLAB? Ich versuche, dieses Verhalten in Python zu kopieren, und die mrdivide -Dokumentation in MATLAB war nicht hilfreich. Woher kommt die 5 und warum sind die restlichen Werte 0?

Ich habe dies mit anderen Eingaben versucht und ähnliche Ergebnisse erhalten, normalerweise nur ein anderes erstes Element und Nullen, die den Rest der Matrix füllen. In Python, wenn ich linalg.lstsq(b.T,a.T) verwende, sind alle Werte in der ersten zurückgegebenen Matrix (d. H. Nicht die Einzahl) 0,2. Ich habe schon in Python die richtige Aufteilung versucht und es gibt etwas komplett mit den falschen Dimensionen aus.

Ich verstehe, was eine Approximation kleinster Quadrate ist, ich muss nur wissen, was mrdivide macht.

Siehe auch:

EmilyS 17.06.2009, 14:36
quelle

3 Antworten

5

MRDIVIDE oder der Operator / löst tatsächlich das lineare System xb = a als im Gegensatz zu MLDIVIDE oder dem Operator \ , der das System bx = a löst.

Um ein System xb = a mit einer unsymmetrischen, nicht invertierbaren Matrix b zu lösen, können Sie sich entweder auf mridivide() verlassen, was über die Faktorisierung von b mit Gauss Elimination oder pinv() geschieht. Dies geschieht über die Singular Value Decomposition und das Zero-Sing der Singulärwerte unterhalb einer (Default-) Toleranzgrenze.

Hier ist der Unterschied (für den Fall mldivide ): Was ist der Unterschied zwischen PINV und MLDIVIDE, wenn ich A * x = b löse?

  

Wenn das System überbestimmt ist, liefern beide Algorithmen die   gleiche Antwort. Wenn das System unterbestimmt ist, gibt PINV die   Lösung x, die die Mindestnorm hat (min NORM (x)). MLDIVIDE wird   Wählen Sie die Lösung mit der geringsten Anzahl von Nicht-Null-Elementen.

In Ihrem Beispiel:

%Vor%

das System ist unterbestimmt, und die zwei verschiedenen Lösungen werden sein:

%Vor%

In beiden Fällen ist der Approximationsfehler von xb-a nicht vernachlässigbar (nicht exakte Lösung) und dasselbe, d. h. norm(x1*b-a) und norm(x2*b-a) werden das gleiche Ergebnis liefern.

Was macht MATLAB?

In diesem Beitrag in scicomp.stackexchange.com . Ich gehe davon aus, dass ähnliche Optionen für den Operator / gelten.

Für Ihr Beispiel wird MATLAB höchstwahrscheinlich eine Gauß-Eliminierung durchführen, die die einfachste Lösung unter einer Unendlichkeit ergibt (da kommt die 5 her).

Was macht Python?

Python, in linalg.lstsq verwendet pseudoinverse / SVD, wie oben gezeigt (deshalb erhalten Sie einen Vektor von 0.2). Im Endeffekt erhalten Sie mit dem folgenden Befehl das gleiche Ergebnis wie in pinv() von MATLAB:

%Vor%     
gevang 01.04.2013 07:14
quelle
2

a / b findet die Lösung des kleinsten Quadrats für das lineare Gleichungssystem bx = a

Wenn b invertierbar ist, ist dies a * inv (b), aber wenn es nicht ist, ist es das x, das norm (bx-a)

minimiert

Sie können mehr über die kleinsten Quadrate auf wikipedia .

nach matlab documentation , mrdivide liefert höchstens k Werte ungleich null, wobei k der berechnete Rang von b ist. Meine Vermutung ist, dass Matlab in Ihrem Fall das Problem der kleinsten Quadrate löst, das durch Ersetzen von b durch b (: 1) (das den gleichen Rang hat) gegeben ist. In diesem Fall wird die moore-penrose inverse b2 = b(1,:); inv(b2*b2')*b2*a' definiert und gibt die gleiche Antwort

    
second 17.06.2009 14:40
quelle
1

Per dieses handliche "Spickzettel" von numpy für Matlab Benutzer linalg.lstsq(b,a) - linalg numpy.linalg.linalg , eine leichtgewichtige Version des vollen scipy.linalg .

    
Alex Martelli 17.06.2009 14:49
quelle