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

Höhere numerische Ableitung einer Funktion

 

supernerd
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2011, 17:34     Titel: Höhere numerische Ableitung einer Funktion
  Antworten mit Zitat      
Hi,
Ich schreibe gerade eine Funktion, bei der ich die numerische Ableitung einer beliebigen Funktion brauche.
Das habe ich soweit:
Code:


function y= numdiff(f,x,h)
% Berechnet die numerische Ableitung der Funktion f an der Stelle x der
% Schrittweite h mit dem Vorwärtsdifferenzenquotient:

y=(f(x+h)-f(x))/h;
 

Das funktioniert ja auch, nur jetzt hätte ich gerne die abgeleitete Funktion f`(x) als Rückgabewert, also nicht einfach nur eine Zahl (natürlich braucht es den x Parameter auch nicht mehr), damit ich die Function verschachteln kann und so zb die zweite numerische Ableitung bilden kann.

Ich hoffe irgendjemand versteht, was ich da rede Laughing
Danke!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.10.2011, 18:35     Titel:
  Antworten mit Zitat      
Hallo,

das kannst du am besten rekursiv angehen, indem du die n-te Ableitung als Differenzenquotienten der (n-1)-ten Ableitungen berechnest. Wenn du letztlich beim Funktionswert an sich angelangst, solltest du natürlich den zurückgeben.

Code:
function y= numdiff(f,x,h, n)
% n: Ordnung der Ableitung
% Berechnet die numerische Ableitung der Funktion f an der Stelle x der
% Schrittweite h mit dem Vorwärtsdifferenzenquotient:

if n == 0
    y = f(x);
else
    y=(numdiff(f, (x+h), h, n-1) - numdiff(f, x, h, n-1))/h;
end


Ich würde zentrale Differenzen vorschlagen, da sich generell die Genauigkeit erhöht, ohne dass der Rechenaufwand steigt. Also
Code:
y=(numdiff(f, x+h, h, n-1) - numdiff(f, x-h, h, n-1))/(2*h);


Achtung: wenn h zu klein wird, kommt es schnell zu numerischen Fehlern:

Code:
numdiff(@(x) x.^3, 4, 1e-4, 3) % funktioniert
numdiff(@(x) x.^3, 4, 1e-6, 3) % funktioniert nicht, weil h bereits zu klein


Wenn die Funktion halbwegs übersichtlich ist, würde ich mir überlegen, die Ableitung durch die Symbolic Math Toolbox zu finden und dann auszuwerten, da numerische Ableitungen eben numerisch problematisch sind.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2011, 18:56     Titel:
  Antworten mit Zitat      
Vielen Dank, das hat mir sehr weitergeholfen Smile
Die Idee mit der Rekursion hatte ich auch schon, nur wusste ich überhaupt nicht wie ich sie umsetzen sollte, aber jetzt ist der Knoten geplatzt!
Danke nochmal!
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.