【问题标题】:Issue with numerical integration数值积分问题
【发布时间】:2017-12-01 03:42:07
【问题描述】:

我目前被一个隐藏在某个地方的非常简单的错误所困,希望有人能对此有所了解。

我正在尝试将一组数据与常规方法进行数值整合,并获得我不太期望的结果。

然后我回到第一原则并生成了以下代码。由于某种原因,我无法生成 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 的数值微分作为健全性检查。

【问题讨论】:

  • 你得到了什么结果,你期望什么,为什么你期望什么?
  • 您的 y2 似乎不是与 y3 和 y4 相同起点的定积分。它看起来像是一个从 0 开始的定积分,或者一个 C 天真地设置为 0 的不定积分。
  • 实际上,您的 y3 和 y4 甚至都不是定积分;它们是您在数值定积分中求和的各个位。
  • 离题,但是:f1 = 'x**2 - 1'; y1 = eval(f1) -- 请不要这样做。写个函数或者干脆写y1 = x**2 - 1
  • 我添加了 y5,一个 y2 的数值微分作为健全性检查。我知道 y2 是 y1 的不定积分,y3 和 y4 都是沿该范围计算的定积分。我期望 y3 和 y4 的值与 y2 的值​​非常相似,并且根据积分的理论定义,如果增量 x[i+1] - x[i] 变得无限小,理论上会匹配

标签: python integration numerical-methods numerical-integration


【解决方案1】:

您的y2 是不定积分,而您的y3y4 是一系列区间上的定积分。我不会指望他们彼此匹配。如果你想用反导数检查你的数值积分,你的y3y4 应该匹配这个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

编辑以响应integral上的cmets:

我期望 y3 和 y4 的值与 y2 的值​​非常相似,并且如果增量 x[i+1] - x[i] 根据积分的理论定义变得无限小,理论上会匹配

p>

基于this definition of integral

其中Ff 的反导数或不定积分。

对于您的 y3y4x=(x[i] + x[i+1])/2 您有 y:

对于你的y2x=(x[i] + x[i+1])/2 你有 y:

当“x[i+1] - x[i] 变得无限小”时,你会有

换句话说,当“x[i+1] - x[i] 变得无限小”时,您的y3y4 几乎是y=0 处的一条水平线。为什么你的y2 应该匹配y=0 处的一行?

如果你真的想看到你的y3y4 匹配y2 的形状,你需要一个y0 或“arbitrary constant of integration”来开始并制作y3y4像这样:

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] 变得无限小”,这些y3y4 将匹配y2

【讨论】:

  • 我添加了 y5,一个 y2 的数值微分作为健全性检查。我知道 y2 是 y1 的不定积分,y3 和 y4 都是沿该范围计算的定积分。我期望 y3 和 y4 的值与 y2 的值​​非常相似,并且根据积分的理论定义,如果增量 x[i+1] - x[i] 变得无限小,理论上会匹配
  • 我不知道我是否理解正确。什么定理让你得出结论 y3y4 将“理论上匹配”y2 “如果增量 x[i+1] - x[i] 变得无限小”?或者你的“积分的理论定义”是什么?我会在我的回答中更新我的逻辑。能否请您检查一下是否令人信​​服?
  • 嗯,这就是我所指的link如果我错了,请纠正我,据我了解,从沿x轴的每个区间的数值积分获得的值应该类似于该值在 x 点的不定积分函数。
  • 已完成对我的答案的更新。您能否检查一下,如果我在逻辑和/或您的问题中遗漏了什么内容,请告诉我?
  • 还更新了新的y3y4,它们确实与y2 的形状相匹配。如果您不介意,也请检查一下。
猜你喜欢
  • 1970-01-01
  • 2016-04-05
  • 2016-12-16
  • 2021-07-21
  • 1970-01-01
  • 2016-07-12
  • 2012-12-27
  • 1970-01-01
  • 2022-10-05
相关资源
最近更新 更多