| Newtonverfahren < Matlab < Mathe-Software < Mathe < Vorhilfe 
 
 
  |  |  
  | 
    
     |  | Status: | (Frage) beantwortet   |   | Datum: | 01:03 Fr 26.04.2013 |   | Autor: | mikexx | 
 
 | Aufgabe |  | Das Newton-Verfahren versucht, eine Nullstelle der Funktion $f(x)$ zu bestimmen. Je nach Startschätzung [mm] $x_0$ [/mm] können verschiedene Nullstellen gefunden werden: 
 [mm] $x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}, [/mm] n>0$
 
 
 Programmieren Sie das Newton-Verfahren als MATLAB-Funktion, der Sie die Funktion $f(x)$ und die Startschätzung [mm] $x_0$ [/mm] übergeben können. Bestimmen Sie die Nullstelle x so genau, daß [mm] $\lvert f(x)\rvert<10^{-5}$. [/mm] Approximieren Sie die Ableitung durch [mm] $f'(x)\approx \frac{f(x+\varepsilon)-f(x-\varepsilon)}{2\varepsilon}$ [/mm] mit [mm] $\varepsilon=10^{-7}$. [/mm]
 | 
 Hey, ich hab das so gemacht:
 
 
 | 1: | function [x,m]=newton(h,x0) |  | 2: | % h=@(x) anonym_function // x0 Startwert // x Nullstelle // m Durchgaenge |  | 3: | q=10e-07; |  | 4: | y=x0; |  | 5: | n=0; |  | 6: | while abs(h(y))>=10e-05 |  | 7: | n=n+1; |  | 8: | k=(h(y+q)-h(y-q))/(2*q); |  | 9: | y=y-((h(y))/(k)); |  | 10: | end |  | 11: | x=y; |  | 12: | m=n; | 
 
 Wenn ich das jetzt mal teste mit
 
 
 ,| 1: | h=@(x)sin(x); |  | 2: | [a,b]=newton(h,2) | 
 
 ergibt sich a=3.1416 und b=5.
 
 Aber das kommt irgendwie nicht hin, denn es ist nicht
 
 [mm] $\lvert \sin(3.1416)\rvert [/mm] < [mm] 10^{-5}$.
 [/mm]
 
 
 Wo hab ich aber was falsch gemacht?
 
 Oder liegt es irgendwie an der Rundung oder so?
 
 
 
 
 Ganz viele Grüße
 
 
 
 
 |  |  |  | 
 
  |  |  
  | 
    
     | 
 > Das Newton-Verfahren versucht, eine Nullstelle der Funktion
 > [mm]f(x)[/mm] zu bestimmen. Je nach Startschätzung [mm]x_0[/mm] können
 > verschiedene Nullstellen gefunden werden:
 >
 > [mm]x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}, n>0[/mm]
 >
 >
 > Programmieren Sie das Newton-Verfahren als MATLAB-Funktion,
 > der Sie die Funktion [mm]f(x)[/mm] und die Startschätzung [mm]x_0[/mm]
 > übergeben können. Bestimmen Sie die Nullstelle x so
 > genau, daß [mm]\lvert f(x)\rvert<10^{-5}[/mm]. Approximieren Sie
 > die Ableitung durch [mm]f'(x)\approx \frac{f(x+\varepsilon)-f(x-\varepsilon)}{2\varepsilon}[/mm]
 > mit [mm]\varepsilon=10^{-7}[/mm].
 >  Hey, ich hab das so gemacht:
 >
 >
 | 1: | function [x,m]=newton(h,x0) |  | 2: | >  % h=@(x) anonym_function // x0 Startwert // x Nullstelle |  | 3: | > // m Durchgaenge |  | 4: | >  q=10e-07; |  | 5: | >  y=x0; |  | 6: | >  n=0; |  | 7: | >  while abs(h(y))>=10e-05 |  | 8: | >      n=n+1; |  | 9: | >      k=(h(y+q)-h(y-q))/(2*q); |  | 10: | >      y=y-((h(y))/(k)); |  | 11: | >  end |  | 12: | >  x=y; |  | 13: | >  m=n; | 
 
 >
 > Wenn ich das jetzt mal teste mit
 >
 >
 ,| 1: | h=@(x)sin(x); |  | 2: | >  [a,b]=newton(h,2) | 
 
 >
 > ergibt sich a=3.1416 und b=5.
 >
 > Aber das kommt irgendwie nicht hin, denn es ist nicht
 >
 > [mm]\lvert \sin(3.1416)\rvert < 10^{-5}[/mm].
 >
 >
 > Wo hab ich aber was falsch gemacht?
 >
 > Oder liegt es irgendwie an der Rundung oder so?
 
 
 Hallo mikexx,
 
 mein Rechner sagt mir:
 
 $\ |sin(3.1416)| [mm] \le [/mm] 7.35 * [mm] 10^{-6}$
 [/mm]
 
 Daraus folgt auch  $\ |sin(3.1416)| [mm] \le  10^{-5}$
 [/mm]
 
 Vielleicht wäre es aber trotzdem sinnvoll, bei
 dem angezeigten Lösungswert eine Dezimale mehr
 darstellen zu lassen, wenn du ja auch beim
 Funktionswert eine Präzision von [mm] 10^{-5}
 [/mm]
 verlangst.
 
 LG ,   Al-Chw.
 
 
 |  |  | 
 |  | 
 
  |  |  
  | 
    
     |  | Status: | (Mitteilung) Reaktion unnötig   |   | Datum: | 11:53 Fr 26.04.2013 |   | Autor: | mikexx | 
 Hallo und danke.
 Ich habe zur Kontrolle so einen blöden Onlinerechner benutzt; hätte ich es gleich mit Matlab kontrolliert, hätte ich gar nicht nachfragen müssen.
 
 Ich freue mich, daß mein Programm dann doch korrekt ist.
 
 
 |  |  | 
 
 
 |