python数值积分_数值积分 python代码实现

老规矩,数学原理什么的就不写了。

直接贴代码和实例演示,以下代码基于python和numpy。

在这里,我将用代码实现复化梯形算法、复化 Simpson 算法、Romberg 积分算法和三点 Gauss-Legendre求积算法。

往期博客:

线性方程组的迭代法 python代码实现

函数插值法之牛顿插值法 python代码实现

数值积分复化梯形算法定义函数参数说明实例运行复化 Simpson 算法定义函数参数说明实例运行Romberg 积分算法定义函数参数说明实例运行三点 Gauss-Legendre求积算法定义函数参数说明实例运行总结

复化梯形算法

复化梯形公式如下图所示:

首先

import numpy as np

定义函数

以下便是我定义的函数:

def tx_fh(x0,f,n):

a=x0[0] b=x0[1] x=np.linspace(a,b,n+1)

y=2*np.sum(f(x))-f(a)-f(b)

tn=((b-a)/n)*y/2

return tn

参数说明

“x0”指的是自变量的定义域。

“f”指的是函数(以后再实现不是函数,而是确定值的)。

“n”指的是将定义域分为n等份。

实例运行x=np.array([0,1])

f=lambda x:4/(1+x**2)

tx_fh(x,f,2**3)

得出以下结果:

3.1389884944910893

复化 Simpson 算法

复化 Simpson 公式如下图所示:

定义函数

以下便是我定义的函数:

def simpson_fh(x0,f,n):

a=x0[0] b=x0[1] x=np.linspace(a,b,2*n+1)

x1=x[1::2].copy()

x2=x[0::2].copy()

y=4*np.sum(f(x1))+2*np.sum(f(x2))-f(a)-f(b)

sn=((b-a)/n)*y/6

return sn

参数说明

“x0”指的是自变量的定义域。

“f”指的是函数(以后再实现不是函数,而是确定值的)。

“n”指的是将定义域分为2n等份。

实例运行x=np.array([0,1])

f=lambda x:4/(1+x**2)

simpson_fh(x,f,2**2)

得出以下结果:

3.141592502458707

综上可知,在相同的等份数下,相比于复化梯形,复化 Simpson更为精确。

Romberg 积分算法

Romberg 积分算法的计算过程如下图所示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值