当前位置: 首页 > news >正文

【数值计算方法】数值积分微分-python实现-p2

原文链接:https://www.cnblogs.com/aksoam/p/18279394
更多精彩,关注博客园主页,不断学习!不断进步!

我的主页

csdn很少看私信,有事请b站私信

博客园主页-发文字笔记-常用

有限元鹰的主页 内容:

  1. ABAQUS数值模拟相关
  2. Python科学计算
  3. 开源框架,编程学习笔记

哔哩哔哩主页-发视频-常用

FE-有限元鹰的个人空间 内容:

  1. 模拟案例
  2. 网格划分
  3. 游戏视频,及其他搬运视频

文章目录

  • 我的主页
    • 博客园主页-发文字笔记-常用
    • 哔哩哔哩主页-发视频-常用
    • 5. 高斯公式(Gauss formula)
      • 5.1 常用的高斯型公式
        • 高斯 – 勒让德公式
        • 高斯 – 切比雪夫公式
        • 高斯 – 拉盖尔公式
        • 高斯 – 埃尔米特 (Gauss-Hermite) 公式
      • 5.2 高斯积分的应用

5. 高斯公式(Gauss formula)

考虑带权函数的求积公式:

I [ f ] = ∫ a b ρ ( x ) f ( x ) d x ≈ ∑ i = 0 n ω i f ( x i ) (7) I[f]=\int_a^b\rho(x)f(x)\mathrm{d}x\approx\sum_{i=0}^n\omega_if(x_i)\tag{7} I[f]=abρ(x)f(x)dxi=0nωif(xi)(7)

其中函数 ρ ( x ) > 0 ρ(x) > 0 ρ(x)>0 为已知函数 , 称为权函数.

定义:若对于节点 x i x_i xi ∈ [a,b] 及求积系数 ω i \omega_i ωi , 求积公式(7)的代数精度为 2n+1, 则称节点 x i x_i xi 为高斯点 , ω i \omega_i ωi 为高斯系数 , 相应的求积公式 (7) 称为带权的高斯公式

高斯公式可看成是 f(x) 用高斯点上的n次插值多项式代替所得积分值 . 下面给出了确定高斯点的一种求解方法

定理5.5.2 x i x_i xi (i = 0,1,··· ,n) 是求积公式 (7) 的高斯点的充分必要条件是 : 多项式 Π ( x ) = ∏ i = 0 n ( x − x i ) \Pi(x)=\prod_{i=0}^n(x-x_i) Π(x)=i=0n(xxi) 与任意次数不超过 n 的多项式 q(x) 关于权函数 ρ(x) 正交:
∫ a b ρ ( x ) Π ( x ) q ( x ) d x = 0. \int_a^b\rho(x)\Pi(x)q(x)\mathrm{d}x=0. abρ(x)Π(x)q(x)dx=0.

img

img

5.1 常用的高斯型公式

I [ f ] = ∫ a b ρ ( x ) f ( x ) d x ≈ ∑ i = 0 n ω i f ( x i ) (7) I[f]=\int_a^b\rho(x)f(x)\mathrm{d}x\approx\sum_{i=0}^n\omega_if(x_i)\tag{7} I[f]=abρ(x)f(x)dxi=0nωif(xi)(7)

高斯 – 勒让德公式

ρ ( x ) ≡ 1 , [ a , b ] = [ − 1 , 1 ] \rho(x)\equiv1, [a,b]=[-1,1] ρ(x)1,[a,b]=[1,1] ,此时关于权函数 ρ ( x ) = 1 \rho(x)=1 ρ(x)=1 的区间 [−1,1] 上的正交多项式为勒让德 (Legendre) 正交多项式.

n=0时:

∫ − 1 1 f ( x ) d x ≈ 2 f ( 0 ) , \int_{-1}^1f(x)\mathrm{d}x\approx2f(0), 11f(x)dx2f(0),

n=1时:

∫ − 1 1 f ( x ) d x ≈ f ( − 1 3 ) + f ( 1 3 ) . \int_{-1}^1f(x)\mathrm{d}x\approx f\left(-\frac{1}{\sqrt{3}}\right)+f\left(\frac{1}{\sqrt{3}}\right). 11f(x)dxf(3 1)+f(3 1).

n=2时:

