Berechnung der dritten Wurzel < Numerik < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 10:35 Mo 02.06.2008 | Autor: | Denise86 |
Aufgabe | a) Formulieren Sie ein Verfahren, das analog zum Heron-Verfahren die dritte Wurzel aus einer Zahl a > 0 näherungsweise berechnet. Beweisen Sie, dass die Folge der Näherungen [mm] (x_{n})für [/mm] alle Startwerte [mm] x_{0} [/mm] > 0 gegen [mm] \wurzel[3]{a} [/mm] konvergiert.
b) Erstellen Sie eine Java-Applikation, welche die dritte Wurzel aus einer reelen Zahl a > 0 mittels a) näherungsweise berechnet. O.B.d.A. sei a > 0 sonst ersetze man a durch [mm] \bruch{1}{a}.
[/mm]
Um das Verfahren zu beschleunigen, dividiere man nach der Eingabe a so lange durch [mm] 2^{3} [/mm] = 8 (insgesamt p-Mal, mit geeignetem p [mm] \in \IN_{0}), [/mm] bis [mm] a'=a*8^{-p} [/mm] < 8 ist.Dann ist [mm] \wurzel[3]{a}=2^{p}\wurzel[3]{a'}. [/mm] Testen Sie ihr Programm mit a=3, a=123 und a =456789. |
Könnte mir bitte jemand helfen die Aufgabe zu lösen. Bei a weiß ich nicht wie ich sie lösen soll, verstehe das mit Konvergenz nicht. Und bei b habe ich folgendes probiert, weiß aber nicht ob es stimmt. wäre sehr dankbar wenn es jemand überprüfen würde. Werde mich über eure Hilfe sehr freuen.
b)
package Serie5;
import org.riediger.jconsole.*;
public class Aufgabe15 {
public static void main (String[] args) {
JConsole.start();
System.out.println("Dieses Programm berechnet die 3. Wurzel mit hilfe des Heron-Verfahrens");
double a= JConsole.readDouble("Geben Sie einen Wert für a ein, der größer als 0 ist:");
while (a<=0) {
a=JConsole.readDouble("a soll einen Wert größer als 0 annehmen. Geben Sie einen positiven Wert ein:");
}
if(a<=1){
a=1/a;
System.out.println("a ist jetzt:" +a);
}
double ergebnis =Math.cbrt(a);
System.out.println("Ergebnis: " +ergebnis);
double x0 = a;
int k =0;
int p=0;
while(a>=8)
{
a=a/8;
System.out.println("neues a: "+a);
p++;
}
do
{
System.out.println(k+".Näherung");
System.out.println("x"+k+ ": " +x0);
double xk = (Math.pow(3,-1) *(2*x0 +(a/Math.pow(x0, 2))));
System.out.println("x" + (k+1) + ": " +xk);
x0=xk;
System.out.println("");
k++;
}while(x0!= (Math.cbrt(a)) &&(k<100));
}
}
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:16 Mo 02.06.2008 | Autor: | pelzig |
a) Beim Heronverfahren hast du eine Folge mit nem Startwert [mm] $x_0$ [/mm] und der Rekursion [mm] $x_{n+1}=\frac{1}{2}\left(x_n+\frac{a}{x_n}\right)$. [/mm] Falls diese Folge konvergiert, so gilt für den Grenzwert [mm] $x:=\lim_{n\to\infty}x_n$ $$x=\frac{1}{2}\left(x+\frac{a}{x}\right)\gdw x^2+a=2x^2\gdw a=x^2$$
[/mm]
Damit wollte ich andeuten warum diese Folge eben genau gegen [mm] $\sqrt{a}$ [/mm] konvergiert, es ist jedoch (noch) kein streng mathematischer Beweis. Jetzt musst du versuchen das anzupassen, sodass es gegen [mm] $\sqrt[3]{a}$ [/mm] konvergiert. Was ist z.B. mit: [mm] $$y_n:=\frac{1}{2}\left(y_n+\frac{a}{y_n^2}\right)$$
[/mm]
Für welche [mm] $y_0,a\in\IR$ [/mm] ist [mm] $\lim_{n\to\infty}y_n=\sqrt[3]{a}$?
[/mm]
b) Sieht zumindest nicht ganz falsch aus, d.h. die wesentlichen Kontrollstrukturen sehen (oberflächlich) richtig aus. Aber wenn du keine konkrete Frage zum Programm hast wird da sicher keiner was Sinnvolles drauf antworten - und selbst dann gehört das wohl in ein anderes Forum.
Gruß, Robert
|
|
|
|