|
|
Gradient einer function handle |
|
StefanWK |

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 04.05.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.05.2015, 16:43
Titel: Gradient einer function handle
|
 |
Hallo Leute,
ich möchte gerne den Gradient einer function handle bestimmen, aber es funktioniert einfach nicht
also zB f=@(x1,x2)([x1*x2,x2])
wie kann ich hier den gradienten bestimmen? und wenn ich ihn bestimmt habe, wie kann ich ihn auswerten?
hintergrund ist, ich möchte ein Abstiegsverfahren programmieren und es wird mir explizit angegeben, mit function handles zu arbeiten und bei allgemeinen FUnktionen kann ich den Gradienten auch nicht "von Hand" berechnen sonst funktioniert mein programm ja auch nur für eine Funktion
mfG
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 10.05.2015, 17:51
Titel:
|
 |
halli hallo
was hast du denn bis jetzt versucht ? welche fehler sind aufgetreten. code beispiele fehlermeldungen etc
sihe dazu auch am besten mal den thread aus meiner signatur. das erspaart allen viel arbeit
_________________
richtig Fragen
|
|
|
StefanWK |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 04.05.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.05.2015, 18:18
Titel:
|
 |
hallo,
normalerweise gebe ich dir recht aber hier handelt es sich ja tatsächlich nur um einen Befehl.
Mein Problem war das ich den Gradienten zwar erhalten habe aber ihn nicht auswerten konnte
habs aber mittlerweile gelöst
syms x1 x2
f=@(x1,x2)(Fkt vorschrift)
g=gradient(f,[x1,x2])
h=inline(g)
der inline befehl hat mir die ganze Zeit gefehlt aber iwo konnte ich ihn auftreiben jetzt klappts ^^
Aber vllt noch eine andere Frage:
in mein Abstiegsverfahren wird jetzt eine function handle übergeben deren Funktion beliebige Dimension (also R^n nach R) haben kann.
das Problem habe ich jetzt beim aufstellen des Gradienten, denn dort muss ich ja wissen wieviele x1,x2,.... ich syms (en) muss.
Ich habe das jetzt so gelöst:
mein Programm funktioniert also maximal bis n=6.
Gut ich könnte natürlich beliebig viele xi da oben hinschreiben aber sonderlich elegant sieht das nicht aus, kann man das irgendwie besser machen?
mfG
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.05.2015, 18:35
Titel:
|
 |
Hallo,
da das Abstiegsverfahren numerisch ist, werden typischerweise auch die Gradienten numerisch bestimmt. Sinnvoller als die symbolische Funktion wäre es also wohl, den Gradient in jeder Richtung durch
( f(x + h) - f(x-h) ) / (2*h)
anzunähern.
Grüße,
Harald
|
|
|
StefanWK |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 04.05.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.05.2015, 18:47
Titel:
|
 |
Hallo Harald,
darf ich fragen wie du das sinnvoller meinst? Meinst du das Programm läuft schneller durch, oder einfach nur weil es meistens so gemacht wird?
Denn der Gradient der symbolischen Funktion ist ja exakt enthält also keinerleir approximationsfehler.
Grüße
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.05.2015, 20:02
Titel:
|
 |
Hallo,
das Problem bei einer Optimierung ist, dass der Gradient in realen Problemen häufig gar nicht analytisch berechnet werden kann. Wenn man den Code also auch für solche Fälle nutzen will, dann bleibt gar nichts anderes übrig, als die Gradienten numerisch anzunähern.
Umgekehrt: wenn man den Gradienten symbolisch angeben kann und es sich um wirklich einfache Probleme handelt, dann braucht man ihn nur 0 zu setzen und kann das auch gleich symbolisch lösen.
Grüße,
Harald
|
|
|
StefanWK |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 04.05.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.05.2015, 12:44
Titel:
|
 |
okay, das macht natürlich Sinn, nächstes mal werde ich dann wohl den gradienten numerisch approximieren,
danke für die Hilfe
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|