用程序来求积分的方法有很多,这篇文章主要是有关牛顿-科特斯公式。

学过插值算法的同学最容易想到的就是用插值函数代替被积分函数来求积分,但实际上在大部分场景下这是行不通的。

插值函数一般是一个不超过n次的多项式,如果用插值函数来求积分的话,就会引进高次多项式求积分的问题。这样会将原来的求积分问题带到另一个求积分问题:如何求n次多项式的积分,而且当次数变高时,会出现龙悲歌现象,误差反而可能会增大,并且高次的插值求积公式有可能会变得不稳定:详细原因不赘述。

牛顿-科特斯公式解决这一问题的办法是将大的插值区间分为一堆小的插值区间,使得多项式的次数不会太高。然后通过引入参数函数

将带有幂的项的取值范围固定在一个固定范围内,这样一来就将多项式带有幂的部分的求积变为一个固定的常数,只需手工算出来即可。这个常数可以直接带入多项式求积函数。

上式中x的求积分区间为[a, b],h = (b - a)/n, 这样一来积分区间变为[0, n],需要注意的是从这个公式可以看出一个大的区间被分为n个等长的小区间。 这一部分具体请参见任意一本有关数值计算的书!

n是一个事先确定好的值。

又因为一个大的插值区间需要被分为等长的多个小区间,并在这些小区间上分别进行插值和积分,因此此时的牛顿-科特斯公式被称为:复化牛顿-科特斯公式。

并且对于n的不同取值牛顿-科特斯有不同的名称: 当n=1时,叫做复化梯形公式,复化梯形公式也就是将每一个小区间都看为一个梯形(高为h,上底为f(t), 下底为f(t+1))。这与积分的本质:无限分隔  相同。

当n=2时,复化牛顿-科特斯公式被称为复化辛普森公式(非美国法律界著名的那个辛普森)。

我这篇文章实现的是复化梯形公式:

首先写一个函数求节点函数值求和那部分:

"""

@brief: 求和 ∑f(xk) : xk表示等距节点的第k个节点,不包括端点

xk = a + kh (k = 0, 1, 2, ...)

积分区间为[a, b]

@param: xk 积分区间的等分点x坐标集合(不包括端点)

@param: func 求积函数

@return: 返回值为集合的和

"""

def sum_fun_xk(xk, func):

return sum([func(each) for each in xk])

然后就可以写整个求积分函数了:

"""

@brief: 求func积分 :

@param: a 积分区间左端点

@param: b 积分区间右端点

@param: n 积分分为n等份(复化梯形求积分要求)

@param: func 求积函数

@return: 积分值

"""

def integral(a, b, n, func):

h = (b - a)/float(n)

xk = [a + i*h for i in range(1, n)]

return h/2 * (func(a) + 2 * sum_fun_xk(xk, func) + func(b))

相当的简单

试验:

当把大区间分为两个小区间时:

分为20个小区间时:

求的积分值就是这些彩色的梯形面积之和。

测试代码:

if __name__ == "__main__":

func = lambda x: x**2

a, b = 2, 8

n = 20

print integral(a, b, n, func)

''' 画图 '''

import matplotlib.pyplot as plt

plt.figure("play")

ax1 = plt.subplot(111)

plt.sca(ax1)

tmpx = [2 + float(8-2) /50 * each for each in range(50+1)]

plt.plot(tmpx, [func(each) for each in tmpx], linestyle = '-', color='black')

for rang in range(n):

tmpx = [a + float(8-2)/n * rang, a + float(8-2)/n * rang, a + float(8-2)/n * (rang+1), a + float(8-2)/n * (rang+1)]

tmpy = [0, func(tmpx[1]), func(tmpx[2]), 0]

c = ['r', 'y', 'b', 'g']

plt.fill(tmpx, tmpy, color=c[rang%4])

plt.grid(True)

plt.show()

注意上面代码中的n并不是上文开篇提到的公式中的n,开篇提到的n是指将每一个具体的插值区间(也就是小区间)等距插n个节点,复化梯形公式的n是固定的为1.

而代码中的n指将大区间分为n个小区间。

python与数值计算环境搭建

数值计算的编程的软件很多种,也见过一些编程绘图软件的对比. 利用Python进行数值计算,需要用到numpy(矩阵) ,scipy(公式符号), matplotlib(绘图)这些工具包. 1.Linu ...

【编程练习】收集的一些c++代码片,算法排序,读文件,写日志,快速求积分等等

