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

embedded/2024/11/15 4:44:26/

原文链接: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实现
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:
python">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:
python">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:
python"># %%
# 例题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:
python"># %%
# 例题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


http://www.ppmy.cn/embedded/88348.html

相关文章

NodePort:固定端口

NodePort:固定端口 ## ************************************************** # 测试固定端口 # ## ************************************************* apiVersion: apps/v1 kind: Deployment metadata:name: kevin-fixed-portnamespace: default spec:# 副本数量#replicas: …

javaScript中的对象

创建 this指向 命名规则 不符合变量名的命名规则和规范使用数组关联语法获取 遍历对象 使用for&#xff08;var key in 对象&#xff09; 删除属性 对象引用关系

商家转账到零钱2024最新开通必过攻略

微信支付商家转账到零钱功能申请设置了人工审核的门槛&#xff0c;本意是为了防止没有合规使用场景的商户滥用该功能&#xff0c;但这也让相当多的真实用户被一次次拒之门外。结合过去6年开通此类产品的经验&#xff0c;今天我们就以2024年最新的的商家转账到零钱的开通流程做一…

网络犯罪和网络安全的简史—— 1940 - 2020

注&#xff1a;机翻&#xff0c;未校对。 The History Of Cybercrime And Cybersecurity, 1940-2020 From phone phreaks to next generation cyberattacks 从电话攻击到下一代网络攻击 – Katie Chadd Prague, Czech Republic – Nov. 30, 2020 From the 1940s to the pr…

C++ 列式内存布局数据存储格式 Arrow

Apache Arrow 优点 : 高性能数据处理&#xff1a; Arrow 使用列式内存布局&#xff0c;这特别适合于数据分析和查询操作&#xff0c;因为它允许对数据进行高效批量处理&#xff0c;减少CPU缓存未命中&#xff0c;从而提升处理速度。 零拷贝数据共享&#xff1a; Arrow …

python3.12 搭建MinerU 环境遇到的问题解决

报错&#xff1a; AttributeError: module pkgutil has no attribute ImpImporter. Did you mean: zipimporter? ERROR: Exception: Traceback (most recent call last):File "D:\ipa_workspace\MinerU\Lib\site-packages\pip\_internal\cli\base_command.py", …

Http高级interview

1、Http https区别 1、https协议需要到ca申请证书&#xff0c;一般免费证书较少&#xff0c;因而需要一定费用。 2、http是超文本传输协议&#xff0c;信息是明文传输&#xff0c;https则是具有安全性的ssl加密传输协议。 3、http和https使用的是完全不同的连接方式&#xf…

记录一个k8s集群zookeeper部署过程

由于网管中心交维要求必须是支持高可用配置&#xff0c;原先单节点的zookeeper不被允许。所以在k8s集群中做了一个高可用版本的zookeeper。 期间有点小波折&#xff0c;官方给的镜像版本太老&#xff0c;业务不支持&#xff0c;所以手动做了下处理&#xff0c;重新打了一个镜像…