Verfasst am: 03.02.2014, 12:28
Titel: Frage zu gradient an den Endpunkten
Hallo,
gesucht ist die 2. Ableitung. Hier ein Minimalbsp.:
Code:
x = 0:.5:10; f = x.^5;
d1 = 5*x.^4; d2 = 20*x.^3;
FX1 = gradient(f,x); FX2 = gradient(FX1,x);
clf;
plot(x,d1,'+-'); hold on; plot(x,d2,'+-r'); hold on
plot(x,FX1,'+g'); hold on; plot(x,FX2,'+y'); hold on
legend('1. Ableitung(exakt)', '2. Ableitung(exakt)', '1.Ableitung(approx)', '2.Ableitung(approx)')
Was passiert da am rechten Rand? Jeh höher die Ableitung, desto ungenauer werden offensichtlich die approximierten Ergebnisse!? In der Matlab-Hilfe steht unter gradient (ganz unten):
Zitat:
The gradient at the end points, where i=1 and i=N, is calculated with a single-sided difference between the endpoint value and the next adjacent value within the row.
Wie sollte man denn die 2.Ableitung von Messwerten approximieren? Ich hatte mir überlegt zuerste mit interp1 die Messwerte zu interpolieren, um dann mit gradient (zweimal anwenden) die 2. Ableitung zu bestimmen...
bei Schrittweite h haben zentrale Differenzenquotienten einen Fehler der Größenordnung h^2, einseitige Differenzenquotienten einen Fehler der Größenordnung h. Dies bedeutet, dass einseitige Differenzenquotienten erheblich ungenauer sind. Wenn man aber nur zu einer Seite hin benachbarte Messwerte hat, bleibt einem nichts anderes übrig.
Wenn man nun mit einem Fehler von Größenordnung h behaftete Werte zur Verwendung einer Ableitung nimmt, kommt ein Fehler von Größenordnung 1 heraus, und genau das beobachtest du hier.
Falls du Ableitungen an den Randpunkten benötigst, sehe ich auf Anhieb nur die Möglichkeit, mit mehr Messwerten nahe am Rand zu arbeiten.
x = 0:.5:10; f = x.^5;
d1 = 5*x.^4; d2 = 20*x.^3;
FX1 = gradient(f,x); FX2 = gradient(FX1,x);
FX2_del = 4*del2(f,x);
clf;
plot(x,d1,'+-'); hold on; plot(x,d2,'+-r'); hold on
plot(x,FX1,'+c'); hold on; plot(x,FX2,'+m'); hold on
plot(x,FX2_del,'+','color',[0.50.50]);
legend('1. Ableitung(exakt)', '2. Ableitung(exakt)', '1.Ableitung(approx)', '2.Ableitung(approx)','2.Ableitung mit del2')
Es wurde also die Schrittweise vergrößert. Wenn man höhere Ableitungen benötigt darf man also nicht einfach gradient mehrfach anwenden, sondern muss die entsprechende Näherungsformel anwenden. Für die zweite Ableitung kann man dafür in Matlab del2 verwenden (siehe Beispiel oben).
Man kann eine noch höhere Genauigkeit erreichen wenn man mehr Nachbarpunkte mit berücksichtigt.
Danke für Eure Hilfe! Nach so etwas wie del2 hab ich gesucht!
Da ich den Code auch in GNU Octave brauche, ist mir folgendes aufgefallen: Unter GNU Octave kann man die Schrittweite nur als ein Skalar (z.B. "dx") übergeben (also nicht wie in Matlab als Vektor):
Code:
dx = .5; x = 0:dx:10; f = x.^5;
d1 = 5*x.^4; d2 = 20*x.^3;
FX1 = gradient(f,dx); FX2 = gradient(FX1,x);
FX2_del2 = 4*del2(f,dx);
clf; hold on; grid on
plot(x,d1,'+-'); plot(x,d2,'+-r');
plot(x,FX1,'+c'); plot(x,FX2,'+m');
plot(x,FX2_del2,'+','color',[0.50.50]);
legend('1. Ableitung(exakt)', '2. Ableitung(exakt)', '1.Ableitung(approx)', '2.Ableitung(approx)','2.Ableitung mit del2')
hier hat sich nochmal ein Problem aufgetan: Die Approximation der 2.Ableitung mit der Matlabfunktion del2 ist offensichtlich doch für mein Vorhaben leider zu ungenau....
Also ich bin auf der Suche nach einer Approximation der 2.Ableitung, die vier bis sechs Nachbarpunkte berücksichtigt. Ich jongliere gerade mit Taylorreihen herum und muss feststellen, dass das gar nicht so trivial ist. Das muss doch schonmal jemand gemacht haben? Kennt vielleicht jemand ein Buch oder PDF? Eine Approximation, die vier bzw. sechs Nachbarpunkte berücksichtigt wäre toll! Das würde mir eine Menge Arbeit ersparen....
Hab hier was gefunden. Im PDF " Derivative Approximation by Finite Differences" steht auf Seite 3 die 2.Ableitung mit zwei Nachbarpunkten und einer Fehlerordnung . Ich werde das gleich mal testen, ob das was bringt....
Hab mir gedacht, dass ich an den Rändern die Ableitung mit del2 approximiere, da sich mit dort die Steigungen kaum ändert...
Liebe Grüße
cordoba
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
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.