Wurzel ziehen

brauche hilfe.
aufgabe:
quadratwurzel einer natürlichen zahl zwischen 2…65536.
erlaubt sind addieren, subtrahieren, multiplizieren und dividieren.
wurzelziehen durch addieren un subtrahieren ist kein problem, aber zu langsam (in einem Controllerprogramm).
wer hat ne idee
danke
Jörg

Hallo,

leider kann ich Dir nicht vollstaendig helfen, aber ich erinnere mich dunkel an meine Mathe-Vorlesungen… (ich studiere z.Z. im ausland, deswegen sind meine Unterlagen ne Weile unerreichbar fuer mich)
Also :

Es gibt eine Moeglichkeit, durch eine bestimmte rekursive Reihenentwicklung auch Wurzeln zu berechnen. Wenn ich mich recht erinnere, hat die sog. Heron-Reihe den Grenzwert Wurzel(2), und das kann man irgendwie verallgemeinern auf alle Zahlen.
Also, schlag mal nach unter „Heron-Reihe“, vielleicht hilft das weiter !

ciao
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Jörg,

hab zwar keine Ahnung, aber vielleicht idee!?
tabelle, und wenn zuwenig speicher, dann halt nicht für jeden wert, und die zwischenwerte durch reihenentwicklung interpolieren, oder alternativ diese zwischenwerte als startwerte für den gebräuchlichen wurzelalgorithmus verwenden.

Grüße,
Semjon.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Probier doch mal folgendes: Wenn du die Wurzel aus A ziehen willst, nimm irgend eine 'STertzahl, z. B. 1. Deine erste Näherung ist b=(a/1 + a)/2.
Zweite Näherung: c=(a/b + a) /2
und so weiter. Das konvergiert ziemlich schnell, v. a. mit einem sinnvollen Stertwert

Grüße
Moritz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Jörg,

Hier ist ein Verfahren, das sehr schnell und stabil funktioniert:

Das babylonische Wurzelziehen:

Für die zweite Wurzel aus eine positiven Zahl A erhält man die Rekursionsformel:

a_{n+1}=1/2*(A/a_n + a_n)

(Diese Formel hat wohl auch Moritz unten gemeint, leider sind ihm aber beim schreiben ein paar Fehler unterlaufen.)

Diese rekursive Folge konvergiert sehr rasch gegen +Wurzel(A), wenn Du einen positiven Startwert wählst und gegen -Wurzel(A), wenn Du einen negativen Startwert wählst.

Die Formel kann man z.B. mit dem Newtonverfahren oder mit Hilfe des Satzes von Binomi herleiten. (Die Formeln für höhere Wurzeln können analog hergeleitet werden.)

Als Startwert kannst Du z.B. immer a_1=1 oder auch a_1=A (Wert unter der Wurzel) verwenden.

Berechnest Du z.B. Wurzel(2) mit diesem Verfahren und wählst
x_1=2, erhälst Du:
x_2=1,5
x_3=1,41Periode(6)
und
x_4=ungefähr 1,4142157
x_5 liefert dann schon Wurzel(2) in der üblichen Taschenrechnergenauigkeit.

Hoffe Dir geholfen zu haben

Helga

Hallo Helga
habe es versucht. Bei wurzel 2 klappt es auch. will ich wurzel aus 25 (=5) ziehen, ist das ergebnis 13. Da ich kein mathematisches ass bin, kannst du mir deine formel so erklären, das es auch klein fritzchen versteht?
Danke für deine Hilfe
Jörg

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Helga, mein letztes posting ist hinfällig. Ich bin dahintergekommen, wie deine Formel funktioniert.
Ich danke die und allen anderen, die mir geholfen haben.
Jörg

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Die Formel kann man z.B. mit dem Newtonverfahren oder mit
Hilfe des Satzes von Binomi herleiten.

Bitte bitte,

poste doch einige Angaben zu diesm Herrn Binomi. Dem Namen nach koennte er aus der roemischen Antike stammen, oder in der Renaissance seinen Namen a la Jacobi latinisiert haben. Oder ist er im asiatische Raum anzusiedeln?

Ich vermute, dass er der Urheber der ueberall benutzten Binomischen Lehrsaetze ist, aber er scheint allgemein verkannt zu sein, wie Herr Vincent, der das modifizierte Uspensky-Verfahren erfunden hat. Zumindest ist er auf
http://www-history.mcs.st-and.ac.uk/history/Indexes/…
nicht zu finden.

Also ich bitte um Aufklaerung.

Ciao Lutz:wink:

Hi,

falls es schnell gehen muss, geht es auch nur mit Bitoperationen, aber einfacher zu beschreiben ist:

