Python 中的辛普森法则

2023-11-22

对于数值方法类,我需要编写一个程序来计算使用辛普森复合规则的定积分。我已经做到了这一点(见下文),但我的答案不正确。我正在使用 f(x)=x 测试该程序,在 0 到 1 之间积分,结果应为 0.5。我得到 0.78746...等等。 我知道 Scipy 中有辛普森规则,但我真的需要自己编写它。

我怀疑这两个循环有问题。我之前尝试过“for i in range(1, n, 2)”和“for i in range(2, n-1, 2)”,这给了我 0.41668333... 等的结果。 我还尝试了“x += h”,我尝试了“x += i*h”。第一个选项给了我 0.3954,第二个选项给了我 7.9218。

# Write a program to evaluate a definite integral using Simpson's rule with
# n subdivisions

from math import *
from pylab import *

def simpson(f, a, b, n):
    h=(b-a)/n
    k=0.0
    x=a
    for i in range(1,n/2):
        x += 2*h
        k += 4*f(x)
    for i in range(2,(n/2)-1):
        x += 2*h
        k += 2*f(x)
    return (h/3)*(f(a)+f(b)+k)

def function(x): return x

print simpson(function, 0.0, 1.0, 100)

您可能忘记初始化x在第二次循环之前,起始条件和迭代次数也已关闭。这是正确的方法:

def simpson(f, a, b, n):
    h=(b-a)/n
    k=0.0
    x=a + h
    for i in range(1,n/2 + 1):
        k += 4*f(x)
        x += 2*h

    x = a + 2*h
    for i in range(1,n/2):
        k += 2*f(x)
        x += 2*h
    return (h/3)*(f(a)+f(b)+k)

您的错误与循环不变式的概念有关。不要过多讨论细节,通常更容易理解和调试在周期结束时推进的周期,而不是在开始时,这里我移动了x += 2 * h行到末尾,这使得很容易验证求和的开始位置。在您的实现中,有必要分配一个奇怪的x = a - h对于第一个循环仅添加2 * h将其作为循环中的第一行。

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

Python 中的辛普森法则 的相关文章

