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

Matlab Fsolve Funktionsaufruf

 

OlegZ

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2013, 21:29     Titel: Matlab Fsolve Funktionsaufruf
  Antworten mit Zitat      
Hallo,

ich möchte gerne ein nichtlineares Gleichungssystem mit dem Befehl fsolve numerisch lösen, leider stellen sich mir einige Probleme in den Weg. Zur Ausgangsfunktion. Ich möchte die Rückwärtstransformation einer Roboterstruktur berechnen und habe dafür 4 Funktionen aufgestellt.
- Die Initialisierungsfunktion, die die Parameter festlegt und die Rückwärtstrafo aufruft
-die Drehmatrix-Funktion zur Erstellung homogener Lagematrizen
- die Rückwärtstafo-Funktion, die die weiteren Parameter festlegt und den fsolve Befehl beinhaltet
- die gleichungssystem-Funktion, die für den fsolve-Befehl notwendig ist. In Ihr führe ich eine Differentiation jedes Eintrags meiner Homogenen Lagematrizen in Abhängigkeit der symbolischen Variable "b" durch.

Das aufgestellte Gleichungssystem soll dann mit den Anfangswerten x0 nach dem Verfahren Levenberg-Marquardt numerisch gelöst werden.

Leider erhalte ich den Error:
Code:
Error using fsolve (line 280)
FSOLVE requires all values returned by user functions to be of data type double.

Error in rueckwaertstrafo (line 57)
    q= fsolve(@gleichungssystem,x0,options);

Error in init_modell_staeubli_19_08 (line 53)
    q=rueckwaertstrafo(dhp);
 


Im Anhang findet ihr die m-files.

Wo ist mein Fehler?

Besten Dank im Voraus.

OlegZ

rueckwaertstrafo.m
 Beschreibung:

Download
 Dateiname:  rueckwaertstrafo.m
 Dateigröße:  1.01 KB
 Heruntergeladen:  257 mal
gleichungssystem.m
 Beschreibung:

Download
 Dateiname:  gleichungssystem.m
 Dateigröße:  120.19 KB
 Heruntergeladen:  368 mal
init_function.m
 Beschreibung:

Download
 Dateiname:  init_function.m
 Dateigröße:  850 Bytes
 Heruntergeladen:  290 mal
drehmatrix.m
 Beschreibung:

Download
 Dateiname:  drehmatrix.m
 Dateigröße:  490 Bytes
 Heruntergeladen:  253 mal


Harald
Forum-Meister

Forum-Meister


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

die Fehlermeldung besagt es an sich schon. Ein Gleichungssystem numerisch lösen bedeutet, dass eben keine Variablen mehr in deinem erg auftreten dürfen.
Macht
Code:

hier das, was du möchtest?

Grüße,
Harald

(Warum eigentlich der Aufwand mit den symbolischen Matrizen, wenn du ohnehin numerisch rechnen willst??)
Private Nachricht senden Benutzer-Profile anzeigen
 
OlegZ

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2013, 00:12     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort. Um deine Frage in Bezug auf die symbolischen Matrizen zu beantworten. Ich ersetze die variablen Absolutdrehwinkel durch symbolische Variablen, da ich diese mithilfe der Rückwärtstransformation ermitteln möchte. Diese Ermittlung beinhaltet eine numerische Lösung nach dem Levenberg-Marquardt-Verfahren.

Mein Problem ist die Übergabe der 16 Einträge der Differenz der homogen Lagematrizen. Lasse ich sie mir zuerst im Command Window ausgeben und kopiere sie in die Funktion"gleichungssystem", funktioniert die numerische Lösung.
Ich möchte nun die 16 Einträge direkt in der Funktion "gleichungssytem" ermitteln und dann mithilfe von fsolve lösen. Mein Problem ist hier die Parameterübergabe der Einträge der Lagematrizen.

Die Ergänzung um den Code:
erg = eval(erg)

führt zu:
Code:
Warning: Trust-region-dogleg algorithm of FSOLVE cannot handle non-square systems; using
Levenberg-Marquardt algorithm instead.
> In fsolve at 309
  In rueckwaertstrafo at 39
  In init_modell_staeubli_19_08 at 53

No solution found.

fsolve stopped because the last step was ineffective. However, the vector of function
values is not near zero, as measured by the default value of the function tolerance.

<stopping criteria details>


dhp =

1x7 struct array with fields:
    beta
    s
    d
    delta
    T
    xE
    yE
    zE
    De
    Dr


q_S1 =

   -1.8727


q_S2 =

    3.3332


q_S3 =

   -0.1506


q_S4 =

    1.5833


q_S5 =

    0.3188


q_S6 =

   -1.3077


v_max =

    10


