1. 实验结果

(1)计算如下积分的近似值及误差:

(真实值约0.693147118)
(2)分别使用梯形公式、Simpson 公式、Cotes 公式以及 Romber 公式计算积分的近似值,并估计误差,结果如下:

由结果可以发现,梯形公式、Simpson 公式以及 Cotes 公式计算结果的误差越来越小。 因为定义的 Romberg 公式的输入参数包括精度要求,本次运行设置精度要求为 0.001,由结 果可见求得的值满足误差要求。

改变输入的参数,设置 Romberg 求积法的精度要求为 0.000001 后,输出表格里的计算 值相应增加,由结果可见求得的值满足精度要求。

2. 代码

test.py

from class5 import integrationnew = integration()print('梯形公式:Newton_Cotes(n=1):')
new.newton_cotes(0, 1, 'trapezoid')
print('\nSimpson公式:Newton_Cotes(n=2):')
new.newton_cotes(0, 1, 'simpson')
print('\nCotes公式:Newton_Cotes(n=4):')
new.newton_cotes(0, 1, 'cotes')
print('\nRomberg公式:')
new.Romberg(0, 1, 0.001)

class5.py

import numpy as np
import sympyclass integration(object):"""包括: 1. Newton_Cotes(n=1,2,4); 2. Romberge求积法"""# 被积函数def f(self, x):y = 1 / (1 + x)return y# 对函数求n阶导,用于计算误差def dc_f(self, x_, n):x = sympy.Symbol('x')f = 1 / (1 + x)return sympy.diff(f, x, n).evalf(subs={x: x_})  # 1. Newton_Cotes(n=1,2,4)def newton_cotes(self, a, b, mode):if mode == 'trapezoid':  # 梯形求积公式I = (b - a) * (self.f(b) + self.f(a)) / 2  R = max((-(b - a) ** 3) * self.dc_f(a, 2) / 12, (-(b - a) ** 3) * self.dc_f(b, 2) / 12)if mode == 'simpson':  # Simpson求积公式h = (b - a) / 2I = (b - a) * (self.f(a) + 4 * self.f(a + h) + self.f(b)) / 6R = max((-h ** 5) * self.dc_f(a, 4) / 90, (-h ** 5) * self.dc_f(b, 4) / 90)if mode == 'cotes':  # Cotes求积公式h = (b - a) / 4I = (b - a) * (7 * self.f(a) + 32 * self.f(a + h) + 12 * self.f(a + 2 * h) + 32 * self.f(a + 3 * h) + 7 * self.f(b)) / 90R = max(-2 * (b - a) * h ** 6 * self.dc_f(a, 6) / 945, -2 * (b - a) * h ** 6 * self.dc_f(b, 6) / 945)print('积分值为:I=', I, ',误差R<=', R)# 2. Romberge求积法def Romberg(self, a, b, e):#  存放计算结果的表4*4T = [[j for j in [0, 0, 0, 0]] for i in range(4)]i = 1# T[1][0]处为T((b-a))T[0][0] = (b - a) * (self.f(b) + self.f(a)) / 2# T[1][0]处为T((b-a)/2),公式T(h)=T(2h)/2 + h*[f(x1)+f(x3)+...]T[1][0] = T[0][0] / 2 + self.f((b - a) / 2) * (b - a) / 2# T[i][k] = T[i][k-1]+(T[i][k-1]-T[i-1][k-1])/(4**k-1)T[1][1] = T[1][0] + (T[1][0] - T[0][0]) / (4 ** i - 1)# 先计算得到了一个2*2的表,如果精度达不到要求时继续执行while abs(T[i][i] - T[i][i - 1]) > e:i += 1   # 多计算表中一行Sum = 0if i == 4:  # 达到构建的表的最大存放量break# 第一列T[i][0]处为T((b-a)/2**i),公式T(h)=T(2h)/2 + h*[f(x1)+f(x3)+...]# Sum计算奇数项之和:[f(x1)+f(x3)+...],T(h)=T(2h)/2 + h*Sumfor j in range(2 ** (i - 1)):Sum = Sum + self.f(a + (2 * j + 1) * (b - a) / 2 ** i)T[i][0] = T[i - 1][0] / 2 + Sum * (b - a) / 2 ** i# 计算除第一列外的数,T[i][k] = T[i][k-1]+(T[i][k-1]-T[i-1][k-1])/(4**k-1)for j in range(1, i + 1):T[i][j] = (T[i][j - 1] * 4 ** i - T[i - 1][j - 1]) / (4 ** i - 1)# 4*4的表仍不能满足精度要求,在表中加行while abs(T[i - 1][-1] - T[i - 1][-2]) > e:Sum = 0T.append([])for j in range(2 ** (i - 1)):Sum = Sum + self.f(a + (2 * j + 1) * (b - a) / 2 ** i)T[i].append(T[i - 1][0] / 2 + Sum * (b - a) / 2 ** i)for j in range(1, i + 1):T[i].append((T[i][j - 1] * 4 ** i - T[i - 1][j - 1]) / (4 ** i - 1))i += 1while [] in T:T.remove([])print('计算过程中的表格如下:')print(np.array(T))if i < 4:I = T[i][i]R = abs(T[i][i] - T[i][i - 1])else:I = T[-1][-1]R = abs(T[-1][-1] - T[-1][-2])print('积分值为:I=', I, ',误差R<=', R)

