Verfasst am: 28.04.2013, 10:19
Titel: symbolic toolbox, MuPad: seltsames Problem beim einsetzen
Hallo Mitglieder,
ich habe ein wie gesagt seltsames Problem beim einsetzen von Zahlen/Variablen in Variablen.
Die Rechnungen sind an sich nicht schwer, es ist ein Problem mit der Syntax und dem Versändnis wie das MuPad arbeitet.
Ich will Transformationen mit Transformationsmatrizen automatisierten (nach der Danavit-Hartenber-Konvention).
Hierzu habe zwei Matrizen die allgemein (!!) die Transformation beschreiben:
(Ergebnis vorheriger Rechenschritte, aber korrekt. Die Variablen alpha und Theta habe ich duch `α` und `Θ` ersetzt, da alpha und Theta bereits besetzte funktionen im MuPad sind)
Code:
// A beschreibt die Rotation
A := matrix([[cos(`Θ`), -cos(`α`)*sin(`Θ`), sin(`Θ`)*sin(`α`)], [sin(`Θ`), cos(`Θ`)*cos(`α`), -cos(`Θ`)*sin(`α`)], [0, sin(`α`), cos(`α`)]]);
// r beschreibt die Translation
r := matrix([[a*cos(`Θ`)], [a*sin(`Θ`)], [d]]);
Und eine Matrix, die die Variablen der Transformation enthält, also beschreibt wie die Transformation aussieht.
(Hier einmal exemplarisch für 3 Transformationen)
Code:
// Erklärung: Vier Spalten, beschreiben jeweils alpha , a , d , theta der jeweiligen Transformation
trafo := matrix([[0,0,0,`Θ`[1]],[pi/2,0,0,`Θ`[2]],[pi/4,l[1],0,`Θ`[3]]]);
Eine Transformation des Vektors x bekommt man, indem man rechnet: x_neu = r + A*x
Jetzt will ich das in einer kleinen Schleife automatisieren:
Code:
// drehen von CS0 = CS1 zu CSn
f := proc(anz, trafo, x) local `α`, a, d, `Θ`;begin
for i from 1 to anz do
`α`:= trafo[i,1];
a := trafo[i,2];
d := trafo[i,3];
`Θ` := trafo[i,4];
x := r + A*x;
end_for;
return(x);
end_proc;
Rufe ich die Befehle von Hand der Reihe nach auf, funktioniert es, ruft das Programm es auf, funktioniert das ersetzen/einsetzen in A und r nicht.
Hab schon `α` und `Θ` in alph und The umbenannt, selbes Problem (es liegt also nicht daran, a und d werden auch nicht richtig ersetzt, ich mag nur die schöne Darstellung der Winkel). Von Hand funktoniert es, dann sind die Variablen aber immer gleich global und nicht nur für den Durchlauf belegt.
Wo liegt mein Problem? mit eval() hatte ich auch keinen Erfolg.
Liebe Grüße
Jack
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.