Numpy vs mldivide,"\" matlab-operator

A \ B in matlab gibt es eine spezielle Lösung, während numpy.linalg.lstsq nicht.

A = [1 2 0; 0 4 3];
b = [8; 18];
c_mldivide = A \ b
c_mldivide =

                 0
                 4
  0.66666666666667
 c_lstsq = np.linalg.lstsq([[1 ,2, 0],[0, 4, 3]],[[8],[18]])
 print c_lstsq
 c_lstsq = (array([[ 0.91803279],
                   [ 3.54098361],
                   [ 1.27868852]]), array([], dtype=float64), 2, array([ 5.27316304,1.48113184]))
  1. Wie funktioniert mldivide A \ B in matlab geben Sie eine spezielle Lösung?
  2. Diese Lösung ist nützlich bei der Erreichung der Rechengenauigkeit?
  3. Warum ist diese Lösung besonders und wie könnten Sie das umsetzen in numpy?
  • Was meinst du mit "spezielle Lösung"? Die Lösung von python ([0.918 3.541 1.279]) ist auch eine korrekte Lösung. Sie haben 2 Gleichungen in 3 unkowns es gibt also keine eindeutige Lösung. Die Lösungen sind [-1 9/2 0]+s*[3/2 -3/4 1] für jede reelle Zahl s. Set s=2/3 für die Matlab-Lösung und s=1.27868852 für die Python-Lösung.
  • Es ist nicht nur über die Angabe einer richtigen Lösung. mldivide gibt immer eine Lösung, die den Vektor der n nicht-null-Elemente, wobei n der Rang der matrix, wo, wie numpy dies nicht tut. Ich bin auf der Suche zu bekommen, die genau die gleiche Lösung in numpy als durch mldivide.
  • Die Oktave A\b Lösung ist die gleiche wie die numpy ein. MATLAB doc schlägt pinv(A)*B als rechnerisch mehr teure Methode. In der Oktave erzeugt die gleiche Sache. numpy hat auch pinv, witth das gleiche Ergebnis.
  • Die operation, die Sie suchen, nicht eine einzelne numerische Lösung, so sehe ich nicht, warum Sie erwarten, um zu erhalten das gleiche Ergebnis, wenn Sie Fragen, verschiedene Implementierungen zu geben, eine einzelne Antwort auf diese mehr Allgemeinen Frage. (Obwohl wenn man es Recht, MATLAB sollte auch wieder ein least-squares denke mal die Frage)
  • Es gibt keine least-squares-Lösung---es gibt eine unendliche Anzahl von exakten Lösungen. Wenn etwas anderes in deinem code hängt sich immer auf die "richtige" Lösung, dann müssen Sie entweder geben Sie einen anderen Zustand oder es gibt ein problem mit Ihrem Algorithmus.
  • Oops, danke @David, du hast Recht. Ich habe es verwechselt mit den eingeschränkten Fall, vor allem aufgrund der OP ' s Gebrauch von lstsq...sorry.
  • Wenn es eine unendliche Anzahl von genauen Lösungen lstsq gibt die Lösung mit minimaler norm; d.h., derjenige mit der kleinsten Summe der Quadrate der Variablen. Dies ist etwas, das man beschreiben könnte als "least squares", obwohl "minimum-norm" ist ein Begriff vorzuziehen, um Verwechslungen zu vermeiden.
  • Ich glaube nicht, dass ich absolut Zustimmen. Ein damit-Quadrate-Lösung bedeutet, dass der Rest (Fehler) in der ungefähren Lösung minimiert least-squares-Sinne, D. H. der Abstand von der richtigen Lösung auf die Ungefähre Lösung minimiert wird. Kommissionierung die Lösung mit der kleinsten norm ist ein Weg, um zu bestimmen, welche Lösung zu wählen, genau wie Matlab versucht, wie viele Elemente der Vektor null wie möglich. Also ich denke, deine Methode gibt eine least-squares-Lösung, verwendet aber eine andere Art der Kommissionierung, die Lösung zurück.

InformationsquelleAutor Schrodinger | 2015-11-06
Schreibe einen Kommentar