Python05 梯形公式 Simpson公式 Cotes公式 Romber公式(附代码)相关推荐

  1. java excel添加公式_JAVA实现EXCEL公式专题(四)——字符串函数

    直接上代码:/** * 项目名称: * 文件说明: ExCEL公式类型:字符串公式 * 主要特点: * 版本:1.0 * 制作人:刘晨曦 * 创建时间:2013-12-3 **/ package EX ...

  2. 矩阵求导公式,及MathJax公式编辑

    最近学到线性回归中要用到向量,矩阵求导,所以就搜集了下资料,总结如下: 矩阵求导有两种布局: 分子布局(numerator layout) 分母布局(denominator layout) 下面用向量 ...

  3. latex 数学公式_数学公式、方程式 OCR 识别编辑 LaTeX 公式软件神器—极度公式

    极度公式:化繁为简,助您高效工作 极度公式是一款强大的跨平台专业 Latex 公式软件.支持公式字符编辑与录入.公式模板选择,对于重要公式支持云备份.也可以手机端(安卓)拍照桌面端编辑(Windows ...

  4. 不要再纠结卷积的公式啦!0公式深度解析全连接前馈网络与卷积神经网络!

    文章转载自订阅号「夕小瑶的卖萌屋」中的文章<不要再纠结卷积的公式啦!0公式深度解析全连接前馈网络与卷积神经网络>. Hello~你们的小夕终于吐泡泡了-前几天小夕又加班赶project啦, ...

  5. [弹性力学]应力转轴公式和应变转轴公式的展开式

    一般书上的应力转轴公式和应变转轴公式: 拿出来看: 应变转轴公式类似 我个人感觉这个nii'和njj'有点不好理解,因为我很容易认为它们是相等的,进而我会认为公式是sigma*n*n 但是我又懒得自己 ...

  6. Excel输入公式计算只显示公式不出结果

    问题描述: Excel输入公式计算只显示公式不出结果 产生原因: Excel设置是显示公式,因此不会出现计算结果 也有人说是因为单元格格式为文本格式所以不出结果,但是经过本人测试,在上述公式的形式下无 ...

  7. 计算机函数公式大全ppt,三角函数公式大全分解.ppt

    三角函数公式及推导(祥尽解释) 1-----诱导公式(之一): 常用的诱导公式有以下几组:公式一:设α为任意角,终边相同的角的同一三角函数的值相等:sin(2kπ+α)=sinαcos(2kπ+α)= ...

  8. 计算机怎么复制公式,excel怎么复制公式 -电脑资料

    我们在Excel中编辑报表时,经常会用到相同的公式,其实有一种简单快捷的方法,接下来就让我们一起来看一下吧, 方法一: 首先观察要复制公式的单元格是否连续,如果是连续的,那么只要在输入公式后,用鼠标双 ...

  9. 在Word中让公式在中间,公式编号右对齐

    在写文章中经常会遇到写公式的问题,然而写公式就需要让公式在中间对齐,公式编号右对齐,然而最基本的Word操作却无法实现,现将实现让公式在中间对齐,公式编号右对齐的最新办法分享给大家. 步骤(添加制表符 ...

最新文章

  1. 基于Python的HTTPS协议模拟登陆+爬取页面
  2. MySQL和Linux试题_Linux运维必会的MySql题之(一)
  3. OpenCV3编程入门(毛星云)之用滚动条控制两图片的混合
  4. python old-style inherit invoke parent member way
  5. OpenGL实现齿轮gears联动
  6. 优秀的gdb图形化前端调试器
  7. s7-300 400plc应用技术_西门子S7300/400顺序功能图设计教程,看完豁然开朗!
  8. c语言1E3是什么数据类型,C语言课件第2章数据类型和表达式.ppt
  9. 防止自己骄傲,它是你一生的敌人。
  10. javascript DOM对象转jquery对象
  11. java中伪代码_问Java的伪代码怎么书写
  12. JAVA集合和guava集合使用和原理解析
  13. SetupFactory 制作软件安装包使用详解
  14. VS2010 SP1安装卡在VS10Sp1-KB983509处的解决
  15. Sm4【国密4加密解密】实战
  16. open_table与opened_table
  17. linux远程连接硬件加速,Linux中为谷歌Chrome浏览器启用视频硬件加速的方法
  18. 超级记忆法(4)——第二小时
  19. 免费获取Q币的20种方法?[爆笑版]
  20. DJI的核心竞争力是什么?

热门文章

  1. C语言课后习题(56)
  2. wps vba宏插件_合并和拆分表格,告别VBA和插件,用WPS表格自带功能一键搞定,而且免费!...
  3. python求奇数的乘积_Python中的推导式使用详解
  4. 数据3分钟丨​俄罗斯金融监控局4.6亿卢布招标国产数据库;Meta被欧盟罚款1900万美元;达观数据和天云数据分获数亿元融资...
  5. 46个PPT下载丨QCon 2019年全球软件开发大会PPT
  6. 商业银行如何进行分布式数据库选型思考
  7. ElasticSearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解...
  8. 实践GoF的设计模式:单例模式
  9. API生态的发展与机遇:从5000组数据看中国API生态与开发者现状
  10. 【华为云技术分享】【测试微课堂】 有的放矢制定测试计划