Frage

Ich habe sechs parametrische Gleichungen 18 (nicht tatsächlich 26) verschiedene Variablen, von denen 6 unbekannt sind.

ich mit ein paar Papierblöcke setzen konnte und herausfinden, was die Gleichungen für jede der Unbekannten sind, aber gibt es eine einfache Lösung programatic (Ich bin in Matlab zu denken), die die sechs Gleichungen ausspucken werde ich bin suchen?

EDIT: Schade, dies wird geschlossen, aber ich glaube, ich kann sehen, warum. Falls jemand noch interessiert ist, sind die Gleichungen (glaube ich) nicht-linear:

r11^2 = (l_x1*s_x + m_x)^2 + (l_y1*s_y + m_y)^2
r12^2 = (l_x2*s_x + m_x)^2 + (l_y2*s_y + m_y)^2
r13^2 = (l_x3*s_x + m_x)^2 + (l_y3*s_y + m_y)^2
r21^2 = (l_x1*s_x + m_x - t_x)^2 + (l_y1*s_y + m_y - t_y)^2
r22^2 = (l_x2*s_x + m_x - t_x)^2 + (l_y2*s_y + m_y - t_y)^2
r23^2 = (l_x3*s_x + m_x - t_x)^2 + (l_y3*s_y + m_y - t_y)^2

(Squared der rs, guter Ort @gnovice!)

Wo muss ich t_x t_y m_x m_y s_x und s_y

finden

Warum bin ich die Berechnung diese? Es gibt zwei Punkte p1 (bei 0,0) und p2 bei (t_x,t_y), für jede der drei Koordinaten (l_x,l_y {1,2,3}) Ich weiß, dass die Abstände (r1 & r2) zu diesem Punkt aus P1 und P2, aber in ein anderes Koordinatensystem. Die Variablen s_x und s_y definieren, wie viel ich brauchen würde, die einen Satz von Koordinaten zu skalieren, um andere zu gelangen, und m_x, m_y wie viel ich brauchen würde, übersetzen (mit t_x und t_y sind eine Möglichkeit zur Rotation Unterschied zu berücksichtigen in den beiden Systemen)

Oh! Und ich vergaß zu erwähnen, ich weiß auch, dass der Punkt (l_x,l_y) unter dem höchsten von p1 und p2, dh l_y 0, t_y) sowie l_y> 0 und l_y <t_y.

Es spezifisch genug scheint, dass ich vielleicht muss nur mein Pad raus und es durch mathematisch arbeiten!

War es hilfreich?

Lösung

Wenn Sie die Symbolic Toolbox , können Sie die Funktion LÖSEN. Zum Beispiel:

>> solve('x^2 + y^2 = z^2','z')    %# Solve for the symbolic variable z

ans =

  (x^2 + y^2)^(1/2)
 -(x^2 + y^2)^(1/2)

Sie können auch ein System von N Gleichungen für N Variablen lösen. Hier ist ein Beispiel mit zwei Gleichungen, 2 Unbekannten für (x und y) und 6 Parameter (a durch f) zu lösen:

>> S = solve('a*x + b*y = c','d*x - e*y = f','x','y')
>> S.x

ans =

(b*f + c*e)/(a*e + b*d)

>> S.y

ans =

-(a*f - c*d)/(a*e + b*d)

Andere Tipps

Sind sie linear? Wenn ja, dann können Sie Prinzipien der linearen Algebra verwenden, um eine 6x6-Matrix ein, die das Gleichungssystem darstellt, und lösen es jede Standard Matrixinvertierung Routine ...

, wenn sie nicht linear sind, sie müssen Sie Methoden der numerischen Analyse verwenden.

Wie ich von vielen Jahren erinnere vor, ich glaube, Sie dann ein System von linearen Annäherungen an die nichtlinearen Gleichungen erstellen, und das lineare System lösen, immer und immer wieder iterativ, die Antworten zurück in die Eingänge jedes Mal zugeführt wird, bis einige Fehlermetrik ausreichend klein wird, um anzuzeigen, Sie die Lösung erreicht haben. Es ist offensichtlich mit einem Computer getan, und ich bin sicher, es numerische Analyse-Software-Pakete sind, die dies für Sie tun, obwohl ich das als jedes beliebiges System von nichtlinearen Gleichungen vorstellen, fast unendlich Grad unterschiedlicher Art und Komplexitätsstufen umfassen kann , dass diese Software-Pakete, die linearen Annäherungen nicht für Sie erstellen können, (außer vielleicht in dem direkteste Standardfall), und Sie werden von Hand, dass ein Teil der Sache zu tun haben ot.

Ja, es wird (vorausgesetzt, diese sind lineare Gleichungen) - Sie dies tun, indem eine Matrix equiation zu schaffen, die auf Ihre 6 linearen Gleichungen äquivalent ist, zum Beispiel, wenn Sie die beiden equatrions haben:

6x + 12y = 9
7x - 8y = 14

Dieses äquivalent dargestellt werden kann als:

|6  12| |a|   |9 |
|7  -8| |b| = |14|

(Wo die zwei Matrizen zusammen multipled). Matlab kann dann lösen diese für die Lösung Matrix (a, b).

Ich habe nicht Matlab installiert, so dass ich fürchte, ich werde die Details an Ihnen zu verlassen haben: -)

Wie oben erwähnt, wird die Antwort hängt davon ab, ob Ihre Gleichungen sind lineare oder nicht-linear. Für lineare Systeme, können Sie ein einfaches Matrixsystem (aber nicht Verwendung Matrixinvertierung, Verwendung LU-Zerlegung (wenn Ihr System gut konditioniert)) eingerichtet.

Für nichtlineare Systeme, die Sie benötigen eine erweiterte Löser verwenden, wahrscheinlich eine gewisse Variation auf das Newton-Verfahren. Im Wesentlichen werden Sie Matlab Ihre sechs Gleichungen geben, und fragen sie für die Wurzel (Null) der alle Gleichungen gleichzeitig zu lösen. Es gibt mehrere Einschränkungen und Komplikationen, die ins Spiel kommen, wenn sie mit nicht-linearen Systemen zu tun, von denen ist die Notwendigkeit für eine anfängliche Schätzung , die jede Ihrer sechs unbekannten Variablen ein Wert nahe der wahren Lösung zuordnet . Ohne eine gute anfängliche Vermutung, der Solver überhaupt eine Lösung, die eine lange Zeit zu finden, oder nicht konvergieren zu einer Lösung in Anspruch nehmen, auch wenn ein solches vorhanden ist.

Vor Jahrzehnten entwickelt MIT MACSYMA, einem symbolischen Algebra-System für genau diese Art der Sache. MIT verkauft MACSYMA zu Symbolics, das ist ziemlich gut geklappt hat, ausgetrocknet, und weggeblasen. Da jedoch das Wunder der militärischen Mittel, eine frühe Version von MACSYMA war erforderlich, um die Regierung veröffentlicht werden. Diese Version wurde anschließend unter der GPL veröffentlicht und weiterhin beibehalten werden, unter dem Namen MAXIMUM.

Siehe http://maxima.sourceforge.net/ für weitere Informationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top