Ich habe ein Programm geschrieben, um ein Integral mit einer Riemann-Summe zu approximieren und es mit Matplotlib in Python graphisch darzustellen. Für Funktionen mit gleichen Bereichen oberhalb und unterhalb der X-Achse sollte der resultierende Bereich Null sein, aber mein Programm gibt stattdessen eine sehr kleine Zahl aus.Python Riemann Summe ergibt keine Null für gleiche positive und negative Flächen
Der folgende Code zeigt die ungerade Funktion f (x) = x^3 von -1 nach 1, so dass der Bereich Null sein sollte. Mein Code entspricht stattdessen 1.68065561477562 e^-15.
Was verursacht das? Ist es ein Rundungsfehler in delta_x, x oder y? Ich weiß, ich könnte den Wert einfach auf Null runden, aber ich frage mich, ob es ein anderes Problem oder eine andere Lösung gibt.
Ich habe versucht, mit der Decimal.decimal-Klasse für delta_x, aber ich habe gerade eine noch kleinere Zahl.
Der Python-Code:
import matplotlib.pyplot as plt
import numpy as np
# Approximates and graphs integral using Riemann Sum
# example function: f(x) = x^3
def f_x(x):
return x**3
# integration range from a to b with n rectangles
a, b, n = -1, 1, 1000
# calculate delta x, list of x-values, list of y-values, and approximate area under curve
delta_x = (b - a)/n
x = np.arange(a, b+delta_x, delta_x)
y = [f_x(i) for i in x]
area = sum(y) * delta_x
# graph using matplotlib
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)
ax.bar(x, y, delta_x, alpha=.5)
plt.title('a={}, b={}, n={}'.format(a, b, n))
plt.xlabel('A = {}'.format(area))
plt.show()
Ja, komischerweise, wenn Sie immer nur eine ungerade Anzahl von Teilintervallen verwenden, dann ist die Verwendung der linken Riemann-Summe über -1 zu 1 + delta_x äquivalent zur Verwendung der Mittelpunkt-Approximation für ein Intervall über -1-delta_x/2 'bis' 1 + delta_x/2 'und bleibt so symmetrisch. – eugenhu