MATLAB - 拉普拉斯算子可视化

1、拉普拉斯算子 ∇ 2 \nabla^ 2 2

拉普拉斯算子有很多用途,在物理中常用于波动方程、热传导方程和亥姆霍兹方程的数学模型;在静电学中,拉普拉斯方程和泊松方程的应用随处可见;在数学中,经拉普拉斯算子运算运算为零的函数称为调和函数。可表示为: ∇ ⋅ ( ∇ u ) = ∇ 2 u \nabla \cdot (\nabla u)=\nabla^2 u (u)=2u
拉普拉斯算子在不同的坐标系下具有不同的表达形式:

  • 直角坐标系 ∇ 2 u = ∂ 2 u ∂ x 2 + ∂ 2 u ∂ y 2 + ∂ 2 u ∂ z 2 \nabla^2 u=\frac{\partial^2u}{\partial x^2}+\frac{\partial^2u}{\partial y^2}+\frac{\partial^2u}{\partial z^2} 2u=x22u+y22u+z22u
  • 圆柱坐标系 ∇ 2 u = 1 ρ ∂ ∂ ρ ( ρ ∂ u ∂ ρ ) + 1 ρ 2 ∂ 2 u ∂ ϕ 2 + ∂ 2 u ∂ z 2 \nabla^{2} u=\frac{1}{\rho} \frac{\partial}{\partial \rho}\left(\rho \frac{\partial u}{\partial \rho}\right)+\frac{1}{\rho^{2}} \frac{\partial^{2} u}{\partial \phi^{2}}+\frac{\partial^{2} u}{\partial z^{2}} 2u=ρ1ρ(ρρu)+ρ21ϕ22u+z22u
  • 球坐标系 ∇ 2 u = 1 r 2 ∂ ∂ r ( r 2 ∂ u ∂ r ) + 1 r 2 sin ⁡ θ ∂ ∂ θ ( sin ⁡ θ ∂ u ∂ θ ) + 1 r 2 sin ⁡ 2 θ ∂ 2 u ∂ ϕ 2 \nabla^{2} u=\frac{1}{r^{2}} \frac{\partial}{\partial r}\left(r^{2} \frac{\partial u}{\partial r}\right)+\frac{1}{r^{2} \sin \theta} \frac{\partial}{\partial \theta}\left(\sin \theta \frac{\partial u}{\partial \theta}\right)+\frac{1}{r^{2} \sin ^{2} \theta} \frac{\partial^{2} u}{\partial \phi^{2}} 2u=r21r(r2ru)+r2sinθ1θ(sinθθu)+r2sin2θ1ϕ22u
  • 广义正交曲线坐标系 ∇ 2 ϕ = 1 h 1 h 2 h 3 [ ∂ ∂ u 1 ( h 2 h 3 h 1 ∂ ϕ ∂ u 1 ) + ∂ ∂ u 2 ( h 1 h 3 h 2 ∂ ϕ ∂ u 2 ) + ∂ ∂ u 3 ( h 1 h 2 h 3 ∂ ϕ ∂ u 3 ) ] \nabla^{2} \phi=\frac{1}{h_{1} h_{2} h_{3}}\left[\frac{\partial}{\partial u_{1}}\left(\frac{h_{2} h_{3}}{h_{1}} \frac{\partial \phi}{\partial u_{1}}\right)+\frac{\partial}{\partial u_{2}}\left(\frac{h_{1} h_{3}}{h_{2}} \frac{\partial \phi}{\partial u_{2}}\right)+\frac{\partial}{\partial u_{3}}\left(\frac{h_{1} h_{2}}{h_{3}} \frac{\partial \phi}{\partial u_{3}}\right)\right] 2ϕ=h1h2h31[u1(h1h2h3u1ϕ)+u2(h2h1h3u2ϕ)+u3(h3h1h2u3ϕ)]
    下面的代码利用公式 ∇ 2 F ⃗ = ∇ ( ∇ ⋅ F ⃗ ) − ∇ × ( ∇ × F ⃗ ) \nabla^{2} \vec{F}=\nabla(\nabla \cdot \vec{F})-\nabla \times(\nabla \times \vec{F}) 2F =(F )×(×F )对矢量函数 V V V进行矢量的拉普拉斯运算,并显示最终的结果。
syms x y z
V = [x^2*y, y^2*z, z^2*x];
vars = [x y z];
gradient(divergence(V,vars)) - curl(curl(V,vars),vars)

运行结果:
在这里插入图片描述

2、del2函数

del2是离散拉普拉斯算子,利用差分运算得到微分运算的近似值。基本格式如下:

  1. L = d e l 2 ( u ) L=del2(u) L=del2(u)
    该函数返回标量函数 u u u的拉普拉斯微分运算的离散逼近,所有点之间离散化间距取默认值1。

  2. L = d e l 2 ( u , h ) L=del2(u,h) L=del2(u,h)该函数返回标量函数 u u u的拉普拉斯微分运算的近似值。所有维度上的点指定了一个均匀的标量间距 h h h

  3. L = d e l 2 ( u , h x , h y , … , h N ) L=del2(u,hx,hy,…,hN) L=del2(u,hx,hy,,hN)
    与前面类似的,指定 h x , h y , … , h N hx,hy,…,hN hx,hy,,hN u u u的每个维度上的点的间距。需要注意的是,根据有限差分的理论,del2得到的是拉普拉斯运算的1/4的近似值,而不是运算本身。

3、拉普拉斯矩阵的可视化

下面的代码计算一个余弦函数的一维拉普拉斯矩阵。

x = linspace(-2*pi,2*pi);	             %定义x向量
U = cos(x);	                             %计算cos(x)
L = 4*del2(U,x);                         %计算U的拉普拉斯,注意系数4
plot(x,U,x,L)    	                     %画出U和U的拉普拉斯曲线
legend('U(x)','L(x)','Location','Best')	 %给出图例

结果如下:
MATLAB - 拉普拉斯算子可视化_第1张图片
对于多元函数,也可以计算其对应的拉普拉斯运算的结果,下面的代码是计算并绘制二维函数的离散拉普拉斯运算结果。

[x,y] = meshgrid(-5:0.25:5,-5:0.25:5);   %定义函数在x,y方向的区域
U = 1/3.*(x.^4+y.^4);                    %定义函数U
h = 0.25;                                %U中各点的间距在所有方向上都相等,所以可以指定一个间距h
L = 4*del2(U,h);                         %计算U的拉普拉斯变换
surf(x,y,L);
grid on;
title('Plot of $\Delta U(x,y) = 4x^2+4y^2$','Interpreter','latex')
xlabel('x');
ylabel('y');
zlabel('z');
view(35,14);

结果如下:
MATLAB - 拉普拉斯算子可视化_第2张图片

你可能感兴趣的:(MATLAB,matlab,线性代数,高斯拉普拉斯算子)