a_max =

     5


Wie stell ich den Levenberg-Marquardt-Algorithmus direkt im fsolve-Befehl ein? Ich gehe davon aus, dass er deshlab kein Ergebnis gefunden hat..

Gruß OlegZ
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Wie stell ich den Levenberg-Marquardt-Algorithmus direkt im fsolve-Befehl ein?

Über die optimset und die 'Algorithm'-Option.

Zitat:
Ich gehe davon aus, dass er deshlab kein Ergebnis gefunden hat..

Ob du den Algorithmus auswählst oder MATLAB sich selbst dazu entscheidet, ist letztlich egal. Es wird eher in die Richtung gehen:
- gibt es überhaupt eine Lösung?
- ist der Startwert gut genug?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2013, 21:53     Titel:
  Antworten mit Zitat      
Hallo Harald,

erstmal vielen Dank für deine Denkanstöße. Ich vermute mein Problem liegt in der Übergabe des Gleichungssystems an die Funktion"gleichungssystem". Lasse ich mir den Vektor des Gleichungssystems in Abhängigkeit der Variable b im Command Window ausgeben und kopiere sie dann in die Funktion "gleichungssystem", funktioniert die numerische Lösung super.
Übergebe ich der Funktion aber nur das unaufgestellte Gleichungssystem der Differenzen der einzelen Einträge der homogenen Lagematrizen, bekomme ich die falschen Gelenkkoordinaten.

Hast du eine Idee, wie ich die Ausgabe im Command Window umgehe?

Schöne Grüße
OlegZ
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.08.2013, 22:02     Titel:
  Antworten mit Zitat      
Hallo,

liefert das denn etwas anderes als eval?
Das wäre meines Erachtens ja genau der Sinn von eval.

Und: bitte Code statt länglicher Beschreibungen ;)

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2013, 15:06     Titel:
  Antworten mit Zitat      
Hallo Harald,

ja,übergebe ich das gleichungssystem, welches ich mir vorher im command window ausgegeben habe, liefert mir die Funktion die gewünschten Variablen. Mit eval bekomme ich nun nur den Fehler:
Code:
Undefined function 'eval' for input arguments of type 'function_handle'.

Error in gleichungssystem (line 22)
 erg = eval(erg);

Error in fsolve (line 241)
            fuser = feval(funfcn{3},x,varargin{:});

Error in rueckwaertstrafo (line 42)
    q= fsolve(@gleichungssystem,x0);

Error in init_modell_staeubli_19_08 (line 53)
    q=rueckwaertstrafo(dhp);

Caused by:
    Failure in initial user-supplied objective function evaluation. FSOLVE cannot
    continue.


Im Anhang findest du nochmal die notwendigen Quellcodes. In der Funktion
"gleichungssystem" ist das funktionierende Gleichungssystem ausgeklammert.
Ich weiß, dass fsolve nicht damit klar kommt, dass ich ihm das gleichungssystem unausgegeben übergebe. Ich kenne nur keinen Kniff, wie ich dieses Problem umgehen kann. Wie sage ich ihm, dass mein Gleichungssystem von b abhängig ist?

Schöne Grüße
OlegZ

paket.rar
 Beschreibung:

Download
 Dateiname:  paket.rar
 Dateigröße:  3.5 KB
 Heruntergeladen:  234 mal
 
Harald
Forum-Meister

Forum-Meister


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

EVAL ist für Function Handles nicht definiert, aber das sagte ja schon die Fehlermeldung.

Die Funktion, die du bei FSOLVE angibst, muss einen double-Vektor zurückgeben. Die Definition eines Function Handles macht nur Sinn, wenn du es auch an einer Stelle auswertest. An welcher Stelle ist mir nicht klar.

Zitat:
welches ich mir vorher im command window ausgegeben habe,

Und wie?

Zitat:
dass ich ihm das gleichungssystem unausgegeben übergebe.

Was soll "unausgegeben" heißen?

Zitat:
Wie sage ich ihm, dass mein Gleichungssystem von b abhängig ist?

Vielleicht hilft dir das:
http://www.mathworks.com/help/optim.....ing-extra-parameters.html

Ich blicke bei diesem komplexen Beispiel und deinen Beschreibungen nicht durch, was du nun wie machen willst.
Vielleicht hilft es, an einem einfachen Beispiel erstmal die Arbeitsweise von FSOLVE kennenzulernen?

Die Verwendung globaler Variablen erschwert das Verständnis deiner Anwendung übrigens sehr - siehe auch die entsprechenden Code-Analyzer-Warnungen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2013, 19:04     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort. Ich werde weiter versuchen, mein Problem zu lösen und mit einem einfachen Beispiel beginnen.

OlegZ
 
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.