首页 > 其他分享 >可视化二维函数的拉普拉斯算子 - 使用有限差分法来近似计算二维标量函数的拉普拉斯算子

可视化二维函数的拉普拉斯算子 - 使用有限差分法来近似计算二维标量函数的拉普拉斯算子

时间:2024-07-05 19:28:08浏览次数:20  
标签:nabla frac 拉普拉斯 Delta 2f 二维 算子 partial

可视化二维函数的拉普拉斯算子 - 使用有限差分法来近似计算二维标量函数的拉普拉斯算子

flyfish

算子(Operator)是指的是一个将函数、向量或其他对象映射到另一对象的数学实体。简单来说,算子就是一种“操作”或“变换”,它把一个输入(通常是函数或向量)变换成另一个输出。算子可以是线性的或非线性的,取决于它们是否满足线性叠加原理。

常见的算子

  1. 微分算子 微分算子是作用在函数上的算子,用于计算函数的导数。最常见的一阶微分算子是 d d x \frac{d}{dx} dxd​ 或 ∂ ∂ x \frac{\partial}{\partial x} ∂x∂​。

  2. 例如,对于函数 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) dxd​f(x)

  3. 积分算子 积分算子是作用在函数上的算子,用于计算函数的积分。通常表示为 ∫ \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

  4. 梯度算子 梯度算子是作用在标量场上的算子,用于计算该场的梯度。通常表示为 ∇ \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​)

  5. 散度算子 散度算子是作用在向量场上的算子,用于计算该场的散度。通常表示为 ∇ ⋅ \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∂Fz​​5. 拉普拉斯算子 拉普拉斯算子是作用在标量场上的算子,用于计算该场的拉普拉斯。通常表示为 Δ \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)。

  1. Δ \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​

  1. ∇ 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),其拉普拉斯算子是该函数二阶偏导数的和。

推导过程

拉普拉斯算子的推导基于梯度和散度的概念:

  1. 梯度(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​)

  2. 散度(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​

用拉普拉斯算子的地方

  1. 泊松方程(Poisson’s equation)
    Δ ϕ = f \Delta \phi = f Δϕ=f
    其中 ϕ \phi ϕ 是电势函数, f f f 是源函数。

  2. 拉普拉斯方程(Laplace’s equation)
    Δ ϕ = 0 \Delta \phi = 0 Δϕ=0
    这是泊松方程的特殊情况,常用于静态场问题。

  3. 热传导方程(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

相关文章

  • LeetCode刷题之搜索二维矩阵
    20247/5一如既往的晴天,分享几张拍的照片嘿嘿,好几天没做题了,在徘徊、踌躇、踱步。蝉鸣的有些聒噪了,栀子花花苞也都掉落啦,今天给他剪了枝,接回一楼来了。ok,做题啦!图1、宿舍阳台摄,每天都是如此美景图2、吃饭路上桥上摄图3、桥的另一边摄okok,做题啦!1、题目描述2、算......
  • Java实现生成二维码及二维码解析
    1、导入所需的工具类jar包<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>com.google.zxing</gro......
  • Django3在网页上生成二维码
    1.安装包pipinstalldjango-qr-code2.在django项目的settings.py中,安装app打开项目的settings.py,找到INSTALLED_APPS,在这里增加一条'qr_code'INSTALLED_APPS=[...,'rest_framework','qr_code',...]3.在渲染的html文件中,导入模板{%loadqr_co......
  • Codeforces Round 918 G. Bicycles (二维最短路)
    G.Bicycles题意:在一个无向图里你要从1点到达n点,每条路的路径长度是该路的权值乘于你当前的慢度因子。而在每个点上我们都有一个慢度因子可以进行更换,问你到达n点所需要的最短时间。思路:我们很容易想到每次遇到更小的慢度因子我们就要更换,但因为存在你先去绕远路拿更小的慢......
  • python 读取条形码以及二维码
    #在AI运用中经常需要读取物体的条码信息,这一步在很多的场景应用中变得非常重要#本文就来浅谈一下pyzbar的运用。一、安装pyzbar的库:pipinstallpyzbar-ihttps://pypi.tuna.tsinghua.edu.cn/simple二、pyzbar库的介绍:pyzbar库是一个基于Python的二维码生成和识别库,它提......
  • 拉普拉斯网格变形实现
    因为课题需要,除了RBF还做了一个Laplace网格变形,其他大佬已经把原理写的很详细了,我就简单介绍一下公式,主要还是写写实现过程。过程同样参考了大佬的部分代码,而且实现的时候刚开始敲代码不久,所以有点乱QAQ。首先,计算离散拉普拉斯坐标,网格上的点vi的拉普拉斯坐标δi为:\[\delta_{i}=......
  • 求各个科目成绩的平均分(二维数组)
    问题描述请从键盘读入一个整数 ......
  • hyperf 生成二维码并且转为CMYK色彩通道的图片
    注意:CMYK色彩通道的图片格式需要为JPEG或TIFF,png是不支持CMYK的,不然转换的话会转换会srgb或Gray使用前先安装imagick拓展1{2"require":{3"ext-imagick":"*"4}5}  1publicfunctioncreateQrcode($data):void2{3//......
  • PCL 拟合二维椭圆(迭代法)
    文章目录一、简介二、实现代码三、实现效果参考资料一、简介一般情况,我们会用椭圆拟合二维点,用椭球拟合三维点。在n维中,这些对象被称为超椭球体,由二次方程隐式定义超椭球的中心是n×1向量C,n×n矩阵S是正定的,n×1向量X是超椭球上的任意点。矩阵S可以用特......
  • java微信公众平台----带参数二维码生成和扫描事件
    功能是在详情页面点击按钮,生成二维码。打开微信扫码,扫码之后手机跳转到公众号并发送一条模板消息。点击模板消息,跳转到H5的详情页面。参考推荐:https://blog.csdn.net/weixin_42720002/category_8977300.html官方文档:https://developers.weixin.qq.com/doc/offiaccount/Account_Ma......