∫ − 1 1 f ( x ) d x ≈ 5 9 f ( − 3 5 ) + 8 9 f ( 0 ) + 5 9 f ( 3 5 ) . \int_{-1}^1f(x)\mathrm{d}x\approx\frac{5}{9}f\left(-\sqrt{\frac{3}{5}}\right)+\frac{8}{9}f(0)+\frac{5}{9}f\left(\sqrt{\frac{3}{5}}\right). 11f(x)dx95f(53 )+98f(0)+95f(53 ).

对于一般区间[a,b]的积分,需要先变换积分区间,然后使用高斯-勒让德公式计算.

x = a + b 2 + b − a 2 t x=\frac{a+b}{2}+\frac{b-a}{2}t x=2a+b+2bat

∫ a b f ( x ) d x = b − a 2 ∫ − 1 1 f ( a + b 2 + b − a 2 t ) d t . \int_a^bf(x)\mathrm{d}x=\frac{b-a}{2}\int_{-1}^1f\left(\frac{a+b}{2}+\frac{b-a}{2}t\right)\mathrm{d}t. abf(x)dx=2ba11f(2a+b+2bat)dt.

∫ a b f ( x ) d x ≈ b − a 2 ∑ i = 0 n ω i f ( a + b 2 + b − a 2 x i ) , \int_a^bf(x)\mathrm{d}x\approx\frac{b-a}{2}\sum_{i=0}^n\omega_if\left(\frac{a+b}{2}+\frac{b-a}{2}x_i\right), abf(x)dx2bai=0nωif(2a+b+2baxi),

其中, ω i \omega_i ωi 为高斯系数, x i x_i xi 为高斯点.

常用的高斯点及高斯系数表:

img

高斯 – 切比雪夫公式

ρ ( x ) = 1 1 − x 2 , [ a , b ] = [ − 1 , 1 ] . \rho(x) = \frac{1}{\sqrt{1-x^{2}}}, [a,b] = [-1,1]. ρ(x)=1x2 1,[a,b]=[1,1].,高斯点 x i x_i xi分布和对应高斯系数 ω i \omega_i ωi为:

x i = cos ⁡ 2 i + 1 2 ( n + 1 ) π , i = 0 , 1 , ⋯ , n . x_i=\cos\frac{2i+1}{2(n+1)}\pi,\quad i=0,1,\cdots,n. xi=cos2(n+1)2i+1π,i=0,1,,n.

ω i = π n + 1 . \omega_i=\frac{\pi}{n+1}. ωi=n+1π.

积分区间为[-1,+1]的高斯–切比雪夫公式为:

∫ − 1 1 1 1 − x 2 f ( x ) d x ≈ π n + 1 ∑ i = 0 n f ( cos ⁡ 2 i + 1 2 ( n + 1 ) π ) . \int_{-1}^1\frac{1}{\sqrt{1-x^2}}f(x)\mathrm{d}x\approx\frac{\pi}{n+1}\sum_{i=0}^nf\left(\cos\frac{2i+1}{2(n+1)}\pi\right). 111x2 1f(x)dxn+1πi=0nf(cos2(n+1)2i+1π).

n=2时:

∫ − 1 1 1 1 − x 2 f ( x ) d x ≈ π 3 [ f ( − 3 2 ) + f ( 0 ) + f ( 3 2 ) ] . \int_{-1}^1\frac{1}{\sqrt{1-x^2}}f(x)\mathrm{d}x\approx\frac{\pi}{3}\left[f\left(-\frac{\sqrt{3}}{2}\right)+f(0)+f\left(\frac{\sqrt{3}}{2}\right)\right]. 111x2 1f(x)dx3π[f(23 )+f(0)+f(23 )].

高斯 – 拉盖尔公式

ρ ( x ) = e − x , [ a , b ] = [ 0 , ∞ ) . \rho(x)=\mathrm{e}^{-x}, [a,b]=[0,\infty). ρ(x)=ex,[a,b]=[0,). 此时高斯系数为:

ω i = x i L n + 2 2 ( x i ) , i = 0 , 1 , ⋯ , n . \omega_i=\frac{x_i}{L_{n+2}^2(x_i)},\quad i=0,1,\cdots,n. ωi=Ln+22(xi)xi,i=0,1,,n.

高斯 – 拉盖尔积分公式为:

