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

Ominöses Verhalten von subs()

 

Carnot
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 14.04.14
Wohnort: Nürnberg
Version: ---
     Beitrag Verfasst am: 15.04.2014, 20:06     Titel: Ominöses Verhalten von subs()
  Antworten mit Zitat      
Guten Abend,
nachdem mir gestern so gut geholfen wurde, möchte ich nocheinmal um Hilfe bei einem anderen Problem bitten.

Ich habe einen Vektor \vec{\theta}=\begin{pmatrix} \theta_1 \\. \\.\\. \\ \theta_n \end{pmatrix} mit n Einträgen. Diesen Vektor benötige ich, um mir Matrizen zu basteln.
Matrix 1 könnte beispielsweise so aussehen: M_1=\begin{pmatrix} cos(\theta_1) & 0 \\ 1 & sin(\theta_1) \end{pmatrix}

Oder auch so wie Matrix Nr 2: M_2=\begin{pmatrix}cos(\theta_n) & 0 \\ 1 & sin(\theta_n) \end{pmatrix}

Wichtig ist, das die Basisstruktur der Matrix immer gleich bleibt, nur die Argumente der Kosinüsse ändern sich.

In Matlab habe ich mir das ganze so zurechtgebogen:
Code:
n=5;
syms m ;
theta = sym('theta', [1 n]);
M_n=sym('[cos(theta(m)); sin(theta(m)) ]');
 


Wenn ich jetzt die Matrix für  \theta_3  haben möchte hänge ich noch folgendes an den Code an:
Code:
M_3=subs(M_n,m,3);


Wenn ich die in der Kommandezeile dann die Variable M_3 aufrufe steht da:
M_3 =

[ cos(theta(3)), 0]
[ 1, sin(theta(3))]

Wunderbar, genau so sollte es auch sein!

Wenn ich aber folgenden Code anhänge:
Code:
M_3=subs(M_n,m,1);

dann bekomme ich folgende Matrix:
M_3 =

[ cos(pi^(1/4)/gamma(3/4)), 0]
[ 1, sin(pi^(1/4)/gamma(3/4))]

Was ist hier falsch gelaufen? Woher kommt das Pi und das gamma? Die einzige Änderung die ich gemacht habe war: statt subs(M_n,m,3) rufe ich subs(M_n,m,1) auf? Wieso geht das mit der 1 dann so kaputt? Es funktioniert mit jeder Zahl aber nicht mit der 1 Evil or Very Mad
Hat jemand ne Idee?

Zuletzt bearbeitet von Carnot am 15.04.2014, 20:25, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.04.2014, 20:14     Titel:
  Antworten mit Zitat      
Hallo,

woher kommt D?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Carnot
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 14.04.14
Wohnort: Nürnberg
Version: ---
     Beitrag Verfasst am: 15.04.2014, 20:26     Titel:
  Antworten mit Zitat      
Hallo Harald,
es müsste natürlich M_n heißen. Habs korrigiert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.04.2014, 21:29     Titel:
  Antworten mit Zitat      
Hallo,

ich kann mir das auch nicht erklären.

Jedoch macht der Code ohnehin nicht das, was du denkst:
Code:

funktioniert auch, obwohl theta nur 5 Elemente hat.

Und
Code:

gibt etwas in Abhängigkeit von theta(3) zurück, Eingabe von
Code:

liefert aber theta3.

Was ist denn das Ziel des ganzen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Carnot
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 14.04.14
Wohnort: Nürnberg
Version: ---
     Beitrag Verfasst am: 15.04.2014, 22:22     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:

Code:

funktioniert auch, obwohl theta nur 5 Elemente hat.


Ja, das ist mir auch schon aufgefallen. Es spielt aberkeine große Rolle, da über eine Abfrage sichergestellt wird, dass auf keine Elemente größer als n zugegriffen wird. Ich hab den Code hier nur auf das wichtigste gekürzt.


Harald hat Folgendes geschrieben:

Code:

gibt etwas in Abhängigkeit von theta(3) zurück, Eingabe von
Code:

liefert aber theta3.

Was ist denn das Ziel des ganzen?

Ja das ist auch so beabsichtigt. Später im Code wird theta3 dann ersetzt mit
Code:
M_3=subs(M_3, theta(3), pi);


Das Ganze ist Teil einer inversen Kinematik Simulation. Physikalisch kann man sich das so deuten: in den Matrizen stecken die translatorischen und rotatorischen Anteile eines n-gliedrigen Roboterarms. Der Vektor theta repräsentiert die generalisierten Koordinaten des Systems. Um diesen Arm schrittweise an einen beliebigen Punkt anzunähern, brauch ich die Jacobimatrizen der einzellnen M_n Matrizen, weshalb ich mir Rechnerei mit den sym()bolischen Zeug überhaupt antue.

Ich hatte eigentlich gehofft in Matlab ginge das ganze recht intuitiv von der Hand Sad

Hast du eine Ahnung ob der Aufruf
Code:
theta = sym('theta', [1 n]);
überhaupt dafür gedacht ist um einen Vektor mit n Variablen zu implementieren? Vielleicht gibts noch andere Möglichkeiten? Wichtig ist eben, dass ich die Jacobimatrix davon bilden kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2014, 09:41     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Hast du eine Ahnung ob der Aufruf Code:
theta = sym('theta', [1 n]);
überhaupt dafür gedacht ist um einen Vektor mit n Variablen zu implementieren?

Das ja, aber ich habe wie gesagt andere Bedenken.

Wäre es nicht einfacher, die Matrizen abhängig von alpha zu definieren und dann theta(m) einzusetzen als von theta(m) und dann m einzusetzen?

Grüße,
Harald
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 - 2025 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.