Integrale einer Funktion berechnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Beckoeu
User
Beiträge: 3
Registriert: Mittwoch 31. Oktober 2018, 09:31

Hallo

ich möchte aus der Funktion sin(x) die Nullstellen und die Flächen (Integral) zwischen der Funktion und der x-Achse berechnen.
Dabei berechne ich die Nullstellen mit der Funktion fsolve() und das Integral mit quad(). Ich vergleiche die vorherige p mit der danachfolgenden Nullstelle k.
Das Integral wird zwischen den einzelnen Nullstellen berechnet.

Code: Alles auswählen

import numpy as np
from scipy.integrate import quad
from scipy.optimize import fsolve

def f(x):
    return np.sin(x)

i=0
k=0
p = fsolve(f, k)
while p < 20:

    if k>p:
        g = quad(f, p, k)

        # abs Betrag einer Zahl, g[0] um nur den wert des Integrals
        # und nicht die abweichung auszugeben
        print("Nullstelle: ", p, "Integral: " ,abs(g[0]))
        p = fsolve(f, k)
    else:
        i = i+0.1
        k = fsolve(f, i)
Als Ausgabe habe ich das bekommen:

Nullstelle: [0.] Integral: 2.0
Nullstelle: [3.14159265] Integral: 1.9999999999999996
Nullstelle: [18.84955592] Integral: 1.9999999999999962

Das Integral wird schon richtig berechnet, mich wundert es aber, das das Programm keine Nullstellen bei 2 Pi (6,26) usw. gefunden hat (oder ausgibt).
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Beckoeu: Du kannst nicht einfach wild einen mathematischen Algorithmus anwenden, ohne zu wissen, wie er genau funktioniert, und was man dabei beachten muß.

Am besten benutzt Du nicht ein fertiges Verfahren zur Nullstellenbestimmung, sondern programmierst es erst einmal selbst, z.B. Bisektion.
Antworten