∫ 0 ∞ e − x f ( x ) d x ≈ ∑ i = 0 n ω i f ( x ) \int_0^\infty\mathrm{e}^{-x}f(x)\mathrm{d}x\approx\sum_{i=0}^n\omega_if(x) 0exf(x)dxi=0nωif(x)

n=0时:

∫ 0 ∞ e − x f ( x ) d x ≈ f ( 1 ) . \int_0^\infty\mathrm{e}^{-x}f(x)\mathrm{d}x\approx f(1). 0exf(x)dxf(1).

n=1时:

∫ 0 ∞ e − x f ( x ) d x ≈ 2 + 2 4 f ( 2 − 2 ) + 2 − 2 4 f ( 2 + 2 ) . \int_0^\infty\mathrm{e}^{-x}f(x)\mathrm{d}x\approx\frac{2+\sqrt2}{4}f(2-\sqrt2)+\frac{2-\sqrt2}{4}f(2+\sqrt2). 0exf(x)dx42+2 f(22 )+422 f(2+2 ).

n=2,3,4时的高斯点和高斯系数:

img

  • 公式变换

对于形如 ∫ α ∞ e − β x f ( x ) d x ( β > 0 ) \int_{\alpha}^{\infty}\mathrm{e}^{-\beta x}f(x)\mathrm{d}x (\beta>0) αeβxf(x)dx(β>0) 的积分,需要转换为标准高斯-拉盖尔公式的形式:

x = 1 β t + α x=\frac{1}{\beta}t+\alpha x=β1t+α

∫ α ∞ e − β x f ( x ) d x = 1 β e − α β ∫ 0 ∞ e − t f ( 1 β t + α ) d t ≈ 1 β e − α β ∑ i = 0 n ω i f ( x i β + α ) . \begin{aligned} \int_{\alpha}^{\infty}\mathrm{e}^{-\beta x}f(x)\mathrm{d}x& ={\frac{1}{\beta}}\mathrm{e}^{-\alpha\beta}\int_{0}^{\infty}\mathrm{e}^{-t}f\left({\frac{1}{\beta}}t+\alpha\right)\mathrm{d}t \\ &\approx\frac{1}{\beta}\mathrm{e}^{-\alpha\beta}\sum_{i=0}^{n}\omega_{i}f\left(\frac{x_{i}}{\beta}+\alpha\right). \end{aligned} αeβxf(x)dx=β1eαβ0etf(β1t+α)dtβ1eαβi=0nωif(βxi+α).

对于形如 ∫ 0 ∞ g ( x ) d x \int_0^\infty g(x)\mathrm{d}x 0g(x)dx 的积分,首先确保g(x)是收敛的,其次需要转换为标准高斯-拉盖尔公式的形式:

∫ 0 ∞ g ( x ) d x = ∫ 0 ∞ e − x f ( x ) d x ≈ ∑ i = 0 n ω i f ( x i ) = ∑ i = 0 n ω i e x i g ( x i ) . \begin{gathered} \int_{0}^{\infty}g(x)\mathrm{d}x =\int_{0}^{\infty}\mathrm{e}^{-x}f(x)\mathrm{d}x\approx\sum_{i=0}^{n}\omega_{i}f(x_{i}) \\ =\sum_{i=0}^{n}\omega_{i}\mathrm{e}^{x_{i}}g(x_{i}). \end{gathered} 0g(x)dx=0exf(x)dxi=0nωif(xi)=i=0nωiexig(xi).

高斯 – 埃尔米特 (Gauss-Hermite) 公式

ρ ( x ) = e − x 2 , [ a , b ] = ( − ∞ , + ∞ ) . \rho(x) = \mathrm{e}^{-x^{2}}, [a,b] = (-\infty,+\infty). ρ(x)=ex2,[a,b]=(,+). ,高斯点为n+1次埃尔米特正交多项式 H n + 1 ( x ) H_{n+1}(x) Hn+1(x) 的零点, 对应高斯系数为:

ω i = 2 n + 2 ( n + 1 ) ! π [ H n + 2 ( x i ) ] 2 , i = 0 , 1 , ⋯ , n . \omega_i=\frac{2^{n+2}(n+1)!\sqrt{\pi}}{\left[H_{n+2}(x_i)\right]^2},\quad i=0,1,\cdots,n. ωi=[Hn+2(xi)]22n+2(n+1)!π ,i=0,1,,n.

此时求积公式为:

∫ − ∞ + ∞ e − x 2 f ( x ) d x ≈ ∑ i = 0 n ω i f ( x i ) , \int_{-\infty}^{+\infty}\mathrm{e}^{-x^{2}}f(x)\mathrm{d}x\approx\sum_{i=0}^{n}\omega_{i}f(x_{i}), +ex2f(x)dxi=0nωif(xi),

n = 1 时的高斯 – 埃尔米特公式为

∫ − ∞ + ∞ e − x 2 f ( x ) d x ≈ π 2 f ( − 2 2 ) + π 2 f ( 2 2 ) . \int_{-\infty}^{+\infty}\mathrm{e}^{-x^2}f(x)\mathrm{d}x\approx\frac{\sqrt{\pi}}{2}f\left(-\frac{\sqrt{2}}{2}\right)+\frac{\sqrt{\pi}}{2}f\left(\frac{\sqrt{2}}{2}\right). +ex2f(x)dx2π f(22 )+2π f(22 ).

n = 2 时的高斯 – 埃尔米特公式为

∫ − ∞ + ∞ e − x 2 f ( x ) d x ≈ π 6 f ( − 6 2 ) + 2 π 3 f ( 0 ) + π 6 f ( 6 2 ) \int_{-\infty}^{+\infty}\mathrm e^{-x^2}f(x)\mathrm dx\approx\frac{\sqrt{\pi}}{6}f\left(-\frac{\sqrt{6}}{2}\right)+\frac{2\sqrt{\pi}}{3}f(0)+\frac{\sqrt{\pi}}{6}f\left(\frac{\sqrt{6}}{2}\right) +ex2f(x)dx6π f(26 )+32π f(0)+6π f(26 )

高斯 – 埃尔米特公式的另一形式如下,g(x)需要保证广义积分收敛性:

∫ − ∞ + ∞ g ( x ) d x ≈ ∑ i = 0 n ω i e x i 2 g ( x i ) . \int_{-\infty}^{+\infty}g(x)\mathrm{d}x\approx\sum_{i=0}^n\omega_i\mathrm{e}^{x_i^2}g(x_i). +g(x)dxi=0nωiexi2g(xi).

img

5.2 高斯积分的应用

几种积分的python实现
def Integ1dGuassLegendre(f, a:float=-1, b:float=1, n:int=5)->float:"""给定积分区间[a,b]和高斯积分点个数n,计算一维高斯-勒让德积分公式"""# 计算勒让德-高斯积分点及权重roots, weights = legendre_gauss_points_and_weights(n)if a==-1 and b==1:# 标准型积分result=sum([wi*f(xi) for xi,wi in zip(roots,weights)])return resultelse:# 非标准型积分, 需变换积分区间t= lambda x: 0.5*(b-a)*x+0.5*(b+a)result=0.5*(b-a)*sum([wi*f(t(xi)) for xi,wi in zip(roots,weights)])return resultdef legendre_gauss_points_and_weights(n:int)->Tuple[List[float],List[float]]:"""给定高斯点个数n,计算[-1,+1]内的勒让德-高斯积分点及权重"""import scipy.special as sp# 计算勒让德多项式的根(即高斯点)roots, weights = sp.roots_legendre(n)# sp.roots_legendre函数会返回勒让德多项式的根(即高斯点)及其对应的高斯系数。return roots, weightsdef Integ1dGuassHermite(f,n:int=3,Is_standard:bool=True)->float:"""给定n(>=1)值,积分范围[-inf,+inf],计算一维高斯-埃尔米特积分"""# 计算埃尔米特-高斯积分点及权重if n<=0:raise ValueError("高斯-埃尔米特积分时,n必须大于0")print(f"积分点个数: {n+1}, 积分范围: [-inf,+inf]")roots, weights = gauss_hermite_points_and_weights(n+1)if Is_standard:# 为标准型积分result=sum([wi*f(xi) for xi,wi in zip(roots,weights)])return resultelse:# 计算 \int_{-inf}^{+inf} g(x) dxresult=sum([wi*np.exp(xi**2)*f(xi) for xi,wi in zip(roots,weights)])return resultdef gauss_hermite_points_and_weights(n:int)->Tuple[List[float],List[float]]:"""给定高斯点个数n,计算[-inf,+inf]内的埃尔米特-高斯积分点及权重"""import scipy.special as sp# 计算埃尔米特多项式的根(即高斯点)及其对应的高斯系数roots, weights = sp.roots_hermite(n)return roots, weights

