可视化二维函数的拉普拉斯算子 - 使用有限差分法来近似计算二维标量函数的拉普拉斯算子
flyfish
算子(Operator)是指的是一个将函数、向量或其他对象映射到另一对象的数学实体。简单来说,算子就是一种“操作”或“变换”,它把一个输入(通常是函数或向量)变换成另一个输出。算子可以是线性的或非线性的,取决于它们是否满足线性叠加原理。
常见的算子
-
微分算子 微分算子是作用在函数上的算子,用于计算函数的导数。最常见的一阶微分算子是 d d x \frac{d}{dx} dxd 或 ∂ ∂ x \frac{\partial}{\partial x} ∂x∂。
-
例如,对于函数 f ( x ) f(x) f(x),微分算子 d d x \frac{d}{dx} dxd 作用在 f ( x ) f(x) f(x) 上得到它的导数:
d d x f ( x ) \frac{d}{dx} f(x) dxdf(x) -
积分算子 积分算子是作用在函数上的算子,用于计算函数的积分。通常表示为 ∫ \int ∫。例如,对于函数 f ( x ) f(x) f(x),积分算子 ∫ \int ∫ 作用在 f ( x ) f(x) f(x) 上得到它的积分:
∫ f ( x ) d x \int f(x) \, dx ∫f(x)dx -
梯度算子 梯度算子是作用在标量场上的算子,用于计算该场的梯度。通常表示为 ∇ \nabla ∇。例如,对于标量场 f ( x , y , z ) f(x, y, z) f(x,y,z),梯度算子 ∇ \nabla ∇ 作用在 f f f 上得到一个向量场:
∇ f = ( ∂ f ∂ x , ∂ f ∂ y , ∂ f ∂ z ) \nabla f = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z} \right) ∇f=(∂x∂f,∂y∂f,∂z∂f) -
散度算子 散度算子是作用在向量场上的算子,用于计算该场的散度。通常表示为 ∇ ⋅ \nabla \cdot ∇⋅。例如,对于向量场 F = ( F x , F y , F z ) \mathbf{F} = (F_x, F_y, F_z) F=(Fx,Fy,Fz),散度算子 ∇ ⋅ \nabla \cdot ∇⋅ 作用在 F \mathbf{F} F 上得到一个标量场:
∇ ⋅ F = ∂ F x ∂ x + ∂ F y ∂ y + ∂ F z ∂ z \nabla \cdot \mathbf{F} = \frac{\partial F_x}{\partial x} + \frac{\partial F_y}{\partial y} + \frac{\partial F_z}{\partial z} ∇⋅F=∂x∂Fx+∂y∂Fy+∂z∂Fz5. 拉普拉斯算子 拉普拉斯算子是作用在标量场上的算子,用于计算该场的拉普拉斯。通常表示为 Δ \Delta Δ 或 ∇ 2 \nabla^2 ∇2。例如,对于标量场 f ( x , y , z ) f(x, y, z) f(x,y,z),拉普拉斯算子 Δ \Delta Δ 作用在 f f f 上得到:
Δ f = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 + ∂ 2 f ∂ z 2 \Delta f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} + \frac{\partial^2 f}{\partial z^2} Δf=∂x2∂2f+∂y2∂2f+∂z2∂2f
用到的地方
薛定谔方程中的哈密顿算子(Hamiltonian operator)用于描述量子力学系统的能量。
控制系统中的微分算子用于描述系统的响应。
傅里叶变换算子用于将函数从时间域转换到频率域。
打比方
可以将算子理解为一个函数的“加工厂”。比如,把一个函数
f
(
x
)
f(x)
f(x) 送进加工厂(算子)进行“加工”,然后输出一个新的函数或值。
例如:
-
微分算子 d d x \frac{d}{dx} dxd 是一个“微分加工厂”,它把 f ( x ) f(x) f(x) 变成 f ′ ( x ) f'(x) f′(x)。
-
积分算子 ∫ \int ∫ 是一个“积分加工厂”,它把 f ( x ) f(x) f(x) 变成 ∫ f ( x ) d x \int f(x) \, dx ∫f(x)dx。
-
拉普拉斯算子 Δ \Delta Δ 是一个“二阶微分加工厂”,它把 f ( x , y , z ) f(x, y, z) f(x,y,z) 变成 ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 + ∂ 2 f ∂ z 2 \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} + \frac{\partial^2 f}{\partial z^2} ∂x2∂2f+∂y2∂2f+∂z2∂2f。
拉普拉斯算子的符号可以表示为 Δ \Delta Δ 或 ∇ 2 \nabla^2 ∇2,它们都是指同一个算子,只是在表示方法上有所不同:
Δ
\Delta
Δ 和
∇
2
\nabla^2
∇2 都表示拉普拉斯算子。
Δ
f
\Delta f
Δf 是直接表示拉普拉斯算子作用在函数
f
f
f 上。
∇
2
f
\nabla^2 f
∇2f 表示梯度的散度,即
∇
⋅
(
∇
f
)
\nabla \cdot (\nabla f)
∇⋅(∇f)。
- Δ \Delta Δ 符号 :
-
Δ \Delta Δ 是拉普拉斯算子的标准符号。
-
它表示作用在一个标量场(或函数)上的算子,计算该函数的二阶偏导数的和。
-
例如,在三维空间中,对一个标量函数 f ( x , y , z ) f(x, y, z) f(x,y,z) 的拉普拉斯算子表示为:
Δ f = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 + ∂ 2 f ∂ z 2 \Delta f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} + \frac{\partial^2 f}{\partial z^2} Δf=∂x2∂2f+∂y2∂2f+∂z2∂2f
- ∇ 2 \nabla^2 ∇2 符号 :
-
∇ 2 \nabla^2 ∇2 是拉普拉斯算子的另一种表示方法,使用的是梯度和散度的组合。
-
∇ \nabla ∇ 是梯度算子(grad operator), ∇ ⋅ \nabla \cdot ∇⋅ 是散度算子(div operator)。
-
拉普拉斯算子 ∇ 2 f \nabla^2 f ∇2f 表示为梯度算子的散度:
∇ 2 f = ∇ ⋅ ( ∇ f ) \nabla^2 f = \nabla \cdot (\nabla f) ∇2f=∇⋅(∇f) -
例如,在三维空间中,拉普拉斯算子 ∇ 2 f \nabla^2 f ∇2f 的表示为:
∇ 2 f = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 + ∂ 2 f ∂ z 2 \nabla^2 f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} + \frac{\partial^2 f}{\partial z^2} ∇2f=∂x2∂2f+∂y2∂2f+∂z2∂2f
拉普拉斯算子
拉普拉斯算子(Laplace operator)通常用
Δ
\Delta
Δ 或
∇
2
\nabla^2
∇2 表示,定义为梯度算子作用两次后的结果,即梯度的散度。在三维笛卡尔坐标系中,拉普拉斯算子定义为:
Δ
f
=
∇
2
f
=
∂
2
f
∂
x
2
+
∂
2
f
∂
y
2
+
∂
2
f
∂
z
2
\Delta f = \nabla^2 f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} + \frac{\partial^2 f}{\partial z^2}
Δf=∇2f=∂x2∂2f+∂y2∂2f+∂z2∂2f对于一个标量函数
f
(
x
,
y
,
z
)
f(x, y, z)
f(x,y,z),其拉普拉斯算子是该函数二阶偏导数的和。
推导过程
拉普拉斯算子的推导基于梯度和散度的概念:
-
梯度(Gradient) :对于标量场 f f f,梯度 ∇ f \nabla f ∇f 是一个向量场,表示在每个点处函数 f f f 的最大变化率及其方向。
∇ f = ( ∂ f ∂ x , ∂ f ∂ y , ∂ f ∂ z ) \nabla f = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z} \right) ∇f=(∂x∂f,∂y∂f,∂z∂f) -
散度(Divergence) :对于向量场 F = ( F x , F y , F z ) \mathbf{F} = (F_x, F_y, F_z) F=(Fx,Fy,Fz),散度 ∇ ⋅ F \nabla \cdot \mathbf{F} ∇⋅F 是一个标量场,表示向量场在每个点的“发散”程度。
∇ ⋅ F = ∂ F x ∂ x + ∂ F y ∂ y + ∂ F z ∂ z \nabla \cdot \mathbf{F} = \frac{\partial F_x}{\partial x} + \frac{\partial F_y}{\partial y} + \frac{\partial F_z}{\partial z} ∇⋅F=∂x∂Fx+∂y∂Fy+∂z∂Fz
当我们对梯度再取散度时,即 ∇ ⋅ ( ∇ f ) \nabla \cdot (\nabla f) ∇⋅(∇f),我们得到拉普拉斯算子:
Δ f = ∇ 2 f = ∇ ⋅ ( ∇ f ) = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 + ∂ 2 f ∂ z 2 \Delta f = \nabla^2 f = \nabla \cdot (\nabla f) = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} + \frac{\partial^2 f}{\partial z^2} Δf=∇2f=∇⋅(∇f)=∂x2∂2f+∂y2∂2f+∂z2∂2f
用拉普拉斯算子的地方
-
泊松方程(Poisson’s equation) :
Δ ϕ = f \Delta \phi = f Δϕ=f
其中 ϕ \phi ϕ 是电势函数, f f f 是源函数。 -
拉普拉斯方程(Laplace’s equation) :
Δ ϕ = 0 \Delta \phi = 0 Δϕ=0
这是泊松方程的特殊情况,常用于静态场问题。 -
热传导方程(Heat equation) :
∂ u ∂ t = α Δ u \frac{\partial u}{\partial t} = \alpha \Delta u ∂t∂u=αΔu
描述温度 u u u 随时间 t t t 的变化, α \alpha α 是热扩散系数。
可视化二维函数的拉普拉斯算子
使用有限差分法来近似计算二维标量函数
f
(
x
,
y
)
f(x, y)
f(x,y) 的拉普拉斯算子
Δ
f
\Delta f
Δf
下面的代码使用有限差分法来近似计算二维标量函数
f
(
x
,
y
)
f(x, y)
f(x,y) 的拉普拉斯算子
Δ
f
\Delta f
Δf。
解释
数学表达式
对于一个二维标量函数
f
(
x
,
y
)
f(x, y)
f(x,y),其拉普拉斯算子
Δ
f
\Delta f
Δf 表示为:
Δ
f
=
∂
2
f
∂
x
2
+
∂
2
f
∂
y
2
\Delta f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2}
Δf=∂x2∂2f+∂y2∂2f这里,
∂
2
f
∂
x
2
\frac{\partial^2 f}{\partial x^2}
∂x2∂2f 和
∂
2
f
∂
y
2
\frac{\partial^2 f}{\partial y^2}
∂y2∂2f 分别是
f
f
f 关于
x
x
x 和
y
y
y 的二阶偏导数。
有限差分法
有限差分法是数值方法的一种,用于近似微分算子的计算。在这段代码中,我们使用中心差分公式来近似计算二阶偏导数。
中心差分公式计算一维函数
f
(
x
)
f(x)
f(x) 的二阶导数的近似值:
∂
2
f
∂
x
2
≈
f
(
x
+
h
)
−
2
f
(
x
)
+
f
(
x
−
h
)
h
2
\frac{\partial^2 f}{\partial x^2} \approx \frac{f(x + h) - 2f(x) + f(x - h)}{h^2}
∂x2∂2f≈h2f(x+h)−2f(x)+f(x−h)同理,二维函数
f
(
x
,
y
)
f(x, y)
f(x,y) 的二阶偏导数可以近似为:
∂
2
f
∂
x
2
≈
f
(
x
+
Δ
x
,
y
)
−
2
f
(
x
,
y
)
+
f
(
x
−
Δ
x
,
y
)
Δ
x
2
\frac{\partial^2 f}{\partial x^2} \approx \frac{f(x + \Delta x, y) - 2f(x, y) + f(x - \Delta x, y)}{\Delta x^2}
∂x2∂2f≈Δx2f(x+Δx,y)−2f(x,y)+f(x−Δx,y)
∂
2
f
∂
y
2
≈
f
(
x
,
y
+
Δ
y
)
−
2
f
(
x
,
y
)
+
f
(
x
,
y
−
Δ
y
)
Δ
y
2
\frac{\partial^2 f}{\partial y^2} \approx \frac{f(x, y + \Delta y) - 2f(x, y) + f(x, y - \Delta y)}{\Delta y^2}
∂y2∂2f≈Δy2f(x,y+Δy)−2f(x,y)+f(x,y−Δy)然后,拉普拉斯算子
Δ
f
\Delta f
Δf 的近似值为:
Δ
f
≈
f
(
x
+
Δ
x
,
y
)
−
2
f
(
x
,
y
)
+
f
(
x
−
Δ
x
,
y
)
Δ
x
2
+
f
(
x
,
y
+
Δ
y
)
−
2
f
(
x
,
y
)
+
f
(
x
,
y
−
Δ
y
)
Δ
y
2
\Delta f \approx \frac{f(x + \Delta x, y) - 2f(x, y) + f(x - \Delta x, y)}{\Delta x^2} + \frac{f(x, y + \Delta y) - 2f(x, y) + f(x, y - \Delta y)}{\Delta y^2}
Δf≈Δx2f(x+Δx,y)−2f(x,y)+f(x−Δx,y)+Δy2f(x,y+Δy)−2f(x,y)+f(x,y−Δy)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 定义二维标量函数
def f(x, y):
return np.sin(np.pi * x) * np.sin(np.pi * y)
# 计算拉普拉斯算子
def laplacian(f, x, y, dx, dy):
f_xx = (f(x + dx, y) - 2 * f(x, y) + f(x - dx, y)) / dx**2
f_yy = (f(x, y + dy) - 2 * f(x, y) + f(x, y - dy)) / dy**2
return f_xx + f_yy
# 设置网格
x = np.linspace(0, 1, 100)
y = np.linspace(0, 1, 100)
X, Y = np.meshgrid(x, y)
# 计算函数值和拉普拉斯算子
Z = f(X, Y)
L = laplacian(f, X, Y, x[1] - x[0], y[1] - y[0])
# 可视化
fig = plt.figure(figsize=(12, 6))
ax1 = fig.add_subplot(121, projection='3d')
ax1.plot_surface(X, Y, Z, cmap='viridis')
ax1.set_title('函数 $f(x, y)$')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_zlabel('f(x, y)')
ax2 = fig.add_subplot(122, projection='3d')
ax2.plot_surface(X, Y, L, cmap='viridis')
ax2.set_title('拉普拉斯算子 $\\Delta f(x, y)$')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax2.set_zlabel('$\\Delta f(x, y)$')
plt.show()
标签:nabla,frac,拉普拉斯,Delta,2f,二维,算子,partial
From: https://blog.csdn.net/flyfish1986/article/details/140186846