Matroids Matheplanet Forum Index
Moderiert von viertel
Mathematik » Geometrie » orthogonale Regression mit Nebenbedingung
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule orthogonale Regression mit Nebenbedingung
schnitzel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 26.02.2009
Mitteilungen: 191
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2020-08-04


Hi,
ich habe folgendes Problem. (Alle Objekte sind Teil des \(R^3\).)

Gegeben:
- eine Gerade \(g\)
- zwei Punkte \(M_1, M_2\)

Gesucht ist eine Gerade \(h\) mit den Eigenschaften:
- \(h\) schneidet \(g\).
- \(d(h, M_1)^2 + d(h, M_2)^2\) ist minimal.

Gibt es dafür eine analytische Lösung?
Ich vermute, dass \(h\) durch \(M = (M_1 + M_2)/2\) geht und dabei den Winkel mit \(g\) minimiert. Stimmt das und kann man das dann auflösen?

Vielen Dank und viele Grüße



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
schnitzel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 26.02.2009
Mitteilungen: 191
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, vom Themenstarter, eingetragen 2020-08-05


Ok meine Vermutung ist wohl falsch:
python
import numpy as np
from sympy.geometry import Line3D
from scipy.optimize import fmin_cg
 
A = np.array([1, 2, 3])
AD = np.array([4, 3, 2])
g = Line3D(A, A + AD)
 
M1 = np.array([5, 1, 3])
M2 = np.array([15, 21, 23])
 
 
def loss_line(h: Line3D) -> float:
    """line to loss"""
    return float(h.distance(M1)**2 + h.distance(M2)**2)
 
def p2h(p: np.ndarray) -> Line3D:
    """parameters to line"""
    l, *PD = p
    PD = np.array(PD)
    P = A + l * AD
    h = Line3D(P, P + PD)
    return h
 
p0  = np.array([0.1, 1.1, 1.1, 1.1])
p = fmin_cg(lambda p: loss_line(p2h(p)), p0)
h = p2h(p)
print(loss_line(h))
 
M = (M1 + M2)/2
def p2h_2(p: np.ndarray) -> Line3D:
    """anderer Ansatz"""
    P = A + p * AD
    h = Line3D(P, M)
    return h
 
def loss_line2(h :Line3D) -> float:
    return float(g.angle_between(h))
 
p2 = fmin_cg(lambda p: loss_line2(p2h_2(p)), 0.2)
h2 = p2h_2(p2)
print(loss_line(h2))

Optimization terminated successfully.
         Current function value: 4.314443
         Iterations: 12
         Function evaluations: 125
         Gradient evaluations: 25
4.31444259473027
Optimization terminated successfully.
         Current function value: 0.001459
         Iterations: 6
         Function evaluations: 98
         Gradient evaluations: 49
111.53763177667379


Hat jemand eine Idee wie man das algorithmisch besser macht?
Gruß



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]