img

  • Answer:
f3=lambda x: np.sin(x)/x if x!=0 else 1
from formu_lib import *
# 积分范围
a,b=0,1# 计算积分
r1=VarStepInteg1d(f3,a,b,1e-7,method=2)# 使用高斯勒让德方法计算积分
r2=Integ1dGuassLegendre(f3,a,b)print(f"复化梯形积分:{r1}")
print(f"高斯勒让德积分:{r2}")showError(r1,0.9460831)
showError(r2,0.9460831)# 输出:
# 复化梯形积分:0.9460830464324462
# 高斯勒让德积分:0.9460830703672151
# 数值解: 0.9460830464324462, 精确解: 0.9460831, 误差: 5.662034733111406e-08
# 数值解: 0.9460830703672151, 精确解: 0.9460831, 误差: 3.132154553076945e-08

img

  • Answer:
def f4(alpha:int):return lambda x: abs(x)**(alpha+0.75)a,b=-1,1r={}
n=[1,10,50,100,500,1000]
for alpha in [0,1,2]:re=[]for ni in n:re.append(Integ1dGuassLegendre(f4(alpha=alpha),a,b,ni))r[alpha]=refrom matplotlib import pyplot as plt
for alpha in [0,1,2]:plt.plot(n,r[alpha],label=f"alpha={alpha}")
plt.xlabel('gauss points number')
plt.ylabel(' Integrate Value')
plt.legend()
plt.show()

img

img

  • Answer:
# %%
# 例题5.5.8
from formu_lib import *
f5=lambda x: np.cos(x)result=Integ1dGuassHermite(f5,5)
showError(result, 1.3803884470)# 积分点个数: 5, 积分范围: [-inf,+inf]
# 数值解: 1.3803900759356564, 精确解: 1.380388447, 误差: -1.1800559906898897e-06

img

  • Answer:
# %%
# 例题5.5.9
from formu_lib import *
g=lambda x: 1/(1+x**3)
n=[1,5,10,50,100]
result=[Integ1dGuassLaguerre(g,ni,beta=0) for ni in n]
print(f"广义积分结果:{result}")
# 广义积分结果:1.1693599387646283
from matplotlib import pyplot as pltplt.plot(n,result)
plt.xlabel('gauss points number')
plt.ylabel(' Integrate Value')
plt.title('Gauss-Laguerre Integration Value VS Points Number')
plt.show()
# 收敛于1.2091

img

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • volatile 关键字的两层语义
  • jEasyUI 扩展编辑器
  • 读零信任网络:在不可信网络中构建安全系统06授权
  • springboot的表现层/控制层controller开发
  • 设计模式的类别
  • 【计算机网络】三次握手、四次挥手
  • go selenium 使用总结
  • dbm和w的换算公式
  • FPGA开发——状态机的使用
  • 如何在C语言中实现求解超级丑数
  • 10年仓库管理经验:“管、存、发、盘”一文搞定!
  • 计网面试题
  • shell脚本自动化部署
  • 计算机网络HTTP全讲解,让你透彻掌握HTTP协议(三)http长短连接/代理/网关/缓存/内容协商机制/断点续传
  • 马尔科夫毯:信息屏障与状态独立性的守护者
  • angular组件开发
  • Consul Config 使用Git做版本控制的实现
  • CSS实用技巧
  • If…else
  • java 多线程基础, 我觉得还是有必要看看的
  • java取消线程实例
  • js正则,这点儿就够用了
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 包装类对象
  • 二维平面内的碰撞检测【一】
  • 记一次删除Git记录中的大文件的过程
  • 前嗅ForeSpider采集配置界面介绍
  • 手写一个CommonJS打包工具(一)
  • 小试R空间处理新库sf
  • 一些关于Rust在2019年的思考
  • 用Canvas画一棵二叉树
  • 原生js练习题---第五课
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 带你开发类似Pokemon Go的AR游戏
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​一些不规范的GTID使用场景
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • (160)时序收敛--->(10)时序收敛十
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (ZT)薛涌:谈贫说富
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十三)Flask之特殊装饰器详解
  • (一)Neo4j下载安装以及初次使用
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)c++ std::pair 与 std::make
  • .gitignore文件—git忽略文件
  • .gitignore文件---让git自动忽略指定文件
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践