写日志: class LogFile { public: static LogFile &instance(); operator FILE *() const { return m_file ...

之前写的收集的一些c++代码片,算法排序,读文件,写日志,快速求积分等等

写日志: class LogFile { public: static LogFile &instance(); operator FILE *() const { return m_file ...

牛顿插值法——用Python进行数值计算

拉格朗日插值法的最大毛病就是每次引入一个新的插值节点,基函数都要发生变化,这在一些实际生产环境中是不合适的,有时候会不断的有新的测量数据加入插值节点集, 因此,通过寻找n个插值节点构造的的插值函数与n ...

Python 3 数值计算

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32Type & ...

分段二次插值——用Python进行数值计算

事实上在实际使用中,高次插值显然是很不适合的,高次插值将所有样点包涵进一个插值函数中,这是次幂高的原因.高次计算复杂,而且刚开始的一点误差会被方的很大.因此将整个区间分为若干个小区间,在每一个小区间进 ...

埃尔米特插值问题——用Python进行数值计算

当插值的要求涉及到对插值函数导数的要求时,普通插值问题就变为埃尔米特插值问题.拉格朗日插值和牛顿插值的要求较低,只需要插值函数的函数值在插值点与被插函数的值相等,以此来使得在其它非插值节点插值函数的值 ...

拉格朗日插值法——用Python进行数值计算

插值法的伟大作用我就不说了.... 那么贴代码? 首先说一下下面几点: 1. 已有的数据样本被称之为 "插值节点" 2. 对于特定插值节点,它所对应的插值函数是必定存在且唯一的(关 ...

simpson法求积分 专题练习

[xsy1775]数值积分 题意 多组询问,求\(\int_l^r\sqrt{a(1-{x^2\over b})}dx\) 分析 double f(double x) { return sqrt(a* ...

随机推荐

Reverse Core 第一部分 代码逆向技术基础

@date: 2016/10/14 笔记 记录书中较重要的知识,方便回顾 ps. 因有一些逆向基础,所以我本来就比较熟悉的知识并未详细记录 第一章 关于逆向工程 目标, ...

HDU 1052

http://acm.hdu.edu.cn/showproblem.php?pid=1052 田忌赛马本质就是一个贪心 res表示田忌的胜利场次 1.田忌最快马快于王的最快马,两个最快马比,res++ ...

SQL Sever2008 新手入门第一天安装软件

(计应154兰家才)这学期,新来了一门课程,数据库应用.刚开始什么都不懂,也不知道这东西到底是干嘛,本着路漫漫其修远兮,吾将上下而求索的精神,开始了一段求知路程.刚开始找了一个简单的绿化版sql200 ...

v2013调试无法访问此网站 localhost 拒绝了我们的连接请求

问题描述:          别人给的服务器代码,在本地部署以后调试的,localhost:8080 可以访问,localhost:2524访问不了需要改什么配置吗 解决思路:           这 ...

k8s实战之从私有仓库拉取镜像 - kubernetes

1.实战目的 从私有docker仓库拉取镜像,部署pod.上一篇中,我们搭建了私有的镜像仓库,这一篇我们将与k8s结合实战使用私有仓库. 2.登录docker 为了完成本次实战,需要登录docker, ...

HBase——HMaster启动之一(HMaster的构建)

首先,让我们来到HMaster的main方法.我们今天的流程就从这里开始. 我们需要注意,下图所示的tool的类型就是HMasterCommandLine. 接下来,让我们来到HMasterComma ...

2019 校内赛 RPG的地牢猎手(bfs+优先队列)

Problem Description Luke最近沉迷一款RPG游戏,游戏中角色可以进入地牢关卡,只要顺利走出地牢就可以获得奖励.地牢表示为n行m列的块矩阵,其中每个块只可以是障碍块.入口.出口或数 ...

zabbix3.x添加H3C网络设备详解

zabbix3.x添加H3C网络设备详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 欢迎加入:高级运维工程师之路 598432640 相信大家在看我的文章之前,也看过其 ...

Mysql 登录及用户切换、用户权限查询

启动mysql: 方法一:net start mysql(或者是其他服务名) 方法二:在windows下启动MySQL服务 MySql安装目录:"d:\MySql\" 进入命令行输 ...

Activity设置Dialog属性点击区域外消失实现方式

通过配置:true 通过代码:setFinish ...

python用复化梯形公式积分_复化梯形求积分——用Python进行数值计算相关推荐

  1. 数值分析复化梯形公式matlab,数值分析复化梯形公式,复化Simpson公式MATLAB程序

    <数值分析复化梯形公式,复化Simpson公式MATLAB程序>由会员分享,可在线阅读,更多相关<数值分析复化梯形公式,复化Simpson公式MATLAB程序(1页珍藏版)>请 ...

  2. python创建类统计属性_轻松创建统计数据的Python包

    python创建类统计属性 介绍 (Introduction) Sometimes you may need a distribution figure for your slide or class ...

  3. python就业需要的技能_教你如何快速掌握Python就业技能

    -人生苦短,为什么要学Python? 简单易学 应用广泛 大厂青睐 (油管大神评选的2020最值得学就业语言-Python) 因为以上的种种理由,无论是国外还是国内, Python都荣登2020最值得 ...

  4. python怎么复数乘方开方_运维必须掌握的 Python 宝典:值得每天复习一遍

    前言 本文旨在更好地总结 Python 基础知识,力求简明扼要,以供实战演练时能够快速查询遗忘的知识点. 学一门语言贵在坚持用它,不用就淡忘了,而记录下一篇文章也有助于日后快速回忆.全文分为两大部分, ...

  5. python人生的不同阶段_从入门到入土的Python自学教程,用改变你的人生轨迹

    Python在近几年越来越受追捧,很多童鞋或者职场小伙伴想要提升技能-学习Python. 这是非常好的事情,但问题在于很多人不知道学Python做什么,所以什么零碎细末.艰难晦涩.长篇大论的都去看,很 ...

  6. 学会python怎么赚钱 贴吧_我月薪5000,靠Python搞副业月入3万

    被压垮的打工人,你还好吗? 房贷车贷,上老下小,日常开销, 但你的收入有多少??? 所以你不敢生病,甚至不敢回家! 就为了每个月那么点死工资,还得天天加班. 然而忙忙忙,却变成了"穷忙族&q ...

  7. python循环输入若干成绩_完美解决在oj中Python的循环输入问题

    完美解决在oj中Python的循环输入问题 这几天做题被python的循环输入问题给烦死了,好好查了一下,记录在此. while True: t= sys.stdin.readline().strip ...

  8. 做python项目需要知道什么_一文带你了解python是什么?能做什么?为什么要学?(文末附学习资源)...

    什么是 Python? Python 是一门流行的编程语言.它由 Guido van Rossum 创建,于 1991 年发布. 它用于:1.Web 开发(服务器端) 2.软件开发 3.数学 4.系统 ...

  9. python转go感觉难_读《我为什么从python转向go》的一些感受

    一开始我以为是一篇2013年的老帖子,没想到竟然是2015年.不懂Python不要乱喷啊.你直接说"我不懂Python,我也不愿意维护前任写的糟糕代码,我Go牛B,所以我要重构一遍!&quo ...

最新文章

  1. 虚拟服务器nodejs项目部署打包,nodejs+express搭建服务器及vue项目部署打包
  2. 使用 Mashups4JSF 生成和消费 Mashup Feed
  3. 使用python对比两个目录下的文件名差异
  4. 南宁师范大学计算机与信息工程学院研究生,南宁师范大学计算机与信息工程学院(专业学位)职业技术教育保研...
  5. android 对象数据库中,解析嵌套的JSON对象,并存储在数据库中的Android
  6. ping发送超大数据包(高级用法)
  7. python3动态加载模块的方法实现
  8. C++生成指定范围内的随机数
  9. c# vscode 配置_用VS Code写C#
  10. 加密日记 android,Lifeograph加密日记应用程序
  11. 开氏温度与摄氏度换算_温度是怎么来的,有没有物质没有温度?
  12. 一直很火的steam汇率差赚钱项目详解,如何月入过万
  13. 邮箱批量登陆工具测试版
  14. 成功解决ValueError: Only TF native optimizers are supported in Eager mode
  15. 计算机网络 --- 概述(学习笔记)
  16. C++中 =defaule 和 =delete 使用
  17. 自绘动画android,(译)android利用Canvas和几何学绘制几何动画
  18. 有一种生态叫“鲲鹏”
  19. 最近一口气发布了6款iOS app
  20. 声卡是组成多媒体电脑必不可少的

热门文章

  1. 申宝剖析沪深两市股指高开高走
  2. 4个优质产品帮助中心实例——教你如何提升用户体验和销售
  3. matlab拉普拉斯变换锐化,图像的拉普拉斯锐化方法及讨论
  4. 金山网盾3.6两周拦阻2000万次恶意软件下载
  5. 加拿大FBA专线 什么是加拿大FBA专线物流
  6. 计算机二级报名安大,计算机二级考试PP--张辉老师(安大计协).ppt
  7. #DAYU200#Ability入门
  8. 生鲜配送系统开发解决方案
  9. GET日志服务如何使用让你获得建立DT时代海量日志处理能力
  10. maven添加jra包