WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

symbolic toolbox, MuPad: seltsames Problem beim einsetzen

 

jackomo
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2013, 10:19     Titel: symbolic toolbox, MuPad: seltsames Problem beim einsetzen
  Antworten mit Zitat      
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]]]);
 


Das ist die Ausgangslage.

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;
 


x := matrix([1,1,1]) //um es einfach zu halten und zu sehen wohin die Koordinatenachsen nach der n-ten Koordinatentransformation zeigen.

Aufgerufen mit:
Code:
c := f(1,trafo,x)


Und jetzt der Spaß:
Output:
Code:
matrix([[cos(`Θ`) + a*cos(`Θ`) - cos(`α`)*sin(`Θ`) + sin(`Θ`)*sin(`α`)], [sin(`Θ`) + a*sin(`Θ`) + cos(`Θ`)*cos(`α`) - cos(`Θ`)*sin(`α`)], [d + cos(`α`) + sin(`α`)]])


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
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.