Passe die Ebene an eine Reihe von Punkten in 3D an: scipy.optimize.minimize vs scipy.linalg.lstsq

Gegeben eine Reihe von Punkten in 3D, ist das allgemeine Problem, das @ zu finda, b, c Koeffizienten einer ebenen Gleichung in der Form:

z = a*x + b*y + c

such dass die resultierende Ebene das @ ibeste Passfor möglich zu dieser Menge von Punkten.

Imdiese SO Antwort, die Funktion scipy.optimize.minimize wird verwendet, um dieses Problem zu lösen.

Es basiert auf anfänglichen Schätzungen der Koeffizienten und minimiert eine Fehlerfunktion, die die Abstände jedes Punkts zur Oberfläche der Ebene summiert.

Imdieser Code (beyogen aufdieses andere SO antworte) das scipy.linalg.lstsqie @ -Funktion wird verwendet, um dasselbe Problem zu lösen (wenn sie auf ein Polynom 1. Ordnung beschränkt ist).

Es wird aufgelöst nachC in der Gleichungz = A*C, woA ist die Verkettung desx,y Koordinaten der Punktmenge,z ist derz Koordinate der Menge undC sind diea,b,c Koeffizienten.

Im Gegensatz zu dem Code in der obigen Methode scheinen für diesen Code keine ersten Schätzungen für die Ebenenkoeffizienten erforderlich zu sein.

Seit derminimizeie @ -Funktion erfordert eine anfängliche Vermutung. Dies bedeutet, dass sie möglicherweise zur optimalen Lösung konvergiert oder nicht (je nachdem, wie gut die Vermutung ist). Hat die zweite Methode einen ähnlichen Vorbehalt oder liefert sie eine immer exakte Lösung?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage