Tanh-sinh 求积数值积分方法收敛到错误值

2024-02-28

我正在尝试编写一个 Python 程序来使用 Tanh-sinh 求积来计算以下值:

但是,尽管程序收敛到一个合理的值,在每种情况下都没有错误,但它没有收敛到正确的值(对于这个特定的积分来说是 pi ),我找不到问题。

该程序不要求所需的准确度,而是要求所需的函数评估数量,以便更容易地比较与更简单的积分方法的收敛性。评估次数必须是奇数,因为使用的近似值为

谁能建议我可能做错了什么?

import math

def func(x):
    # Function to be integrated, with singular points set = 0
    if x == 1 or x == -1 :
        return 0
    else:
        return 1 / math.sqrt(1 - x ** 2)

# Input number of evaluations
N = input("Please enter number of evaluations \n")
if N % 2 == 0:
    print "The number of evaluations must be odd"
else:
    print "N =", N  

# Set step size
h = 2.0 / (N - 1)
print "h =", h

# k ranges from -(N-1)/2 to +(N-1)/2
k = -1 * ((N - 1) / 2.0)
k_max  = ((N - 1) / 2.0)
sum = 0

# Loop across integration interval
while k < k_max + 1:

    # Compute abscissa
    x_k = math.tanh(math.pi * 0.5 * math.sinh(k * h))

    # Compute weight
    numerator = 0.5 * h * math.pi * math.cosh(k * h)
    denominator = math.pow(math.cosh(0.5 * math.pi * math.sinh(k * h)),2)
    w_k =  numerator / denominator

    sum += w_k * func(x_k)

    k += 1

print "Integral =", sum

就其价值而言,Scipy 具有数值积分函数

例如,

from scipy import integrate
check = integrate.quad(lambda x: 1 / math.sqrt(1 - x ** 2), -1, 1)
print 'Scipy quad integral = ', check

给出结果

Scipy四积分 = (3.141592653589591, 6.200897573194197e-10)

其中元组中的第二个数字是绝对误差。

也就是说,我能够通过一些调整让您的程序正常工作(尽管这只是初步尝试):

1) 按照建议将步长 h 设置为 0.0002(大约 1/2^12)这张纸 http://www.davidhbailey.com/dhbpapers/dhb-tanh-sinh.pdf

但请注意 - 论文实际上建议迭代地改变步长 - 使用固定的步长,您将达到一个点,即 sinh 或 cosh 对于足够大的值来说变得太大kh。尝试基于该论文的方法进行实现可能会更好。

但坚持手头的问题,

2) 确保设置足够的迭代以使积分真正收敛,即足够的迭代 math.fabs(w_k * func(x_k))

通过这些调整,我能够使用 > 30000 次迭代将积分收敛到 pi 的正确值(4 位有效数字)。

例如,迭代次数为 31111 次,计算出的 pi 值为 3.14159256208

修改后的示例代码(注意我用 thesum 替换了 sum,sum 是 Python 内置函数的名称):

import math

def func(x):
    # Function to be integrated, with singular points set = 0
    if x == 1 or x == -1 :
        return 0
    else:
        return 1 / math.sqrt(1 - x ** 2)

# Input number of evaluations
N = input("Please enter number of evaluations \n")
if N % 2 == 0:
    print "The number of evaluations must be odd"
else:
    print "N =", N  

# Set step size
#h = 2.0 / (N - 1)
h=0.0002 #(1/2^12)
print "h =", h

# k ranges from -(N-1)/2 to +(N-1)/2
k = -1 * ((N - 1) / 2.0)
k_max  = ((N - 1) / 2.0)
thesum = 0

# Loop across integration interval
actual_iter =0
while k < k_max + 1:

    # Compute abscissa
    x_k = math.tanh(math.pi * 0.5 * math.sinh(k * h))

    # Compute weight
    numerator = 0.5 * h * math.pi * math.cosh(k * h)
    dcosh  = math.cosh(0.5 * math.pi * math.sinh(k * h))
    denominator = dcosh*dcosh
    #denominator = math.pow(math.cosh(0.5 * math.pi * math.sinh(k * h)),2)
    w_k =  numerator / denominator

    thesum += w_k * func(x_k)
    myepsilon = math.fabs(w_k * func(x_k))
    if actual_iter%2000 ==0 and actual_iter > k_max/2:
        print "Iteration = %d , myepsilon = %g"%(actual_iter,myepsilon)


    k += 1
    actual_iter += 1

print 'Actual iterations = ',actual_iter
print "Integral =", thesum
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tanh-sinh 求积数值积分方法收敛到错误值 的相关文章

  • Django:将博客条目查看次数增加一。这有效率吗?

    我的索引视图中有以下代码 latest entry list Entry objects filter is published True order by date published 10 for entry in latest ent
  • 优化完美平方问题,类似于Python中的硬币找零

    我这里有一个硬币兑换的解决方案 python 中的 leetcode 硬币兑换 https stackoverflow com questions 69517078 coin change leetcode in python 因为完全平方
  • 如何使用 django (python) 和 s3 上传文件?

    我正在寻找一种将文件上传到 s3 的方法 我正在使用 django 我目前正在使用亚马逊的 python 库进行上传以及以下代码 View def submitpicture request fuser request session lo
  • 重新索引错误没有意义

    I have DataFrames大小在 100k 到 2m 之间 我正在处理这个问题的框架是如此之大 但请注意 我必须对其他框架执行相同的操作 gt gt gt len data 357451 现在这个文件是通过编译许多文件创建的 所以它
  • 蜘蛛内的Scrapyd jobid值

    Scrapy 框架 Scrapyd 服务器 我在获取蜘蛛内部的 jobid 值时遇到一些问题 将数据发布到后http localhost 6800 schedule json http localhost 6800 schedule jso
  • 使用 Pymongo 从 Windows 连接到 AWS 实例上的 MongoDB

    此行反复抛出错误 client MongoClient ec2 12 345 67 89 us east 2 compute amazonaws com 27017 ssl True ssl keyfile C mongo pem 由于显而
  • 了解 asyncio 已经运行的永久循环和挂起的任务

    我在理解如何将新任务挂起到已经运行的事件循环中时遇到问题 这段代码 import asyncio import logging asyncio coroutine def blocking cmd while True logging in
  • 在 vim 折叠线中语法高亮 Python

    我发现代码折叠 http en wikipedia org wiki Code folding帮助我更好地组织我的文件 因此 在我的底部 vimrc 我启用vim代码折叠 http vimdoc sourceforge net htmldo
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 使用 boto3 从 s3 下载时使用 filename 作为文件名

    我正在使用 boto3 上传文件 如下所示 client boto3 client s3 aws access key id id aws secret access key key client upload file tmp test
  • PyCharm 无法识别字典值类型

    我有一个简单的代码片段 其中我将字典值设置为空列表 new dict for i in range 1 13 new dict i 现在 如果在下一行的循环内我会输入new dict i 并添加一个点 我希望 PyCharm 向我显示可用于
  • 使 np.loadtxt 使用多个可能的分隔符

    我有一个程序可以读取数据文件 用户可以选择他们想要使用的列 我希望它对于输入文件更加通用 有时 列可能如下所示 10 34 24 58 8 284 6 121 有时它们可 能看起来像这样 10 34 24 58 8 284 6 121 我希
  • 如何在 Pytorch 中将一维 IntTensor 转换为 int

    如何将一维 IntTensor 转换为整数 这 IntTensor int 给出错误 KeyError Variable containing 423 torch IntTensor of size 1 我所知道的最简单 最干净的方法 In
  • 如何在数据框中绘制包含三列的无向图,形成 3 种不同类型的节点(三方)?

    我正在尝试使用三个不同的列表绘制网络的可视化 这三个列表形成 3 种类型的节点 下面的代码正在运行 如图所示 需要两个列表 用户 ID 评分 但是 我希望我的图表是三部分的 即 user userId review ratings prod
  • PyCharm - 如何挂起所有线程

    我们使用 PyCharm 5 0 1 进行多线程调试 当它在断点处停止时 只有特定线程停止 而所有其他线程继续 这使得 冻结时刻 和检查参数值以及其他线程的当前状态变得困难 当其中一个线程在断点处停止时 是否可以挂起所有线程 这在最新的 P
  • Scrapy 抓取并跟踪 href 中的链接

    我对 scrapy 很陌生 我需要从 url 的主页跟踪 href 到多个深度 再次在 href 链接内我有多个 href 我需要遵循这些href 直到到达我想要抓取的页面 我的页面的示例 html 是 初始页 div class page
  • Pip 突然使用了错误版本的 Python

    在 os x 上使用 pip 时遇到一个奇怪的问题 据我所知 快速查看我的 bash history 似乎可以确认 我最近没有对我的配置进行任何更改 唉 pip 命令似乎突然使用了与以前不同的 python 版本 到目前为止 我使用命令 p
  • Matplotlib 中的 TwoSlopeNorm 未按预期工作

    我正在尝试创建一个具有发散颜色图的绘图 该颜色图在零附近不对称 In this https stackoverflow com a 20146989 6288682例如 DivergingNorm函数被使用并产生我想要的 然而 我使用的是更
  • 在多个图表上绘制一条线

    I don t know how this thing is called or even how to describe it so the title may be a little bit misleading The first a
  • django admin 中内联模型的分页器

    我有这个简单的 django 模型 由一个传感器和特定传感器的值组成 每个日射强度计的值数量很多 gt 30k 是否可以以某种方式分页PyranometerValues在特定日期或一般情况下将分页器应用于管理内联视图 class Pyran