随机推荐

  • 在 C++ 中以相反的顺序打印我的链接列表

    所以我对 C 相当陌生 今天我决定坐下来了解链表是如何工作的 到目前为止 我玩得很开心 但是当我尝试以相反的顺序打印链接列表时遇到了问题 而不是颠倒链接列表的顺序 另外 我想在没有双链表的情况下执行此操作 include
  • 在SVN中共享文件

    我正在从 VSS 迁移到 SVN 但我不知道如何在 SVN 中共享文件 基本上我们在VSS中有以下结构 MOSS Components ComponentA bin ComponentB bin GAC Mirror GAC Mirror
  • 在单独的 NIB 文件中的多个视图之间共享 NSArrayController

    首先 一些背景知识 我正在尝试在 Cocoa 适用于 OS X 中实现主从接口 也就是说 我有一个窗口有两个NSTableView显示两种不同类型的对象 对于这个问题 假设它们是仓库和包 选择一个与我的实际问题类似的例子 在第一个表视图 在
  • Python列表中浮点数的总和

    我有浮点值s p list swn senti synsets a s p 0 pos score print s Output 0 0 0 0 1 0 0 0 0 25 0 25 然后我尝试 print sum s 这给出了错误 floa
  • 如何在 C# 中将流保存到文件?

    我有一个StreamReader我用流初始化的对象 现在我想将此流保存到磁盘 该流可能是 gif or jpg or pdf 现有代码 StreamReader sr new StreamReader myOtherObject Input
  • 如何使用 Emacs trapmp ssh 到远程主机并以另一个用户的身份临时编辑文件?

    multi 曾经为我工作 现在它消失了 我很沮丧 我想做的是 在我的梦想世界里 myuser remotehost sudo 另一个用户 some path to file 并进行 ido 模式工作 这里的关键是 myuser remote
  • React HTML 编辑器 (TinyMce)

    我正在寻找适用于 React 的 HTML 编辑器 但由于我没有找到任何可以正常工作的内容 我只需要格式化文本 h1 h2 h3 p 粗体和图像 in base64 最后我决定使用Tiny Mce 效果很好 但仅限于第一次打开页面时 如果我
  • Tkinter,将前景图像覆盖在具有透明度的背景图像之上

    我有 2 张 png 格式的图片 第二个图像是具有透明背景的形状 第一张图片 第二张图片 我无法在给定坐标 x y 处将第二个图像置于第一个图像之上 并且通过第二个图像的透明区域可以看到第一个图像 期望的结果 import Tkinter
  • 如何修复“画布:尝试使用回收位图错误”?

    我正在创建一个RecyclerView显示图片网格 当选择其中一个时 它应该打开一个带有过渡的新活动 我正在使用 Glide 库来加载图片 并且过渡看起来很糟糕 因为它会在新活动中重新加载图片 所以我必须将其保存在缓存中 然后将其用于转换
  • Vba检查单元格中是否部分粗体

    我正在从工作表中的文本列表生成 XML 但我不知道如何检查当前单元格中是否有粗体字 我需要做的是检查 A 列中的每个单元格 将文本读入字符串 如果我点击任何粗体单词 请添加 周围有标签 我知道您可以逐字符读取单元格内容 但不能读取其格式 任
  • 同时登录网站和 Chrome 扩展程序

    我们有文件共享服务 http ge tt 以及一些 Chrome 扩展 其中之一为 Gmail 添加了额外的功能 在此扩展中 我们要求用户先登录 Ge tt 然后才能使用该扩展 由于他们已经登录了 Ge tt 所以他们不必再次登录就太好了
  • 如何从 HTTP 请求中获取 MAC 地址?

    有人可以给我一些关于从 HTTP 请求中获取用户 MAC 地址的指示吗 用户将来自outside我的网络 这取决于您的网络设置 但可能不会 以下是对以太网和 IP 的简短回顾 MAC地址是网卡的唯一地址 它用于识别数据包属于该网段上的哪个用
  • Modelmapper:当源对象为空时如何应用自定义映射?

    假设我有课MySource public class MySource public String fieldA public String fieldB public MySource String A String B this fie
  • 如何在SQL Server中使用选择查询创建表?

    我尝试使用 SYS 查询创建 50 100 个表 SELECT windows release windows service pack level windows sku os language version FROM sys dm o
  • Windows 中的 Chrome 63 忽略 autocomplete="new-password"

    我的 asp net 站点中有以下测试页面
  • 如何使用 std::copy 读取任意数量的值?

    我正在尝试编写与此相反的操作 std ostream outs properly initialized of course std set
  • jvm字节码中的栈映射表是什么?

    我正在学习用于生成字节码的 ASM 库 在某些时候 我犯了一些错误的局部变量类型并收到错误 Exception in thread main java lang VerifyError Bad local variable type Exc
  • Java 中的字母常量?

    我遇到一种情况 我需要在字母表中找到字母的索引 在Python中我可以使用string ascii lowercase or string ascii uppercase Java中有类似的东西吗 显然我可以这样做 private stat
  • CSS 选择颜色在 Chrome 上表现奇怪

    我正在尝试使用 CSS 更改网站的选择颜色 selection伪元素 正如所见这个jsFiddle 文本在被选择时应该具有全黑的背景颜色 在 Firefox 上 情况就是如此 然而 在 Chrome 上 颜色是不是绝对的黑 Chrome 似
  • Python 中的辛普森法则

    对于数值方法类 我需要编写一个程序来计算使用辛普森复合规则的定积分 我已经做到了这一点 见下文 但我的答案不正确 我正在使用 f x x 测试该程序 在 0 到 1 之间积分 结果应为 0 5 我得到 0 78746 等等 我知道 Scip