[Archiv!] Reine Mathematik, Physik, Chemie usw.: Gehirntrainingsprobleme, die in keiner Weise mit dem Handel zusammenhängen - Seite 557

 

Für das flache Bild scheint es zu funktionieren. Es scheint mir, dass dies auch für den N-dimensionalen Fall funktioniert. Irgendwelche Einwände?

Mir scheint, es ist an der Zeit, ein Skript zu schreiben und es zu überprüfen... :)

 

Nun, der Vektor normal zur gegebenen Einheit kann einfacher konstruiert werden - ersetzen Sie einfach eine seiner Koordinaten xi durch -sqrt(1-xi^2). Dies ist gleichbedeutend mit einer Drehung um 90 Grad in der Ebene des Vektors weg von der i-ten Achse (d. h. wir ersetzen Kosinus durch -Sinus, wir erhalten Kosinus des Winkels+pi/2). Danach muss das Ergebnis nur noch normalisiert werden.

Aber es ist keine Tatsache, dass man auf diese Weise einen zu allen anderen Vektoren der Menge normalen Vektor erhalten kann. Sowie jede andere Möglichkeit, die einen normalen Vektor aus allen Varianten auswählt...

 
alsu:

Nun, der Vektor normal zur gegebenen Einheit lässt sich einfacher konstruieren - ersetzen Sie einfach eine seiner Koordinaten xi durch -sqrt(1-xi^2). Dies ist gleichbedeutend mit einer Drehung der Pole des Vektors um 90 Grad von der i-ten Achse weg (d. h. wir ersetzen Kosinus durch -Sinus und erhalten Kosinus des Winkels +pi/2). Danach muss das Ergebnis nur noch normalisiert werden.

Aber es ist keineTatsache, dass man auf diese Weise einen zu allen anderen Vektoren der Menge normalen Vektor erhalten kann. Sowie jede andere Möglichkeit, die einen normalen Vektor aus allen Varianten auswählt...

Ganz genau. Nicht im allgemeinen Fall.

--

Ich glaube, ich habe eine schnelle Lösung gefunden. Als ich mich zum Schreiben hinsetzte und mich über den Algorithmus entspannte, tauchte er einfach auf.

Von dem erzeugten Vektor x1r wird also einfach seine Projektion auf x0 subtrahiert (d. h. x0*sp(x0,x1r), wobei sp() das Skalarprodukt ist).

Kurz gesagt, die Formel ist in einer Zeile: x1 = x1r - x0*sp(x0,x1r);

:))

 
Kurz die Formel in einer Zeile: x1 = x1r - x0*sp(x0,x1r);

:))

Ja, aber man muss sie anschließend angleichen.

Nun, jedenfalls in einer Zeile: x1 = norm(x1r - x0*sp(x0,x1r))

 
MetaDriver:

Für das flache Bild scheint es zu funktionieren. Es scheint mir, dass dies auch für den N-dimensionalen Fall funktioniert. Irgendwelche Einwände?

Sieht aus, als wäre es an der Zeit, ein Skript zu schreiben und es zu überprüfen... :)

Sie müssen es nicht schreiben. Der Beweis:

sX = (a1+b1,a2+b2); dX = (a1-b1,a2-b2);

Da es sich bei den Vektoren a und b um Einheitsvektoren handelt, ist das entsprechende Parallelogramm ein Rhombus und seine Diagonalen stehen senkrecht aufeinander, so dass Summe und Differenz orthogonal zueinander sind. Der Austausch von Modulen ist also gleichbedeutend mit einer Drehung des einen Moduls um 90 Grad nach rechts und des anderen nach links. In kartesischen Koordinaten können wir dies einfach durch Umordnung der ersten und zweiten Koordinate ausdrücken:

sXtr = (a2-b2,a1-b1); dXtr = (a2+b2,a1+b1)

=>

sXtr+dXtr = (2*a2,2*a1) ist ein Vektor mit dem Modulus 2 und offensichtlich orthogonal zum Vektor (a1,a2), also dem Vektor a. H.t.c.

 
Alles, was bleibt, ist, in einer Schleife zu laufen. for(i=0; i<InpVectorCount; i++) {....}
 
MetaDriver:
Alles, was bleibt, ist, in einer Schleife zu laufen. for(i=0; i<InpVectorCount; i++) {....}
Nein, es geht immer noch darum, zunächst den richtigen "willkürlichen" Vektor zu wählen, der schließlich die Orthogonalität für die gesamte Menge ergibt. D.h. Willkür erweist sich als gar nicht willkürlich. Wir kommen noch einmal darauf zurück, wie man den erforderlichen Ausgangsvektor berechnet.
 
alsu:
Nein, es geht immer noch darum, zunächst den richtigen "willkürlichen" Vektor zu wählen, der der gesamten Menge Orthogonalität verleiht. D.h. willkürlich ist überhaupt nicht willkürlich. Wir kommen noch einmal darauf zurück, wie man den erforderlichen Ausgangsvektor berechnet.
Blödsinn. Ich überprüfe nur jeden Schritt. Wenn bei einem beliebigen Transformationsschritt ein Vektor an den nächsten in der Menge angrenzt, erzeugen wir erneut einen Zufallsvektor und wiederholen den Vorgang. Da dieser Fall unwahrscheinlich ist (bei endlicher Dimension), ist es einfacher (billiger), als sofort zu vermuten, dass er linear abhängig ist (Suche nach dem Rang der Matrix).
 
MetaDriver:
Blödsinn. Nur Kontrollen bei jedem Schritt. Wenn bei einem beliebigen Schritt der Transformation ein Vektor dem nächsten Vektor in der Menge widerspricht, erzeugen wir den ursprünglichen Zufallsvektor erneut und wiederholen das Verfahren. Da dieser Fall unwahrscheinlich ist (bei endlicher Dimension), ist es einfacher (billiger), als sofort zu vermuten, dass er linear abhängig ist (Suche nach dem Rang der Matrix).
Sie kann nicht mitgerichtet werden, sondern nur in einem indirekten Winkel zu allen oder einigen Vektoren
 
MetaDriver:
Blödsinn. Nur Kontrollen bei jedem Schritt. Wenn bei einem beliebigen Schritt der Transformation ein Vektor dem nächsten Vektor in der Menge widerspricht, erzeugen wir den ursprünglichen Zufallsvektor erneut und wiederholen das Verfahren. Da dieser Fall unwahrscheinlich ist (bei endlicher Dimension), ist es einfacher (billiger), als sofort zu vermuten, dass er linear abhängig ist (Suche nach dem Rang der Matrix).
Und es ist billiger, weil das Skalarprodukt noch berechnet werden muss (durch den Algorithmus). Wenn es sich herausstellt, dass es gleich eins ist, setzen wir zum Anfang zurück und wiederholen den Vorgang. D.h. bei jedem Schritt einfach prüfen, ob(cp(a,b)! = 1.0) {}