我目前陷入了一个隐藏在某个地方的非常简单的错误,希望有人可以对它有所启发。
我正在尝试将一组数据与传统方法进行数字整合,并获得我并不期望的结果。
然后我回到第一原则并制作了以下代码。出于某种原因,我无法生成y3或y4来匹配y2。
import numpy as np
import matplotlib.pyplot as plt
import math
f1 = 'x**2 - 1' # Starting function
start, stop, step = -2, 2, 21
x = np.linspace(start, stop, step)
xdash = []
xDoubleDash = []
y1 = eval(f1)
y2 = [] # integrated function
y3 = [] # box rule
y4 = [] # trapezium rule
y5 = [] # numerical differentialtion of integrated function
for i in range(0,len(x)-1):
xdashElement = (x[i] + x[i+1])/2
y2.append((math.pow(xdashElement,3)/3) - xdashElement) # Integrated Function: (x**3)/3 - x
xdash.append(xdashElement)
y3.append((y1[i]+y1[i+1])/2 * abs(((x[i] - x[i+1])))) # box rule
y4.append(((y1[i]+y1[i+1]) * abs(x[i] - x[i+1]))/2) # trapezium rule
for i in range(0,len(y2)-1):
xDoubleDashElement = (xdash[i] + xdash[i+1])/2
xDoubleDash.append(xDoubleDashElement)
y5.append((y2[i+1]-y2[i])/(xdash[i+1] - xdash[i]))
plt.plot(x, y1, 'b-')
plt.plot(xdash, y2, 'r-')
plt.plot(xdash, y3, 'g-')
plt.plot(xdash, y4, 'm-')
plt.plot(xDoubleDash, y5, 'c-')
plt.grid()
plt.show()
提前致谢。
编辑:我添加了y5,y2的数值差异作为健全性检查。
答案 0 :(得分:0)
您的y2
是一个不确定的积分,而您的y3
和y4
在一系列间隔内是明确的积分。我不希望它们相互匹配。如果您想检查与反衍生物的数值积分,您的y3
和y4
应与此y2
匹配:
ya = (math.pow(x[i],3)/3) - x[i]
yb = (math.pow(x[i+1],3)/3) - x[i+1]
y2.append(yb-ya) # Integrated Function: (x**3)/3 - x
我期望y3和y4的值与y2的值非常相似,理论上如果增量x [i + 1] - x [i]变得无限小,理论上会匹配积分的理论定义
基于this definition of integral,
其中 F 是 f 的反衍生物或不定积分。
对于y3
或y4
,x=(x[i] + x[i+1])/2
您有y:
对于y2
,x=(x[i] + x[i+1])/2
你有y:
当“x [i + 1] - x [i]变得无限小”时,你会有
换句话说,当“x [i + 1] - x [i]变得无限小”时,y3
或y4
几乎是y=0
处的水平线。为什么y2
与y=0
上的一行相匹配?
如果您确实希望y3
和y4
符合y2
的形状,则需要y0
或“arbitrary constant of integration”像这样开始并制作y3
和y4
:
y0 = -.7
y3 = [y0] # box rule
y4 = [y0] # trapezium rule
for i in range(0,len(x)-1):
xdashElement = (x[i] + x[i+1])/2
y3.append((y1[i]+y1[i+1])/2 * abs(((x[i] - x[i+1]))) + y3[len(y3) - 1]) # box rule
y4.append(((y1[i]+y1[i+1]) * abs(x[i] - x[i+1]))/2 + y4[len(y4) - 1]) # trapezium rule
y3.pop(0)
y4.pop(0)
然后随着step
或“增量x [i + 1] - x [i]变得无限小”的增加,这些y3
和y4
将匹配{{ 1}}。