梯形积分
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-10, 10, 0.1)
f = x**2
F = [-333.35]
for i in range(1, len(x) - 1):
F.append((f[i] + f[i - 1])*(x[i] - x[i - 1])/2 + F[i - 1])
F = np.array(F)
fig, ax = plt.subplots()
ax.plot(x, f)
ax.plot(x[1:], F)
plt.show()
这里我应用了理论公式(f[i] + f[i - 1])*(x[i] - x[i - 1])/2 + F[i - 1],而积分是在块中完成的:
F = [-333.35]
for i in range(1, len(x) - 1):
F.append((f[i] + f[i - 1])*(x[i] - x[i - 1])/2 + F[i - 1])
F = np.array(F)
请注意,为了绘制x和F,它们必须具有相同数量的元素;所以我忽略 的第一个元素x,所以它们都有199元素。这是梯形方法的结果:如果你整合一个元素数组f,n你会得到一个元素数组F。n-1此外,我将初始值设置F为-333.35at x = -10,这是积分过程中的任意常数,我决定该值是为了在原点附近传递函数。
分析整合
import sympy as sy
import numpy as np
import matplotlib.pyplot as plt
x = sy.symbols('x')
f = x**2
F = sy.integrate(f, x)
xv = np.arange(-10, 10, 0.1)
fv = sy.lambdify(x, f)(xv)
Fv = sy.lambdify(x, F)(xv)
fig, ax = plt.subplots()
ax.plot(xv, fv)
ax.plot(xv, Fv)
plt.show()
在这里,我通过sympy模块使用符号数学。集成在块中完成:
F = sy.integrate(f, x)
请注意,在这种情况下,F和x已经有相同数量的元素。此外,代码更简单。