python使用scipy.integrate模块进行数值积分:一维积分quad(),二维积分dblquad()

本文详细介绍如何使用Python的scipy.integrate模块进行一维和二维数值积分。包括基本使用方法、函数定义、lambda表达式应用及常见问题解析。
该文章已生成可运行项目,

基本介绍

一般而言,使用求解微积分可以分为两大类:符号积分(即求出解析解)和数值积分(即求出数值解)。在计算机的处理当中,数值解往往更有意义。
使用python求解数值解的模块:scipy.integrate;常用的有一维积分方法quad()和二维积分quad()。本文也是主要介绍这两种方法的使用。

一维数值积分

from scipy import integrate
# 基本使用格式:integrate(func, a, b)
# func是一个函数名,a是积分下限,b是积分上限
# 值得注意的是,使用该积分函数,需要将被积表达式封装在函数内,比如被积表达式是2*x,积分上下限分别为
# 1和2,口算可得,积分结果为:3;那么编程实现怎么做呢
  • 定义一个普通的函数
def func(x)
	return 2*x  # 值得注意的是,一定要将表达式return出来
integrate(func, 1, 2)   # 出结果 3
  • 使用lambda表达式
integrate(lambda x : 2*x, 1, 2)  # 结果 3

值得注意的是,由于是数值积分,因此一维是不允许有不定积分的,只能是定积分,而且不能是变限积分

二维函数

# 基本使用格式:integrate(func, a, b,afunc, bfunc)
# func是一个函数名,a是外积分下限,b是外积分上限, afunc是内积分下限,bfunc是内积分下限
# 比如下图的一个二维积分

在这里插入图片描述

  • 普通函数法
# 被积函数
def func(y, x)
	return x*y
# 虽然下限是常数,但是还是写成函数形式
def afunc(x)
	return 0
# 上限x
def bfunc(x)
	return x

# 需要注意,func的参数顺序需要对应被积变量的顺序,比如本例就是先积分y,再积分x。
integrate(func, 1, 2, afunc, bfunc)
  • lambda表达式法
integrate(lambda y, x : x*y, 1, 2, lambda x : 0, lambda, x : x)

总体而言,使用lambda会简节一点,但是当积分函数和上下限很复杂时,使用普通函数会好一点

本文章已经生成可运行项目
在这段代码中,`from scipy.integrate import dblquad` 的主要功能是**导入用于计算二重积分数值积分函数 `dblquad`**,它是 SciPy 库中专门用来对二维函数在给定范围内进行双重积分的工具。以下是对其具体作用和功能的详细分析: ### 1. 模块与函数来源 - **`scipy.integrate`**:这是 SciPy 科学计算库中的一个子模块,提供了多种数值积分方法,包括单重、二重、三重以及常微分方程求解等功能。 - **`dblquad` 函数**:全称为 "double quadrature",用于计算形如: $$ \int_{z_{min}}^{z_{max}} \int_{y_{min}(z)}^{y_{max}(z)} f(y, z) \,dy\,dz $$ 或者按变量顺序调整后的二重积分(注意:`dblquad` 默认外层积分变量写在后面)。 ### 2. 在本代码中的关键作用 该导入语句为后续使用 `dblquad` 实现以下两个物理量的计算提供了基础支持: - **矩形截面的惯性积 $ I_{yz} $**:用于结构力学或材料力学中衡量截面对 y 和 z 轴的非对称性; - **直角三角形截面的惯性积 $ I_{yz} $**:验证理论公式近似值是否匹配。 没有这行导入,程序将无法调用 `dblquad`,导致后续积分计算无法执行,并抛出 `NameError`。 ### 3. 使用方式说明 在代码中,`dblquad` 被调用两次: ```python I_yz_rect, err = dblquad(integrand, -h/2, h/2, lambda z: -b/2, lambda z: b/2) ``` 表示对外层变量 `z ∈ [-h/2, h/2]`,内层变量 `y ∈ [-b/2, b/2]` 进行积分,被积函数为 `y*z`。 同理,三角形区域也通过动态上下限(用 `lambda` 定义)实现变限积分。 ### 4. 数值积分的意义 由于这些几何形状虽然有解析解(如矩形关于形心对称时 $ I_{yz} = 0 $),但此代码采用数值方法验证结果,适用于更复杂、无解析解的情况。因此 `dblquad` 提供了通用性和扩展性。 --- 综上所述,`from scipy.integrate import dblquad` 是整个程序能够完成二维区域上惯性积极分的核心前提,使得开发者可以方便地进行复杂的区域积分而无需手动离散化或编写积分算法。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值