Einfache mathematische iterative Formel in Python eingeben (bin Anfänger)

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
ihavenoclue
User
Beiträge: 10
Registriert: Montag 18. Oktober 2021, 14:43

Hi!

# vorab: ich bin absoluter Anfänger und starte vollständig bei 0. Falls ich also etwas Offensichtliches nicht sehe, tut mir das leid :lol:


Folgende Formel soll in Python implementiert werden:

Psi = Summe (von k=0 bis zur Grenze n) der Berechnungen von ((-1)^k)/(2k+1)

Anforderungen: der Wert für n kann beliebig gewählt werden, soll aber am Ende auf 100000 gesetzt werden.

Code: Alles auswählen

n = 0
k = 0
ergebnis = 0

while n<=100000:
  ergebnis = ((-1)**k)/((2*k)+1)
  summe = ergebnis+((-1)**k)/((2*k)+1)
  k += 1
  n += 1

print(summe)
Meine Überlegung: ich setze n zu Beginn auf 0. n soll aber solange um 1 erhöht werden bis die 100000 erreicht werden. Ich stehe allerdings auf den Schlauch, was k und die Summe angeht. Damit sich k verändert, sollte k ja ebenfalls erhöht werden, also würde quasi gelten k = n?
Die endültige Summe sollte sich ja aus den gesamten Additionen ergeben, eben für die Berechnungen von 0 bis 100000 (dann ist Schleifen-Stopp).

Ich hoffe, ich habe mich nicht allzu kompliziert ausgedrückt. Ich habe gerade einen Denkfehler und bin für jeden Tipp dankbar.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Das schöne an Python ist, dass man solche Sachen praktisch 1:1 umsetzen kann:

Code: Alles auswählen

>>> sum(((-1)**k)/((2*k)+1) for k in range(100_000))
0.7853956633974299
In specifications, Murphy's Law supersedes Ohm's.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

In Deiner Formel ist "n" fix, und nur k läuft von 0 bis n. Du zählst jetzt aber n auch hoch.
Nur weil Du irgendwo `summe` hinschreibst, wird noch keine Summe gebildet. Die Variable `summe` wird in jedem Schleifendurchgang neu belegt. `ergebnis` und der zweite Summand bei `summe` sind identisch, so dass da nur summe = 2 * ergebnis steht.

Formeln können in Python gut durch Funktionen abgebildet werden. Eingerückt wird immer mit 4 Leerzeichen pro Eben, nicht 2.

Code: Alles auswählen

def arctan1(n=100000):
    k = 0
    summe = 0
    while k <= n:
        summe += (-1)**k / ((2 * k) + 1)
        k += 1
    return summe

print(arctan1())
Statt der while-Schleife wäre eine for-Schleife besser:

Code: Alles auswählen

def arctan1(n=100000):
    summe = 0
    for k in range(n+1):
        summe += (-1)**k / ((2 * k) + 1)
    return summe

print(arctan1())
Und das kann man dann als Generator schreiben.

Code: Alles auswählen

def arctan1(n=100000):
    return sum((-1)**k / ((2 * k) + 1) for k in range(n+1))

print(arctan1())
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

Psi bzw die Digamma-Function, das muß man nicht "zu Fuß" programmieren. Dafür gibt es
das Package: scipy
Die Beschreibug ist hier:
https://docs.scipy.org/doc/scipy/refer ... gamma.html
ihavenoclue
User
Beiträge: 10
Registriert: Montag 18. Oktober 2021, 14:43

Super! Vielen lieben Dank für eure Antworten! Jetzt ist es mir klarer! :-)
Antworten