wir alle lieben pi



  • phyll schrieb:

    Fall es jemand interessiert, die Folge die gegen e strebt ist:

    1 + 1/2! + 1/3! + 1/4! + ...

    ja, das ist die taylorreihenentwicklung für x=1, damit kann man allgemein werte von e^x berechnen. e^1 ist halt einfach e...



  • Andrey schrieb:

    Nicht mal Taschenrechner machen das per Taylorreihe, sondern mit irgendwelchen anderen Algorithmen (google zB nach CORDIC).

    naja, wenn man sich die initialisierung (bei wikipedia) anschaut, sieht man, dass da alles voller vorberechneter sin cos & tan werte ist, die nur geschickt miteinander kombiniert werden. auf ergebnisse der taylorreihe kann man da immer noch nicht verzichten, nur, man berechnet die eben nicht zur laufzeit, sondern brennt eine tabelle mit werten in die hardware rein 👍
    (aber trotzdem danke für's stichwort, war durchaus interessant sich sowas mal durchzulesen 🙂 hab ja vorher nicht gewusst, wie ein taschenrechner funktioniert :p )

    Wo auch immer die Werte herkommen ... wie gesagt, da gibt es viele Möglichkeiten. Male einen Einheitskreis auf Karopapier, zeichne eine Gerade unter dem Winkel phi durch den Ursprung, trage nach Definition (also die Projektion auf die x-Achse) den Cosinus an und zähle die Kästchen. Jetzt verfeinere systematisch dein Karopapier, dann kannste den Cosinus durch Kästchenabzählen ermitteln. Zugegebenermaßen, dafür braucht man Wissen über Winkel.

    Du mußt also die Taylorreihe nur bis zum N-1-ten Gleid ausrechnen und bist dann nur ein selbstgewähltes epsilon (das von N abhängt) vom korrekten Ergebnis weg.

    so, das verstehe ich nicht ganz (wegen einer wissenslücke: was war nochmal eine Nullfolge? 🙄 ) wäre cool wenn du evtl. eine rechnung posten würdest, wie man aus der taylorreihe auf PI kommen kann 🤡 👍

    Du willst es doch nur näherungsweise, oder?

    Dann brichst Du die Reihenentwicklung des Cosinus an irgendeiner Stelle einfach ab[1]; dann hast Du im wesentlichen eine Polynomfunktion, deren kleinste Nullstelle >0 sollte sich mit einem üblichen numerischen Verfahren zur Nullstellensuche finden lassen und schon hast Du einen Näherungswert für pi/2 gefunden.

    [1]: Das ist natürlich der Knackpunkt, wieso man abbrechen darf und wann man abbrechen sollte, um vernünftige Ergebnisse zu bekommen. Als erstes zeigt man dazu, daß die Reihenentwicklung für cos(x) für alle x konvergiert und, daß sie tatsächlich gegen cos(x) konvergiert (... hier alles eher Quark, da man den Cosinus oft über die Reihenentwicklung *definiert*), dann schätzt man für die Taylorreihe das Restglied, also den Fehler zwischen Originalfunktion und der abgebrochener Reihe, ab und hat eigentlich alle Informationen, die man braucht.



  • also, wie ich das jetzt verstanden habe, schlägst du vor, die taylorreihe einfach irgendwo abzuhacken (okay, für kleine x muss man wirklich nicht bis hunderterpotenzen rechnen, um was vernünftiges rauszubekommen) und dann wiederum mit iterativen näherungsverfahren (newtonverfahren oder sowas in der art) die nullstelle von dieser funktion zu bestimmen.
    In der tat, dies wäre wahrscheinlich schneller, als mit meinem geometrischen ansatz mit zwei wurzeln pro iteration. 👍
    okay, hast gewonnen^^ 😃



  • Andrey schrieb:

    hier geht es darum nicht, ein paar stellen hin oder her... wenn du PI als einen grenzwert einer iteration angibst, reicht es schon.
    aber das, was jucks vorgeschlagen hat, ist meiner meinung nach nicht berechenbar, egal wie schnell der rechner ist...

    ich schlage vor, dass du mit deinen stäbchen und viel sand die nullstelle des bei n abgebrochenen taylorpolynoms ausrechnest, und n so lange erhöhst, bis pi genau genug ist. falls du was anderes gemeint hast, habe ich dich falsch verstanden.



  • Andrey schrieb:

    @CStoll:
    mal eine frage nebenbei: wenn ich jetzt PI auf 100 stellen genau berechnen wollte, nur mit C++ an sich und einem gewöhnlichen rechner mit float=4byte, ohne irgendwelche zusatzbibliotheken für supergenaue zahlen, wäre das möglich? ich meine nähmlich irgendwo gesehen zu haben, dass man in c++ einfach so "quad" analog zu "double" definieren kann, mit vierfacher genauigkeit. (wie) geht das? 😕

    thx im voraus

    Klar geht das. Weil es mich selbst interessiert hat, habe ich gesucht und bin auf diesen Schnippsel bemerkenswerten Code gestoßen:

    #include<iostream>
    int main(){
    	int a=10000, b=0, c=2800, d, e, f[2801], g;
    	for( ; b-c ; ) f[b++]=a/5;
    	for ( ; d=0 , g=c*2; c-=14, printf("%.4d",e+d/a), e=d%a)
    		for( b=c; d+=f[b]*a, f[b]=d%--g, d/=g--, --b; d*=b);
    	return 0;
    }
    

    Es ist sogar äußerst kurz, aber leider auch extrem kryptisch. Ich habe keine Ahnung, was es tut, aber es spuckt mir 800 Stellen von Pi in 15ms aus. (Die letzte Stelle ist falsch gerundet.)

    http://titanos.de/iso-c++/cpp:pi



  • also, ich habe die methode mit der abgebrochenen taylorreihe anfangs nicht so gut gefunden, weil ich mir folgendes gedacht hab:
    -man kann zwar für ein bestimmtes n, wo die folge abbricht, eine nullstelle unendlich genau berechnen, doch wenn mans dann genauer haben will, muss man von anfang an mit einem viel größeren n anfangen.

    ich habe dabei ausser acht gelassen, dass es bei meiner methode nicht viel anders ist: zwar wird PI als ein grenzwert beschrieben, aber die verwendeten wurzelfunktionen lassen sich auch nur durch sehr viele iterationen annähern

    => es ist in beiden fällen nicht so, dass man beliebig genaue ergebnisse bekommt, wenn man eine rechnung lange genug fortsetzt. Irgendwann ist man gezwungen, die rechnung komplett neuanzufangen (in einem fall wegen wurzeln, in dem anderen wegen zu kleinen n)
    😃
    naja, ist eh egal, wen interessierts heute? 🙂



  • Falls dir die Hexdezimal- oder Binärdarstellung genügt, kannst du mit der BBP-Formel die n-te Stelle berechnen, ohne die n-1 Stellen davorzu kennen.

    http://de.wikipedia.org/wiki/Bailey-Borwein-Plouffe-Formel



  • ohje... dat ist ja was total schräges 😮
    aber möglicherweise ist es besser, als alles, was hier bisher vorgeschlagen wurde...



  • Wenn ihr schon mit Taylor-Reihen kommt, solltest ihr vielleicht mal die richtige Reihenentwicklung verwenden: Pi = 4*atan(1).



  • Gute idee... 💡 die sogenannte Leibniz-reihe kann man verwenden, aber die soll sau langsam konvergieren, für 5 nachkommastellen bräuchte man schon 1000000 folgenglieder zusammenaddieren 😃
    aber ⚠ wenn man mit dieser reihe rechnet, kann man nur ein einziges mal anfangen, und das ergebnis immer weiter verbessern! das ist der entscheidende vorteil gegenüber den bisherigen methoden 👍



  • CStoll schrieb:

    Wenn ihr schon mit Taylor-Reihen kommt, solltest ihr vielleicht mal die richtige Reihenentwicklung verwenden: Pi = 4*atan(1).

    Äh, und acos(0)=pi/2 ist falsch oder wie?



  • warum falsch... geht doch genausogut... die ganzen funktionen hängen eh eng miteinander zusammen=> fast dasselbe



  • Genausogut?

    Entwickelt doch mal 2*arccos(x) um x = 0.

    Der erste Koeffizient ist schonmal 2*arccos(0). Hm. Moment mal. Den Wert wollen wir ja haben!

    Um es kurz zu machen, MuPad sagt

    >> taylor(2*arccos(x),x=0)
    
                                       3      5
                                      x    3 x       7
                           PI - 2 x - -- - ---- + O(x )
                                       3    20
    

    Halte ich nicht für vorteilhaft, um Pi zu berechnen. Aber es kann sicherlich noch andere passende Reihen geben.



  • Zum Beispiel arcsin(x)...

    >> taylor(2*arcsin(x),x=0,15)
    
              3      5      7       9       11        13        15
             x    3 x    5 x    35 x    63 x     231 x     143 x        17
       2 x + -- + ---- + ---- + ----- + ------ + ------- + ------- + O(x  )
              3    20     56     576     1408      6656      5120
    

    Für x = 1.



  • ja, arcsin arccos... meine güte, n halbes pi hin ein halbes pi her 😉
    aber mit der taylorreihe geht es auf jedn fall ganz gut 👍



  • EinPhysiker schrieb:

    Genausogut?

    Entwickelt doch mal 2*arccos(x) um x = 0.

    Der erste Koeffizient ist schonmal 2*arccos(0). Hm. Moment mal. Den Wert wollen wir ja haben!

    😃
    wenn Du atan(x) um 1 entwickelst klappt atan(1) auch nicht. Du mußt natürlich um nen anderen Punkt entwickeln wo Du Pi nicht brauchst.



  • Daniel E. schrieb:

    CStoll schrieb:

    Wenn ihr schon mit Taylor-Reihen kommt, solltest ihr vielleicht mal die richtige Reihenentwicklung verwenden: Pi = 4*atan(1).

    Äh, und acos(0)=pi/2 ist falsch oder wie?

    Ich hatte auch schon überlegt, ob ich "pi=2*asin(1)" auch erwähnen sollte - aber die Taylor-Entwicklung des Arcus-Sinus gilt nur für |x| < 1. (bei x=1 ist er nicht differenzierbar)

    Aber du kannst ja gerne zur Grenzwertentwicklung überrgehen und pi = 2*lim(x->1) asin(x) ermitteln.


Anmelden zum Antworten