📜  SciPy-集成(1)

📅  最后修改于: 2023-12-03 14:47:18.617000             🧑  作者: Mango

介绍Scipy集成

Scipy是一个Python的科学计算库,提供了很多高级和实用的数学算法和函数。Scipy中包含了多个子模块,其中集成模块(scipy.integrate)提供了很多数值积分和常微分方程求解的函数和工具。

数值积分

在Scipy中数值积分函数包括quad, dblquad, tplquad等等。

quad

quad函数可以计算一个一元函数在给定区间内的积分,它可以自适应地对函数进行划分和积分求解。

from scipy.integrate import quad

def integrand(x):
    return x**2

ans, err = quad(integrand, 0, 1)
print("The value of integral is: ", ans, ", and the error is: ", err) # ans = 1/3, err = 3.794707603699265e-15
dblquad

dblquad函数可以计算一个二元函数在二维矩形区域内的积分,它可以自适应地对函数进行划分和积分求解。

from scipy.integrate import dblquad

def integrand(x, y):
    return x * y

x_lims = [-1, 1]
y_lims = [0, 1]

ans, err = dblquad(integrand, x_lims[0], x_lims[1], lambda x: y_lims[0], lambda x: y_lims[1])
print("The value of integral is: ", ans, ", and the error is: ", err) # ans = 5.551115123125783e-17, err = 1.8755452713319338e-17
tplquad

tplquad函数可以计算一个三元函数在三维矩形区域内的积分,它可以自适应地对函数进行划分和积分求解。

from scipy.integrate import tplquad

def integrand(x, y, z):
    return x * y * z

x_lims = [-1, 1]
y_lims = [0, 1]
z_lims = [1, 2]

ans, err = tplquad(integrand, x_lims[0], x_lims[1], lambda x: y_lims[0], lambda x: y_lims[1], lambda x, y: z_lims[0], lambda x, y: z_lims[1])
print("The value of integral is: ", ans, ", and the error is: ", err) # ans = -2.7755575615628914e-17, err = 4.4550459188415697e-17
常微分方程求解

Scipy提供了很多常微分方程(ODE)求解器,包括可用于初值和边值问题的一阶和高阶求解器。

odeint

odeint函数可以计算一组常微分方程在一些给定初始条件下的数值解。

from scipy.integrate import odeint
import numpy as np

def derivatives(y, t):
    return np.power(y, 2)

y0 = np.array([1])
t = np.linspace(0, 1, 100)

sol = odeint(derivatives, y0, t)

print("The solution is: ", sol[-1]) # [7.3890561]
solve_ivp

solve_ivp函数是一种更通用的ODE求解器,可以针对不同的求解问题指定不同的算法和参数。

from scipy.integrate import solve_ivp

def derivatives(t, y):
    return np.power(y, 2)

tspan = [0, 1]
y0 = np.array([1])

sol = solve_ivp(derivatives, tspan, y0)

print("The solution is: ", sol.y[:, -1]) # [7.38905621]
总结

集成模块(scipy.integrate)是Scipy中的一个重要模块,用于数值积分和常微分方程求解。quad, dblquad和tplquad函数提供了数值积分计算的功能;odeint和solve_ivp函数则可用于常微分方程求解。使用Scipy中的集成模块可以极大地简化数值计算问题的求解。