Parametergleichung einer Geraden lösen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
t.r
User
Beiträge: 2
Registriert: Sonntag 11. Juli 2021, 15:32

Hi, mein Problem ist folgendes:

Ich habe eine Geradengleichung in Parameterform, also
x = a + lambda * b, wobei a, b und x vektoren sind. Gibt es eine Funktion (bzw eine numpy.linalg Funktion würde ich annehmen), die so etwas nach lambda auflöst? Numpy.linalg.solve löst doch nur Gleichungen der Form a*x=b oder?

Danke für jeden Tipp!
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich weiss nicht was Du mit auflösen meinst? Das kann man doch recht einfach manuell machen und dann als Funktion umsetzen. Programmatisch ginge so etwas mit `sympy`:

Code: Alles auswählen

In [200]: from sympy.abc import a, b, x, lamda                                  

In [201]: sympy.solve(sympy.Eq(x, a + lamda * b), [lamda])                      
Out[201]: [(-a + x)/b]
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
t.r
User
Beiträge: 2
Registriert: Sonntag 11. Juli 2021, 15:32

Vielen Dank schonmal!
Ich brauche das als Funktion, weil ich vorher im code arrays a, b, und x definiert habe, die aber von anderen Faktoren in einer for- Schleife abhängig sind (also die arrays haben nicht immer die selben werte). Für die jeweiligen Einträge in a,b und x, die vorher in der for Schleife rauskommen, müsste ich dann die Geradengleichung lösen.

Mit sympy kenne ich mich leider gar nicht aus und so wie du es vorgeschlagen hast, hat es bis jetzt leider nicht funktioniert bei mir. Müsste das in meinem Fall dann doch irgendwie anders sein, so wie ich das Problem jetzt nochmal genauer erklärt habe?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn dich interessiert, wie gross lambda ist, dann musst du doch nur

|(x - a)| / |b|

rechnen, also den Ortsvektor vom gegebenen Punkt abziehen, und dessen Laenge durch die Laenge des Richtungsvektors teilen. Aber Achtung, das ist natuerlich nur gueltig, so lange x-a eine skalierter b ist! Das kann man auf verschieden Arten pruefen, aber im Zweifel ist die einfachste Art, das gleich in einem Schritt zu machen, und

v = x - a
l_x = v[0] / b[0]
l_y = v[1] / b[1]

zu rechnen. Und wenn l_x == l_y (modulo ein bisschen numerischer Ungenauigkeit), dann ist das sowohl eine Loesung, als auch die Antwort.

Wobei das natuerlich nicht klappt fuer b[0] ober b[1] == 0 ... hmm.

Dann eben doch zu Fuss: zuerst fuer ein b den Normalenvektor n bilden, n * v rechnen, und wenn das 0 ist, dann mit der ersten Formel lambda bestimmen.

Das ist alles ein bisschen sehr zu Fuss, aber mit den abstakteren Gleichungsloesungen habe ich einfach keine Erfahrung.
Antworten