Autor |
Beitrag |
Witting (Witting)
Mitglied Benutzername: Witting
Nummer des Beitrags: 36 Registriert: 06-2003
| Veröffentlicht am Donnerstag, den 14. Oktober, 2004 - 19:25: |
|
Hallo, Mich wuerde interessieren, ob es ein Verfahren zur Loesung kubischer Wurzeln (ohne Taschenrechner) gibt. Ich habe eszwar schon probiert, aber es geht irgendwie nicht. Koennte mir jemand einen Tip geben? Vielen Dank im Voraus, K. |
Mainziman (Mainziman)
Senior Mitglied Benutzername: Mainziman
Nummer des Beitrags: 947 Registriert: 05-2002
| Veröffentlicht am Donnerstag, den 14. Oktober, 2004 - 20:48: |
|
Ja sowas gibts, ist nur deutlich aufwendiger als das für die Quadratwurzel (hier geht ein vereinfachtes Verfahren, ich zeig hier das allgemeine): hier k = 2 bzw. 3 73848778475,6456546556 - vom Komma nach links und rechts die Zahl in k-stellige Blöcke teilen; 7 38 48 77 84 75,64 56 54 65 56 73 848 778 475,645 654 655 6 - für jeden Block (übrige Stellen gelten als Block) ergibt dies eine Stelle bei der Wurzel daher: f. k = 2: ......,..... f. k = 3: ....,.... - erste Stelle der Wurzel ergibt sich aus der größten Zahl, welche zur k-ten Potenz kleiner oder gleich dem ersten Block ist für k = 2: 2^k < 7, daher 2 für k = 3: 2^k < 73, daher 4 - und bestimme den Rest: 7 - 2^k = 3 73 - 2^k = 9 - von da geht das Verfahren sich wiederholend weiter: man nehme den Rest und den nächsten Block: f. k = 2: 338 f. k = 3: 9848 - man halte sich für folgendes immer den Binomschen Lehrsatz vor Augen: (a+b)^2 = a^2 + 2ab + b^2 (a+b)^3 = a^3 + 3a^2b + 3ab^2 + b^3 ... jetzt setzt man folgendes an: f. k = 2: rest = 338 - 2 * 10*bisherige Stellen * Ziffer - Ziffer^2 f. k = 3: rest = 9848 - 3 * (10*bisherige Stellen)^2 * Ziffer - 3 * 10*bisherige Stellen * Ziffer^2 - Ziffer^3 und bestimmt die größte Ziffer, sodaß der rest noch positiv oder 0 ist und verfahre weiter, bis entweder keine Blöcke mehr da sind, oder bis man die genügende Genauigkeit erreicht hat; hat man keine Blöcke mehr oder nur Blöcke mit weniger als k-Stellen, so fülle man einfach rechts mit 0en auf; Das war das ganze Patentrezept; hier eine Kurzdemo zum vereinfachten Verfahren des Quadratwurzelziehens, am Beispiel von 3 3 = 1,73205... <-- 1^2 200 2. * . <-- 7 200 - 27 * 7 = 11 1100 34. * . <-- 3 1100 - 343 * 3 = 71 7100 346. * . <-- 2 7100 - 3462 * 2 = 176 17600 3460. * . <-- 0 und so weiter
Mainzi Man, ein Mainzelmännchen-Export, das gerne weiterhilft oder auch verwirren kann *ggg*
|
Witting (Witting)
Mitglied Benutzername: Witting
Nummer des Beitrags: 41 Registriert: 06-2003
| Veröffentlicht am Freitag, den 15. Oktober, 2004 - 14:33: |
|
Vielen, vielen Dank fuer die Antwort. Hab naemlich schom laenger daran rumprobiert, aber war eben nicht erfolgreich. Nochmals vielen, vielen Dank!!!!
|
Christian_s (Christian_s)
Senior Mitglied Benutzername: Christian_s
Nummer des Beitrags: 1598 Registriert: 02-2002
| Veröffentlicht am Freitag, den 15. Oktober, 2004 - 17:56: |
|
Hallo Ich hätte noch eine Möglichkeit anzubieten. Man benutzt hier eine rekursive Folge: xn+1=1/k*((k-1)xn+a/xnk-1) mit a>0 und x0>0. Dann konvergiert die Folge gegen die k-te Wurzel aus a. In deinem Fall setze also k=3. MfG Christian |
Mainziman (Mainziman)
Senior Mitglied Benutzername: Mainziman
Nummer des Beitrags: 950 Registriert: 05-2002
| Veröffentlicht am Freitag, den 15. Oktober, 2004 - 18:22: |
|
Hallo Christian, wenn mich nicht alles täuscht folgt das unmittelbar durch Lösung der Gleichung xk = a mittels Newton; xk = a <=> xk - a = 0 f(x) = xk - a f'(x) = k * xk-1 jetzt gilt: xn+1 = xn - f(xn) / f'(xn) xn+1 = xn - (xnk - a) / (k * xnk-1) xn+1 = 1/k * (k*xn - (xnk - a) / xnk-1) xn+1 = 1/k * (k*xn - xnk / xnk-1 + a / xnk-1) xn+1 = 1/k * (k*xn - xn + a / xnk-1) xn+1 = 1/k * ((k-1)*xn + a / xnk-1) Jetzt die Gretchenfrage: wieviele Stellen sind nach n Durchläufen gültig? Gruß, Walter Mainzi Man, ein Mainzelmännchen-Export, das gerne weiterhilft oder auch verwirren kann *ggg*
|
Witting (Witting)
Mitglied Benutzername: Witting
Nummer des Beitrags: 45 Registriert: 06-2003
| Veröffentlicht am Freitag, den 15. Oktober, 2004 - 22:17: |
|
Hallo, Also ich bedanke mich jetzt erstmal bei euch beiden. Die Variante mit der rekursiven Folge finde ich zur schnellen Berechnung besser geeignet als die Erste ( die auch nicht schlecht ist, aber ein bisschen kompliziert). Meine Frage: Welche Methode ist genauer? Gruss K. |
Mainziman (Mainziman)
Senior Mitglied Benutzername: Mainziman
Nummer des Beitrags: 951 Registriert: 05-2002
| Veröffentlicht am Samstag, den 16. Oktober, 2004 - 06:27: |
|
Die rekursive hat einen Nachteil, sobald Du mit Gleitkommazahlen arbeitest gilt: die Genaugkeit von xn+1 ist definiert durch die Genauigkeit von xn; Hingegen die andere Methode erhöht die Genauigkeit mit der Stellenanzahl bzw. Durchläufen vollautomatisch; Bei n Durchläufen sind Dir bei der rekursiven Methode nicht n gültige Stellen garantiert, bei der anderen Methode jedoch schon; Programmtechnisch ist die rekursive Methode mehr Aufwand und auch um einiges langsamer => Division! Mainzi Man, ein Mainzelmännchen-Export, das gerne weiterhilft oder auch verwirren kann *ggg*
|
Witting (Witting)
Mitglied Benutzername: Witting
Nummer des Beitrags: 48 Registriert: 06-2003
| Veröffentlicht am Samstag, den 16. Oktober, 2004 - 10:58: |
|
@Mainziman Vielen Dank fuer den Hinweis. Was meinst du genau mit " programmtechnisch"? Gruss K. |
Mainziman (Mainziman)
Senior Mitglied Benutzername: Mainziman
Nummer des Beitrags: 953 Registriert: 05-2002
| Veröffentlicht am Samstag, den 16. Oktober, 2004 - 17:28: |
|
Du kannst beide Algorithmen auch als Computerprogramm (ich bevorzug da eine sehr Maschinennahe Programmiersprache oder FORTRAN ) verpacken; und da ist die rekursive Methode die Aufwendigere, weil die Division ausprogrammiert werden muß, und das ist grundsätzlich möglich aber von der Codierung bereits sehr aufwendig/umfangreich; hingegen das Quadrieren ist sehr einfach, aber auch hier bei der rekursiven Methode für den Prozessor aufwendiger, weil beim Quadrieren von xn nicht auf xn-12 aufgebaut werden kann; hingegen bei der stellenweisen berechnung, sehr einfach: (10a+b)^2 = 100a^2 + 20ab + b^2 nun ist hier b nur eine Ziffer, daher kann b^2 ohne Aufwand und 20ab <=> a*(20b) durch eine Multiplikation, deren Aufwand linear zunimmt, realisiert werden; und 100a^2 ist in der BCD Arithmetik ein bloßes verschieben; (ich selbst hatte das mal vor 15 Jahren in der 8ten Klasse mit sehr viel Papier und Bleistift für die Kubikwurzel von 3 gemacht und habs bis zur 20sten Stelle geschafft ) (Beitrag nachträglich am 16., Oktober. 2004 von mainziman editiert) Mainzi Man, ein Mainzelmännchen-Export, das gerne weiterhilft oder auch verwirren kann *ggg*
|
Witting (Witting)
Fortgeschrittenes Mitglied Benutzername: Witting
Nummer des Beitrags: 51 Registriert: 06-2003
| Veröffentlicht am Samstag, den 16. Oktober, 2004 - 18:00: |
|
@ Manziman: Erstmal vielen Dank fuer die ausfuehrliche Auskunft. Ich programmiere zwar eigentlich nicht, aber es hat mich mal interessiert. Na ja, so ein bisschen interessiere ich mich schon fuers Programmieren, aber eben nur so am Rande( koennte man also nicht als Hobby bezeichnen). Aber vielen, vielen Dank fuer den ausfuehrlichen Beitrag und fuer die Muehe. Gruss K.
|
|