リーマン和を使って積分を近似し、Pythonでmatplotlibを使ってグラフを作成するプログラムを作成しました。 x軸の上下に等しい面積を持つ関数の場合、結果の領域はゼロになりますが、代わりにプログラムから出力される数値は非常に小さいです。Python Riemann Sumは、正の領域と負の領域でゼロを返しません
次のコードは、奇関数f(x)= x^3を-1から1にグラフ化しているため、領域はゼロでなければなりません。代わりに私のコードは1.68065561477562 e^-15に近似しています。
この原因は何ですか? delta_x、x、またはyの丸め誤差ですか?私は値をゼロに丸めることができることを知っていますが、これを解決する別の問題または方法があるかどうかは疑問です。
私はdelta_xにDecimal.decimalクラスを使用しようとしましたが、ちょっとだけ小さい数字があります。
ザ・Pythonコード:
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()
奇数の部分区間しか使わない場合は十分にうまくいくでしょうし、左のリーマン和を '-1 + delta_x'にすることは' -1-delta_x/2 'から' 1 + delta_x/2 'になり、対称的なままになります。 – eugenhu