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

Lösen eines überbestimmten Gleichungssystems

 

Horst

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2012, 17:35     Titel: Lösen eines überbestimmten Gleichungssystems
  Antworten mit Zitat      
Hallo,

ich habe folgenden Code geschrieben:

Code:

function F_gui= Glgsys_num_gui(theta)
    .
    .
    .
    .
Ttraf = eye(4);                              

n=length(a);                                       % n = Anzahl Gelenke

for i = 1:1:n
    TD = [ cos(theta(i)) -cos(alpha(i))*sin(theta(i))  sin(alpha(i))*sin(theta(i)) a(i)*cos(theta(i));
              sin(theta(i)) cos(alpha(i))*cos(theta(i))   -sin(alpha(i))*cos(theta(i)) a(i)*sin(theta(i));
              0             sin(alpha(i))                 cos(alpha(i))                d(i);
              0             0                             0                            1];
   
    Ttraf = Ttraf * TD;                          % hier wird die Transformationsmatrix TD0_5 gebildet
    disp(Ttraf)                                  % um die Einzelmatrizen nachvollziehen zu können
   
end


hiermit wird eine 4x4 Transformationsmatrix aufgestellt wobei alle Werte außer theta(i) definiert werden.
Nach aufstellen dieser Matrix soll sie nun in ein Gleichungssystem überführt werden:

Code:
F_gui = zeros(16,1);                  
% F_gui = sym('F_gui', [16 1]);        

for j = 1:1:16                                      
    F_gui(j) = Ttraf(j) - P(j);                      

end
 


wobei P ebenfalls eine 4x4 Matrix mit vorgegebenen Werten ist.
Die letzte Zeile ist wie bereits bei der Transformationsmatrix 0 0 0 1, liefert also nach Aufstellen der einzelnen Gleichungen nur wahre Aussagen.

Bleiben 12 Gleichungen mit im jetzigen Fall 5 unbekannten theta1 - theta5

Da es sich um nichtlineare Gleichungen handelt müssen diese ja numerisch gelöst werden (oder?)
also habe ich den Befehl fsolve verwendet:

Code:

function loes_theta = invkine(~)        

num_lines = 1;
defAns = { '20 1 1 1'};                   % default initial conditions

theta0z = inputdlg('Die vermuteten Winkel [rad], die von den Gelenken 1..n in der gegebenen Position eingenommen werden','Startwertvorgabe', num_lines, defAns);
theta0 = str2num(theta0z{1});             %#ok<*ST2NM> % number of input arguments = number of joints

% theta0 = [20 1 1 1];
options=optimset('Display','iter');       % Option to display output
theta = fsolve(@Glgsys_num_gui,theta0,options);  % Call solver

loes_theta = theta;

 


soweit aktueller Stand.

Matlab gibt mir bei Ausführen des Programms folgende Fehlermeldung:

Warning: Trust-region-dogleg algorithm of FSOLVE cannot handle non-square systems; using Levenberg-Marquardt
algorithm instead.
> In fsolve at 303
In invkine at 14
Index exceeds matrix dimensions.


Error in C:\Program Files\MATLAB\R2012a\toolbox\shared\optimlib\finDiffEvalAndChkErr.p>finDiffEvalAndChkErr (line 26)


Error in C:\Program Files\MATLAB\R2012a\toolbox\shared\optimlib\finitedifferences.p>finitedifferences (line 128)


Error in levenbergMarquardt (line 87)
[JAC,~,~,numEvals,evalOK] = finitedifferences(XOUT,funfcn{3},[],[],[],costFun, ...

Error in fsolve (line 404)
[x,FVAL,JACOB,EXITFLAG,OUTPUT,msgData] = ...

Error in invkine (line 14)
theta = fsolve(@Glgsys_num_gui,theta0,options);


Kann mir jemand weiterhelfen wo grundsätzlich mein Fehler liegen könnte?


flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2012, 18:26     Titel:
  Antworten mit Zitat      
probiere mal http://www.mathworks.de/help/toolbox/stats/nlinfit.html
Private Nachricht senden Benutzer-Profile anzeigen
 
hpsz66
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.07.11
Wohnort: Kirn
Version: ---
     Beitrag Verfasst am: 19.08.2012, 20:07     Titel:
  Antworten mit Zitat      
Da die Aufgabenstellung zu einem nichtlinearen überbestimmten Gleichungssystem führt, ist es möglicherweise sinnvoll die Aufgabe auch so von Anfang an etwas elementarer als System in der Form :
LS - RS = 0 | für alle Einzelgleichungen zu formulieren.

Eine elementare - aber gute Optim.-Methode kann mit Hilfe der Fitneß-Funktion gebildet werden (Literatur / Wikipedia). Diese ist zwar langsam, kann aber - gegenüber den meisten anderern Methoden ohne Derivate (Matrizen mit Differenzialoperatoren) bei guter Konvergenz arbeiten.
Der Schwerpunkt liegt hierbei nicht bei dem korrekten Handling (Matlab), sondern in der guten Schleifenprogram. und guter Parameterwahl.
( Gewichte und Bewertungsfunktion ((f(k)(vx))^1.4) )
zuzüglich einer Fehler-Nachkontrolle.
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2012, 22:10     Titel:
  Antworten mit Zitat      
hpsz66 hat Folgendes geschrieben:

Eine elementare - aber gute Optim.-Methode kann mit Hilfe der Fitneß-Funktion gebildet werden (Literatur / Wikipedia). Diese ist zwar langsam, kann aber - gegenüber den meisten anderern Methoden ohne Derivate (Matrizen mit Differenzialoperatoren) bei guter Konvergenz arbeiten.


Das stimmt schon, aber Du möchtest das System mit einem genetischen Algorithmus lösen?
Aber langsam ist ein GA auch nicht, denn den kann man wirklich sehr schön parallelisieren.

Also wenn wir das jetzt als allgm. Optimierungsproblem auffassen, dann gibt es da noch einige andere Ansätze, obwohl ich wirklich das empfehle http://de.wikipedia.org/wiki/Ockhams_Rasiermesser
Zitat:

Von mehreren möglichen Erklärungen ein und desselben Sachverhalts ist die einfachste Theorie allen anderen vorzuziehen.

Eine Theorie ist einfach, wenn sie möglichst wenige Variablen und Hypothesen enthält, die in klaren logischen Beziehungen zueinander stehen, aus denen der zu erklärende Sachverhalt logisch folgt.
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.