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

Jacobi-Matrix; Problem mit function handle

 

S_Fuchs
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 16.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2013, 19:11     Titel: Jacobi-Matrix; Problem mit function handle
  Antworten mit Zitat      
Hallo,

ich möchte ein Programm schreiben, dass die Jacobi-Matrix einer mehrdimensionalen (beliebigen) Funktion an einer bestimmten Stelle (x_0) ausgibt.

Der Anfang meines Versuchs sieht so aus:
Code:
function [J]=Jacobi(fhandle,x_0)

if length(x)==length(x_0);
J=sym(jacobian(fhandle,x));


Da der Benutzer eine Funktion angeben können soll, nutze ich "fhandle".
Die Funktionen sind im Allgemeinen von mehreren, beliebig vielen Variablen abhängig, zusammengefasst als Vektor x.

Mein Problem ist: Wie bekomme ich es hin, dass mein Programm den Vektor x, nach dessen einträgen die Jacobi-Matrix ja ableiten soll, aus der Funktion übernimmt?

Ich hab etwas rumprobiert, aber ich bin noch ein ziemlicher Anfänger und dankbar wenn ihr mir helfen könnt. Auch für weitere Tipps bin ich dankbar.

Eine Beispielfunktion, die ich versucht habe einzusetzen:
Code:
function [x,f]=beispielfunktion1(x)

f=[x(1).^2-3, 1-x(2), x(3).^3+x(3).^2+29];
Private Nachricht senden Benutzer-Profile anzeigen


HerrErnie
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2013, 02:49     Titel:
  Antworten mit Zitat      
Hallo,

Aus deinem Versuch werde ich zugegebenermaßen nicht ganz schlau. Zunächst wurde die Variable x gar nicht definiert. Desweiteren ist die Funktion jacobian meines Wissens nur für symbolische Ausdrücke gedacht. Und vor allem, wenn doch die symbolic math toolbox offenbar verfügbar ist, wozu dann der Aufwand?
Dein Beispiel könntest du auch einfach so mit vorhandenen Funktionen lösen:

Code:

syms x1 x2 x3
f=[x1^2-3, 1-x2, x3^3+x3^2+29];
J=subs(jacobian(f),[x1 x2 x3],x0); % Jacobi-Matrix ausgewertet im Vektor x0
 

Bin mir bei der Syntax von jacobian und subs gerade nicht 100% sicher, aber so in etwa dürfte das aussehen, notfalls in die Hilfe schauen.

Wenn es jedoch tatsächlich nur darum geht, eine per function-handle gegebene Funktion an einer bestimmten Stelle zu differenzieren, käme wohl eher der numerische Weg in Frage.

Ich hab das für ähnliche Zwecke vor einiger Zeit mal wie folgt gelöst:
Code:

function df=numdiff(f,x)
n=length(x);
E=speye(n);
e=eps^(1/3);
for i=1:n
 df(:,i)=(f(x+e*E(:,i))-f(x-e*E(:,i)))/(2*e); % zentraler Differenzenquotient
end
 


Die partiellen Ableitungen werden einfach durch den zentralen Differenzenquotienten approximiert. Als Eingabe wird hier jedoch kein function-handle, sondern eine anonyme Funktion f erwartet. Solange die Funktionswerte betragsmäßig nicht zu groß sind, erhielt ich damit meist ordentliche Resultate. Im Beispiel würde damit
Code:

f=@(x) [x(1).^2-3, 1-x(2), x(3).^3+x(3).^2+29];
J=numdiff(f,x0)
 

eine Approximation der Jacobi-Matrix im Vektor x0 ausgeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
S_Fuchs
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 16.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2013, 20:36     Titel:
  Antworten mit Zitat      
Danke für deine Antwort!

Ich muss auch gestehen dass ich vorher noch nicht mit der symbolic math toolbox gearbeitet habe. Wie ich das Beispiel damit lösen kann war mir noch einigermaßen klar, ich wollte es aber allgemein haben, weil ich mit der Jacobi-Matrix noch weiter arbeiten will (Newton-Verfahren).

Ich werde es dann doch numerisch angehen, auch da vielen Dank für deine Hilfe! Smile
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.