Gerade schneidet Kosinus

Löse die Gleichung
 cos x = x
Da ich keine explizite (algebraische, geschlossene, exakte) Lösung kenne, werden hier die grafische und die iterative Lösung gezeigt.

Grafische Lösung

Betrachte die Gleichungsseiten als separate Funktionen und lege sie in einer Grafik übereinander.
  f(x) = cos x  (blaue Kurve)
  g(x) = x      (rote Kurve)
Im Schnittpunkt kann der Wert x ~= 0.7 abgelesen werden.

Die obige svg-Grafik (siehe

  /menü/Extas/Browser-Werkzeuge/Seitenquelltext anzeigen/
) wurde mit folgendem recapis-Programm erstellt:
function x (t) return t;
function y_cos    (t) return cos t;
function y_gerade (t) return     t;
svg_open (200,100,100,50,'einheit=1');
  svg_kreuz 10;
  svg_kurve (x, y_cos   , -10,+10, 'zoom=10', 'sf=blue');  
  svg_kurve (x, y_gerade, -10,+10, 'zoom=10', 'sf=red' );  
svg_close 'eine.svg';
, in einer Datei "eine.svg" zunächst abgelegt und dann mit "markieren_ziehen_und_fallenlassen" in die html-Datei eingefügt.

Iterative Lösung

Die iterative Methode startet mit dem Intervall [0, 1] und führt wiederholt folgende Schritte aus:
  1. Berechne die Mitte m des aktuellen Intervalls (im 1. Schritt m = 0.5)
  2. Stelle fest, in welcher Hälfte der gesuchte Wert x liegt
  3. Wenn gilt "cos m > m" (was im 1. Schritt mit "cos 0.5 > 0.5" der Fall ist), wird m die neue untere Intervallgrenze
  4. Im anderen Fall wird m die neue obere Intervallgrenze
Diese Schritte werden so lange wiederholt, bis das Intervall durch die fortgesetzte Halbierung die gewünschte Größe (bzw Kleinheit) hat.

Das recapis-Programm

u=0.0;
o=1.0;
for(i=0;i<10;i++){
  m=u+(o-u)/2;
  if(cos m > m) u=m;
  else          o=m;
  $='['
    ,'%1.7f' printf u    ,' , '
    ,'%1.7f' printf o    ,'] '
    ,'%1.7f' printf (o-u),'\n';
}
gibt folgende Intervalle aus:
   unter       ober       groesse
[0.5000000 , 1.0000000] 0.5000000
[0.5000000 , 0.7500000] 0.2500000
[0.6250000 , 0.7500000] 0.1250000
[0.6875000 , 0.7500000] 0.0625000
[0.7187500 , 0.7500000] 0.0312500
[0.7343750 , 0.7500000] 0.0156250
[0.7343750 , 0.7421875] 0.0078125
[0.7382812 , 0.7421875] 0.0039062
[0.7382812 , 0.7402344] 0.0019531
[0.7382812 , 0.7392578] 0.0009766
, was sehr schön die Anzahl der signifikanten Dezimalstellen (5) zeigt.

Siehe auch

https://www.wolframalpha.com/input?i=cos  (x)   = 1.0*x
https://www.wolframalpha.com/input?i=cos%28x%29%3D1.0*x
x ~= 0.739085