Bergervei/Prozeduren höherer Ordnung

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
== Differential- und Differenzenquotient ==

Aus der Mathematik ist die Definition des Differentialquotienten bekannt:

<blockquote>
<math>f'(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}</math>
</blockquote>

Scheme kann natürlich nur mit einem endlichen Wert für h arbeiten.
Wir definieren deshalb:

<code id="5128873546cf4">
(define h 1e-06)
</code>

Damit gehen wir vom Differential- zum Differenzenquotienten mit kleinen Intervallen über.<br />
Nun können wir eine Prozedur höherer Ordnung definieren, die die ''Ableitung beliebiger(!) Funktionen'' als Näherungswert ermittelt!

<code id="4b14d88e39257">
(define ableitung
  (lambda (fkt)
    (lambda (x)
      (/ (- (fkt (+ x h)) (fkt x)) h))))
</code>

Wir definieren eine Testfunktionen und rechnen nach.

<blockquote><math>f(x)=3x^2+\frac{2}{x}</math></blockquote>

<code id="5128873546d59">
(define fkt
  (lambda (x)
    ...))
</code>

<check>
(and (= (fkt -3) 79/3) (= (fkt 1) 5))
</check>

<run id="5128873546dc4">
((ableitung fkt) 2) 
</run>

Natürlich dürfen wir ''nicht'' erwarten, dass die Prozedur <tt>ableitung</tt> die ''symbolische'' Ableitung einer Funktion ermittelt. Sie liefert lediglich den ''numerischen'' Näherungswert der ersten Ableitung an der Stelle x.