首页 > 其他分享 >数值积分原理与应用

数值积分原理与应用

时间:2023-03-19 12:13:51浏览次数:70  
标签:数值积分 公式 random print range 应用 np 原理 3.14159265

1 理论

计算定积分时,可以通过微元法逼近,如下:

img

若取值均匀,公式如下:

img

通过上述公式可以看到,定积分的值可以通过取样点函数值的线性组合得到。当取样点已经确定时,定积分的精度取决于每个取样点所分配的权值。梯形公式、Simpson公式、Cotes公式、Romberg公式正是通过调整权值来逐步逼近积分值。

(1)复合梯形公式

img

(2) Simpson公式

img

(3)Cotes公式

img

(4)Romberg公式

img

2 实验

借助如下公式,使用 Romberg 求积公式计算 π

img

import numpy as np

def fun(x):
    return 4/(1+x*x)

def romberg(a,b,m): # m>=3
    p=np.zeros(m+1,dtype='int32') #p[i]=2**i
    p[0]=1;
    for i in range(1,m+1):
        p[i]=p[i-1]*2
    n=p[m]
    
    d=b-a
    f=np.random.uniform(a,b,n+1) #保存函数值
    for i in range(n+1):
        x=a+d/n*i
        f[i]=fun(x)
    print("f=\n",f)
    
    T=np.random.uniform(a,b,m) #保存梯度值
    T[0]=(f[0]+f[n])/2
    for i in range(1,m):
        s=0.0
        for k in np.arange(1,p[i-1]+1):
            s+=f[(2*k-1)*p[m-i]]
        T[i]=T[i-1]/2+d/p[i]*s
    print("T=\n",T)
    
    S=np.random.uniform(a,b,m-1) 
    for i in range(m-1):
        S[i]=(4*T[i+1]-T[i])/3 #Simpson公式
    print("S=\n",S)
    
    C=np.random.uniform(a,b,m-2) 
    for i in range(m-2):
        C[i]=(16*S[i+1]-S[i])/15 #Cotes公式
    print("C=\n",C)
    
    R=np.random.uniform(a,b,m-3) 
    for i in range(m-3):
        R[i]=(64*C[i+1]-C[i])/63 #Romberg公式
    print("R=\n",R)
    return R[-1]
    
s=romberg(0,1,8)
T=
 [3.         3.1        3.13117647 3.13898849 3.14094161 3.14142989
 3.14155196 3.14158248]
S=
 [3.13333333 3.14156863 3.1415925  3.14159265 3.14159265 3.14159265
 3.14159265]
C=
 [3.14211765 3.14159409 3.14159266 3.14159265 3.14159265 3.14159265]
R=
 [3.14158578 3.14159264 3.14159265 3.14159265 3.14159265]

img

从运行结果可以看出,在取样点相同的情况下,梯形公式、Simpson公式、Cotes公式、Romberg公式的精度依次增加。

​ 声明:本文转自数值积分原理与应用

标签:数值积分,公式,random,print,range,应用,np,原理,3.14159265
From: https://www.cnblogs.com/zhyan8/p/17232721.html

相关文章

  • 使用LRU加速python应用
    操作系统:CentOS7.6.1810_x64Python版本:3.9.12一、背景描述使用python开发过程中,会遇到需要使用缓存加速应用的情况,比如下面这些场景:数据转换加速字符串时间......
  • 【MyBatis框架】查询缓存-一级缓存原理
    查询缓存1.什么是查询缓存mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。mybaits提供一级缓存,和二级缓存。缓存模式图如图一级缓存是......
  • PC端应用程序自动化测试——pywinauto、pywin32、pyautogui
    1前言PC端自动化测试使用到的python模块主要有pywinauto、win32gui、pyautogui,主要功能如下:pywinauto:主要使用到Application类,用于应用程序管理(打开与关闭应用等......
  • 给你清清楚楚讲明白HTTPS原理
    为什么用了HTTPS就是安全的?HTTPS的底层原理如何实现?用了HTTPS就一定安全吗?HTTPS的实现原理大家可能都听说过HTTPS协议之所以是安全的,是因为HTTPS协议会......
  • 贝塞尔曲线原理
    1前言贝塞尔曲线(Béziercurve)由法国数学家PierreBézier于1962年提出的一种矢量曲线,广泛应用于工程绘图、动画设计等领域。贝塞尔曲线是一种运动轨迹曲线,由n......
  • 【Java邮件开发】3.邮件协议总结与邮件服务器的工作原理
    我们来对邮件协议进行总结,并探讨邮件服务器的工作原理一、邮件协议剖析1.指令过程描述记得上一篇总结,我们手动敲指令发邮件的时候,登录smtp服务器的......
  • 【WebLogic使用】4.使用WebLogic部署Web应用
    我们之前都是使用MyEclipse的Server视窗来部署应用到WebLogic服务器上,但是这仅仅是我们的开发步骤,带我们开发完成之后,将应用部署到生产环境的时候,一......
  • 转置原理
    基本原理我们知道矩阵的转置满足如下性质:记\(V=E_1E_2\dotsE_k\),则\(V^T=E_k^T\dotsE_2^TE_1^T\)。这也就相当于,如果我们有快速的方法得到出\(V^T=E_k^T\dotsE_2^......
  • .NET应用系统的国际化-基于Roslyn抽取词条、更新代码
    上篇文章我们介绍了VUE+.NET应用系统的国际化-多语言词条服务系统国际化改造整体设计思路如下:提供一个工具,识别前后端代码中的中文,形成多语言词条,按语言、界面、模块统......
  • 计算机网络----应用层
    《域名系统》《什么是域名系统?》域名系统DNS(domainnamesystem)是互联网使用的命名系统《为何需要域名系统?》应用层中问题的解决是通过......