随机推荐

  • ggplotly 上的主标题和 legend.position 问题

    我在如何在 ggplotly 中定位主标题和图例时遇到问题 我希望我的主标题位于图表顶部并左对齐 我还希望我的图例位于图表的底部中心 这是我的代码 library ggplot2 library dplyr library tidyr li
  • 如何更改bookdown中的图形标题格式

    使用 bookdown 单个文档 时 图会自动编号为 图 1 图标题文本 在化学中 惯例是将主要数字标记为 图1 图标题的文本 对于支持信息文件 图S1 图标题的文本 另外 在文本中的图形参考中 我们需要 如图 1 所示 所以参考文本不应该
  • Windows8 中的首选字体大小需要计算器吗?

    在查看一些官方 Windows8 Metro 材料时 我看到了这行 xaml
  • Ken Burns 效果与 nivo 滑块

    有没有人设置一个尼沃滑块 http nivo dev7studios com 平移每个图像 又名肯伯恩斯效应 http en wikipedia org wiki Ken Burns effect 我正在尝试实现它 但有点棘手 事实上 我的
  • 需要对 Docpad 持久性进行解释

    我对 Docpad 中数据持久化背后的架构感到非常困惑 从博客和论坛中 我了解到内存中 和 或输出目录 用于生成的内容 但Docpad的卖点之一是 完全基于文件 从表面上看 将其托管在 Heroku 或任何临时文件系统上似乎不合逻辑 谁能给
  • JavaScript indexOf 忽略大小写

    我正在尝试查找图像的源名称中是否包含noPic可以是大写或小写 var noPic largeSrc indexOf nopic 我应该写 var noPic largeSrc toLowerCase indexOf nopic 但这个解决
  • Django-[Errno 111]使用 smtp 时连接被拒绝

    我正在开发一个 Django 应用程序 该应用程序具有向用户发送电子邮件的功能 在测试用例中 我有一个联系表单 它使用 smtp 通过 gmail 将表单数据作为电子邮件的一部分提交 我按照建议禁用了验证码该视频播放列表 https www
  • IIS 7.5 应用程序初始化(预热)和 HTTPS

    我们已经使用 IIS 7 5 的应用程序初始化模块有一段时间了 它总是工作得很好 然而 我们刚刚开始实施 SSL 这似乎与热身产生了冲突 我已经做了很多研究 但到目前为止还没有解决方案 基本上问题是初始化模块不遵循重定向 我们必须为网站的某
  • mod_wsgi - 致命 Python 错误:initfsencoding:无法加载文件系统编解码器

    使用 Red Hat apache 2 4 6 worker mpm mod wsgi 4 6 5 和 Python 3 7 当我启动 httpd 时 出现上述错误 ModuleNotFoundError No module named e
  • Webstorm 中的 Sails.js 智能感知

    Webstorm for Sails js 应用程序有可用的智能感知吗 在我的所有控制器中 我收到模型未定义的消息 即使它工作得很好 呼叫服务也是如此 我知道这有点旧 但我最终所做的是首先使用与文件相同的名称 如类名 命名所有 module
  • 返回标识值时的 ExecuteScalar 与 ExecuteNonQuery

    试图弄清楚是否最好使用ExecuteScalar or ExecuteNonQuery如果我想返回新插入行的标识列 我读过了这个问题 https stackoverflow com questions 2974154 what is the
  • 将照片保存到 iOS 8 中的自定义相册

    我在这里需要一点帮助 我有一个方法可以将 UIImage 保存到相机胶卷中 在 iOS 8 中没有问题 该方法如下 PHPhotoLibrary sharedPhotoLibrary performChanges PHAssetChange
  • 如何在 IntelliJ 中永久启用行号?

    如何在 IntelliJ IDEA 中永久启用行号 IntelliJ 14 X 及以上版本 从14 0版本开始 设置对话框的路径略有不同 General子菜单已添加到Editor and 外貌如下所示 IntelliJ 8 1 2 13 X
  • 背景附件:已修复在 iPad 上不起作用

    是否有 CSS Modernizr 方法来了解浏览器是否支持 background attachment fixed 我同时使用背景大小和背景附件 background size cover background attachment fi
  • 在传递给 R 中 Arima() 的 xreg 参数之前,我们是否需要对外生变量进行差分?

    我正在尝试在 R 中使用 ARIMAX 构建预测模型 并需要一些关于如何在 xreg 参数中处理协变量的指导 据我了解 auto arima 函数在拟合模型 来自训练期数据 时负责协变量的差异 并且我也不需要差异协变量来生成测试期 未来值
  • JavaScript 中的 [] 是什么意思?

    在下面的javascript代码中有 被赋值为变量的值 这意味着什么 var openTollDebug 它是一个数组文字 这与声明不太一样new Array Array 对象可以在 JavaScript 中被覆盖 但数组文字不能 这是一个
  • 如何使 URLEncoding 不编码冒号?

    我有一个 JSONObject user firstname testuser surname 所以我在对象中有这些特殊字符 我对我拥有的 jsonString 进行 URLEncode urlEncodedJsonReq URLEncod
  • UnityContainer.BuildUp() - 仅当属性为空时,我可以让它将新实例注入到属性中吗?

    我正在反序列化这样的类 class AClass Dependency AnotherClass Property get set 当我使用 BuildUp 对象时 我希望 Unity 仅在属性为 null 时创建 AnotherClass
  • CMD /im (taskkill) 是什么意思?

    我刚刚读了以下命令 taskkill f im something exe 我读到了 f强制任务关闭 但是什么是 im do 它说taskkill下一个参数something exe是图像名称 又名可执行文件名称 C gt taskkill
  • Tanh-sinh 求积数值积分方法收敛到错误值

    我正在尝试编写一个 Python 程序来使用 Tanh sinh 求积来计算以下值 但是 尽管程序收敛到一个合理的值 在每种情况下都没有错误 但它没有收敛到正确的值 对于这个特定的积分来说是 pi 我找不到问题 该程序不要求所需的准确度 而