Gleichung 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
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Hallo zusammen,

ich habe folgende Gleichung: u = f*y und u, y sind Vektoren (3D). Ich möchte nun f berechnen, also:

x1 = f1*x2
y1 = f2*y2
z1 = f3*y3

Nun habe ich einfach u/y gerechnet, aber wie kann ich Divisonen durch Null abfangen? Zum Beispiel so etwas:
0=t1*0
3=t2*2
0=t3*0

Oder gibt es dafür eine fertige numpy-Funktion?
detlef
BlackJack

@01detlef: Suchst Du eventuell das `numpy.linalg`-Modul?
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Ja, das kenne ich, aber das gilt irgendwie nur für matrizen?! ich habe aber nur zwei Vektoren

detelf
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

@01detlef: Welches Werte hättest du denn gerne in deinem Beispiel für t1, t2 und t3?
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Hallo,

naja die Werte, die herauskommen. Was meinst du? Ich weiss nicht so genau, wie man eine Schleife bauen kann, so dass überpüft wird, ob ein Punkt auf einer Geraden liegt. Ich habe 20 Punkte und dann soll mit zwei Punkten eine Geradengleichung aufgestellt werden und dann die anderen Punkte einsetzen, ob diese Punkte auf der Geraden liegen.

Wie kann ich das sinnvoll machen?

detlef
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Warum machst du es so kompliziert? Wenn du eine Gerade g hast und einen zu testenden Punkt p , dann musst du lediglich eine Projektion von p auf g machen und erhältst einen Punkt q. Dann bestimmst du den Abstand von p und q und kannst das Ergebnis gegen einen Schwellwert testen.

Vollständig ohne Sonderfälle und ohne Nachdenken.
Das Leben ist wie ein Tennisball.
BlackJack

@01detlef: Ja welche Werte kommen denn da heraus? Gib doch mal zu einem konkreten Beispiel ein konkretes Ergebnis an, dann fällt Dir vielleicht etwas auf.

Ob ein Punkt p_3 auf einer geraden liegt, die von zwei Punkten p_1 und p_2 beschrieben wird, könnte man zum Beispiel prüfen, in dem man schaut ob die Vektoren `p_1 → p_2` und `p_1 → p_3` wenn man sie normiert gleich sind.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@BlackJack: dass kann aber zu recht unerwarteten Ergebnissen führen. Bei einer Gerade entlang der x-Achse wäre ein Punkte (0, 0.001) weiter von der Geraden entfernt als ein Punkt (100, 1).
Das Leben ist wie ein Tennisball.
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Hallo,

also z.b. die vier Punkte:
p1(0,0,0)
p2(2,0,0)
p3(4,0,0)
p4(3,2,0)

Nun stelle ich mit p1 und p2 eine gerade auf:
g: r = p1 * lamda*(p2-p1)

Und wie kann ich nun der Reihe nach prüfen, ob die Punkte p3 und p4 usw. auf dieser Geraden liegen? Sollte man das mit einer Schleife machen, ich habe die Coordinaten in einem Array stehen.

detlef
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

01detlef hat geschrieben:Sollte man das mit einer Schleife machen
Ja.
Das Leben ist wie ein Tennisball.
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Aber was genau meinst du mit Projektion und so?

detlef
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Projektion auf Gerade.

Oder in kurz für eine Gerade g = s + lambda*n mit normiertem Richtungsvektor n, dem Stützvektor s und dem zu projizierendem Punkt p:

q = s + ((p - s).n)*n

wobei "." das Skalarprodukt ist.
Das Leben ist wie ein Tennisball.
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Und meinst du dann, wenn der Abstand zwischen q und p Null ist, liegt der Punkt auf der Geraden?

detlef
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Richtig. Allerdings solltest du auf Grund der Rechenungenauigkeit nicht auf Gleichheit testen, sondern gegen einen sehr kleinen Schwellwert.
Das Leben ist wie ein Tennisball.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@01detlef: Was EyDu gesagt hat. Außerdem das hier.
In specifications, Murphy's Law supersedes Ohm's.
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Hallo,

also ich habe das nun alles so eingebaut und es funktioniert. Wie kann ich nun in der Schleife sagen, dass sie abbrechen soll, sobald ein Abstand größer als 0.001 ist?

Code: Alles auswählen

for i in range(n)
  p = coordiante_xyz
  abstand = np.sqrt(p-q..)
  if abstand >= 0.001:
     x3 = p

zahl = 3*x3
Also sobald abstand größer als 0.001 ist, soll x3=p sein und die Schleife beendet werden und der nachfolgende Code folgen...

detlef
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Sorry schon erledigt
Antworten