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

Frage zu gradient an den Endpunkten

 

cordoba
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2014, 12:28     Titel: Frage zu gradient an den Endpunkten
  Antworten mit Zitat      
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...

Liebe Grüße

cordoba
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.02.2014, 20:33     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2014, 09:29     Titel:
  Antworten mit Zitat      
Code:

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.5 0.5 0]);
legend('1. Ableitung (exakt)', '2. Ableitung (exakt)', '1.Ableitung (approx)', '2.Ableitung (approx)','2.Ableitung mit del2')
 


zentales Differenzenverfahren: f'(u) = \frac{f(u+h) - f(u-h)}{2h}

wendet man dies 2mal an ergibt sich

f''(u) = \frac{f'(u+h) - f'(u-h)}{h} = \frac{f(u+2h) - 2f(u) + f(u - 2h)}{4h^2}

anstatt der "üblichen" Formel
f''(u) = \frac{f(u+h) - 2f(u) + f(u - h)}{h^2}

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.

Siehe hier ab Seite 5:
https://dokumente.unibw.de/pub/bscw.cgi/1419759

viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2014, 15:55     Titel:
  Antworten mit Zitat      
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.5 0.5 0]);
legend('1. Ableitung (exakt)', '2. Ableitung (exakt)', '1.Ableitung (approx)', '2.Ableitung (approx)','2.Ableitung mit del2')
 


Liebe Grüße

cordoba
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2014, 19:15     Titel:
  Antworten mit Zitat      
Thomas84 hat Folgendes geschrieben:

Man kann eine noch höhere Genauigkeit erreichen wenn man mehr Nachbarpunkte mit berücksichtigt.

Siehe hier ab Seite 5:
https://dokumente.unibw.de/pub/bscw.cgi/1419759


Hallo,

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

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

P.s.: der Link geht leider nicht mehr....!?

Liebe Grüße

cordoba
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2014, 11:16     Titel:
  Antworten mit Zitat      
Hab hier was gefunden. Im PDF " Derivative Approximation by Finite Differences" steht auf Seite 3 die 2.Ableitung mit zwei Nachbarpunkten und einer Fehlerordnung O(h^4). 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 z \rightarrow \pm \infty dort die Steigungen kaum ändert...

Liebe Grüße

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