Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 积分在integrate.quad中是如何工作的?_Python_Scipy_Numerical Methods - Fatal编程技术网

Python 积分在integrate.quad中是如何工作的?

Python 积分在integrate.quad中是如何工作的?,python,scipy,numerical-methods,Python,Scipy,Numerical Methods,我有一个复杂的函数,我无法理解它的集成行为: 点是否指定了可能的奇点或点的间隔 无论上述答案是什么,如何解释2.1工作而不是2?(还有1,5,…)请注意,奇点的唯一主题是0,但如果没有/w,情况甚至不是这样,函数在那里和附近都是0 即使删除了/w,行为仍然存在 将numpy导入为np 从scipy.integrate导入四元组 def fn(w,mu=11.316582914572866): 回报率(np.exp(-1/(1-((w-mu)*(np.abs(w-mu)

我有一个复杂的函数,我无法理解它的集成行为:

  • 是否指定了可能的奇点或点的间隔
  • 无论上述答案是什么,如何解释
    2.1
    工作而不是
    2
    ?(还有
    1
    5
    ,…)请注意,奇点的唯一主题是0,但如果没有
    /w
    ,情况甚至不是这样,函数在那里和附近都是0
  • 即使删除了
    /w
    ,行为仍然存在

  • 将numpy导入为np
    从scipy.integrate导入四元组
    def fn(w,mu=11.316582914572866):
    回报率(np.exp(-1/(1-((w-mu)*(np.abs(w-mu)<.999))**2))
    )*(np.abs(w-mu)<.999)/w
    对于pt2英寸(1.0,2.0,2.1,5.0):
    打印(pt2,'--',四边形(fn,1e-8,40,点=(0,pt2))[0])
    
  • 您的积分应该在您指定的积分间隔内,即,
    0
    无效
  • quad
    基于数值积分,包括采样和加权函数评估。在函数中添加一个
    print(w)
    ,可以让您查看采样发生的位置
  • 从输出中可以看出,quad是分别运行在例如
    [1e-8,2]
    [2,40]
    上的
  • 输出还显示,在
    mu
    附近没有采集足够的样本。因此,
    quad
    只看到一个几乎始终为零的函数,因此得到结果
  • 您的积分应该在您指定的积分间隔内,即,
    0
    无效
  • quad
    基于数值积分,包括采样和加权函数评估。在函数中添加一个
    print(w)
    ,可以让您查看采样发生的位置
  • 从输出中可以看出,quad是分别运行在例如
    [1e-8,2]
    [2,40]
    上的
  • 输出还显示,在
    mu
    附近没有采集足够的样本。因此,
    quad
    只看到一个几乎始终为零的函数,因此得到结果

  • 根据文档,用于指示积分间隔中的“有趣”区域。给定的点用于初始细分。因此给出
    点=(mu,)
    将[0,40]上的积分细分为区间[0,mu]和[mu,40]。中点值不在通过端点值的直线上,因此误差估计值将不为零,并触发进一步细分,以实现函数的适当采样。还可以给出所有
    点=(mu-1,mu,mu+1)
    ,以便在第一步中处理外部间隔。这一切都不需要非常精确,只要在函数的特征所在的位置获得特征大小的细分点或间隔就足够了

    for pt2 in (1.0, 2.0, 2.1, 5.0):
        print(pt2, '--', quad(fn, 1e-8, 40, points=(11,))[0])
    
    1.0--0.03928247857032486
    2.0 -- 0.03928247857032486
    2.1 -- 0.03928247857032486
    5.0 -- 0.03928247857032486
    

    1.0--0.039282478570323645
    2.0 -- 0.039282478570323645
    2.1 -- 0.039282478570323645
    5.0 -- 0.039282478570323645
    
    根据文档,用于指示集成间隔中的“感兴趣”区域。给定的点用于初始细分。因此给出
    点=(mu,)
    将[0,40]上的积分细分为区间[0,mu]和[mu,40]。中点值不在通过端点值的直线上,因此误差估计值将不为零,并触发进一步细分,以实现函数的适当采样。还可以给出所有
    点=(mu-1,mu,mu+1)
    ,以便在第一步中处理外部间隔。这一切都不需要非常精确,只要在函数的特征所在的位置获得特征大小的细分点或间隔就足够了

    for pt2 in (1.0, 2.0, 2.1, 5.0):
        print(pt2, '--', quad(fn, 1e-8, 40, points=(11,))[0])
    
    1.0--0.03928247857032486
    2.0 -- 0.03928247857032486
    2.1 -- 0.03928247857032486
    5.0 -- 0.03928247857032486
    

    1.0--0.039282478570323645
    2.0 -- 0.039282478570323645
    2.1 -- 0.039282478570323645
    5.0 -- 0.039282478570323645
    
    将0更改为1e-8没有什么区别(至少在这里是这样),但我确实通过2确认了4,这很有帮助。
    积分
    行为仍然是一个谜,“区间对积分”的问题没有得到解决。区间对积分的问题我没有一个确定的答案,但我强烈倾向于区间。例如,使用
    点=[2]
    ,产生间隔
    [1e-8,2]
    [2,40]
    。采样点表明在这些间隔上连续运行
    quad
    。检查源代码并没有为我提供关于到底发生了什么的额外线索。+1提供有用的信息,我同意
    points
    是更可能的间隔,但保持q打开,以便更明确地采取行动。在我看来,
    移动采样空间,有可能完全错过狭窄的非零区域。我最终选择了
    trapz
    ,因为关键行为很容易预测。将0更改为1e-8没有什么区别(至少在这里),但我确实通过2确认了4,这很有帮助。
    积分
    行为仍然是一个谜,“区间对积分”的问题没有得到解决。区间对积分的问题我没有一个确定的答案,但我强烈倾向于区间。例如,使用
    点=[2]
    ,产生间隔
    [1e-8,2]
    [2,40]
    。采样点表明在这些间隔上连续运行
    quad
    。检查源代码并没有为我提供关于到底发生了什么的额外线索。+1提供有用的信息,我同意
    points
    是更可能的间隔,但保持q打开,以便更明确地采取行动。在我看来,
    改变了采样空间,有可能完全错过了narro
    for pt2 in (1.0, 2.0, 2.1, 5.0):
        print(pt2, '--', quad(fn, 1e-8, 40, points=(9,13))[0])