Suche die groesste gerade Zweierpotenz, die kleiner ist als der Input A. Das geht ueber die Bitlaenge. Setze a_0=2^k, (a_0)^2=2^(2k)

Hallo Lutz,

poste doch einige Angaben zu diesm Herrn Binomi. Dem Namen
nach koennte er aus der roemischen Antike stammen, oder in der
Renaissance seinen Namen a la Jacobi latinisiert haben. Oder
ist er im asiatische Raum anzusiedeln?

Ich vermute, dass er der Urheber der ueberall benutzten
Binomischen Lehrsaetze ist, aber er scheint allgemein verkannt
zu sein, wie Herr Vincent, der das modifizierte
Uspensky-Verfahren erfunden hat. Zumindest ist er auf
http://www-history.mcs.st-and.ac.uk/history/Indexes/…
nicht zu finden.

Leider hat es einem Herrn Binomi nie gegeben, trotzdem steht der binomische Lehrsatz in vielen Büchern als „der Satz von Binomi“, was zugegebenermaßen sehr zur Verwirrung beiträgt.

„Bi“ steht schlichtweg und einfach für „zwei“ und
„nom“ erinnert an nomen, was aus dem griechischen stammt und mit „Term“ zu übersetzen ist.

Der Ausdruck Binom steht also für einen „zweigliedrigen Term“. Allerdings muß man eben zusätzlich noch wissen, daß dieser zweigliedrige Term im Falle eines Binomes als Summe der beiden einzelnen Terme zu bestimmen ist.

Der „Satz von Binomi“ wäre also zu übersetzen als der „Satz von den zweigliedrigen Termen“ und als solcher gibt er Auskunft darüber, wie zweigliedrige Summen zu potenzieren sind.

Verwirrender Weise wird in jedem Lehrbuch bei der zweiten Potenz eines Binomes auch die als „3. binomische Formel“ bekannte Regel mit demselben Namen belegt, obwohl es sich hier nicht beidesmal um exakt dasselbe „Binom“ handelt.

Hoffe das waren die Antworten, die Du gesucht hast.

Grüße

Helga

Verwirrender Weise wird in jedem Lehrbuch bei der zweiten
Potenz eines Binomes auch die als „3. binomische Formel“
bekannte Regel mit demselben Namen belegt, obwohl es sich hier
nicht beidesmal um exakt dasselbe „Binom“ handelt.

Hoffe das waren die Antworten, die Du gesucht hast.

Grüße

Helga

Naechstes Mal also den Smiley auffaelliger setzen:wink:.

In der Tat ist die Namensgebung verwirrend. Neben 1. fuer das Quadrat der Summe, 2. fuer das der Differenz und 3. die Differenz von Quadraten ist mir auch schon untergekommen, dass 1. und 2. zusammengefasst werden und damit 3. zu 2. wird. Ich finde die letztere Variante sinnvoller. Aber es gibt ja auch Leute, die saemtliche Umstellungen des Dreisatzes auswendig lernen muessen.

Jetzt koennte man sich noch Gedanken um ein Phantom-Bild des Herrn Binomi machen, schliesslich lernt es sich leichter, wenn man Bilder assoziieren kann.

Ciao Lutz:wink:

Hallo

Ich wüßte das auch sehr gerne , aber schon in der Schule waren es Taschenrechner als Helfer .
Wie sieht es aus , mit der Verwendung des Logarythmus ?

Beispiel 2er Wurzel aus 100 ziehen :
10er log aus 100 ,
Ergebnis /2
anti 10erlog (Umkehrung) aus dem Ergebnis

Hierbei würde bei einer Überprüfung die Multiplikation durch eine Addition ersetzt , und es wäre die Hälfte statt der Wurzel relevant .
jedenfalls kann man in einem microcontroller Tabellen für eine Wurzelbildung ablegen , eventuell auch anders diese bilden .
Aber bitte , ich gebe keine Garantie für diesen Hinweis .

MfG
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich wüßte das auch sehr gerne , aber schon in der Schule waren
es Taschenrechner als Helfer .
Wie sieht es aus , mit der Verwendung des Logarythmus ?

Das hiesse den Teufel mit Baal-se-bab(?) austreiben. Die (naeherungsweise) Berechnung von Logarithmus und Exponential ist komplizierter.

jedenfalls kann man in einem microcontroller Tabellen für eine
Wurzelbildung ablegen , eventuell auch anders diese bilden .
Aber bitte , ich gebe keine Garantie für diesen Hinweis .

Und wenn es auf Speicher ankommt, die Tabelle fuer die 8 oberen Bits (2^4=16 Werte), um schnell einen guten Startwert zu haben, und dann nachiterieren, max 4 Iterationen, probier es aus, 3 Iterationen sollten ausreichen (Heron oder sonstwie).

Ciao Lutz