Main Content

del2

离散拉普拉斯算子

说明

示例

L = del2(U) 在所有点之间使用默认间距 h = 1,返回应用于 U拉普拉斯微分运算子的离散近似值。

示例

L = del2(U,h) 用于在 U 的所有维度中的点之间指定均匀的标量间距 h

示例

L = del2(U,hx,hy,...,hN) 用于在 U 的每个维度中的点之间指定间距 hx,hy,...,hN。将每个间距输入指定为坐标的标量或向量。间距输入数必须等于 U 中的维度数。

  • 第一个间距值 hx 指定点的 x 间距(标量)或 x 坐标(向量)。如果是向量,则其长度必须等于 size(U,2)

  • 第二个间距值 hy 指定点的 y 间距(标量)或 y 坐标(向量)。如果是向量,则其长度必须等于 size(U,1)

  • 所有其他间距值指定 U 中对应维度的各点的间距(标量)或坐标(向量)。对于 n > 2 的情况,如果第 n 个间距输入是向量,则其长度必须等于 size(U,n)

示例

全部折叠

根据位置数据的向量计算对象的加速度。

创建位置数据的向量。

p = [1 3 6 10 16 18 29];

要找出对象的加速度,请使用 del2 来计算 p 的第二个数值导数。在数据点之间使用默认间距 h = 1

L = 4*del2(p)
L = 1×7

     1     1     1     2    -4     9    22

L 的每个值是该点的即时加速度的近似值。

计算余弦向量的一维离散维拉普拉斯算子。

定义函数的域。

x = linspace(-2*pi,2*pi);

这会在 -2πx2π 范围内生成 100 个等间距点。

在此域内创建余弦值的向量。

U = cos(x);

使用 del2 计算 U 的拉普拉斯算子。使用域向量 x 确定 U 中每个点的一维坐标。

L = 4*del2(U,x);

通过解析,此函数的拉普拉斯算子等于 ΔU=-cos(x)

绘制结果。

plot(x,U,x,L)
legend('U(x)','L(x)','Location','Best')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent U(x), L(x).

UL 的图形与拉普拉斯算子的分析结果一致。

计算并绘制多元函数的离散拉普拉斯算子。

定义函数的 x 和 y 域。

[x,y] = meshgrid(-5:0.25:5,-5:0.25:5);

在此域中定义 U(x,y)=13(x4+y4) 函数。

U = 1/3.*(x.^4+y.^4);

使用 del2 计算此函数的拉普拉斯算子。U 中各点之间的间距在所有方向上都相等,因此只要指定一个间距输入 h 即可。

h = 0.25;
L = 4*del2(U,h);

通过解析,此函数的拉普拉斯算子等于 ΔU(x,y)=4x2+4y2

绘制离散拉普拉斯算子 L

figure
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)

Figure contains an axes object. The axes object with title Plot of Delta U leftParenthesis x , y rightParenthesis equals 4 x Squared baseline plus 4 y Squared baseline, xlabel x, ylabel y contains an object of type surface.

L 的图形与拉普拉斯算子的分析结果一致。

计算自然对数函数的离散拉普拉斯算子。

在实数网格上定义函数的 x 和 y 域。

[x,y] = meshgrid(-5:5,-5:0.5:5);

在此域中定义 U(x,y)=12log(x2y) 函数。

U = 0.5*log(x.^2.*y);

当参数 y 为负值时,对数为复数值。

使用 del2 计算此函数的离散拉普拉斯算子。指定每个方向上的网格点之间的间距。

hx = 1; 
hy = 0.5;
L = 4*del2(U,hx,hy);

通过解析,拉普拉斯算子等于 ΔU(x,y)=-(1/x2+1/2y2)。此函数不在行 x=0y=0 上定义。

UL 的实部绘制在同一个图形上。

figure
surf(x,y,real(L))
hold on
surf(x,y,real(U))
grid on
title('Plot of U(x,y) and $\Delta$ U(x,y)','Interpreter','latex')
xlabel('x')
ylabel('y')
zlabel('z')
view(41,58)

Figure contains an axes object. The axes object with title Plot of U(x,y) and Delta U(x,y), xlabel x, ylabel y contains 2 objects of type surface.

上曲面是 U,下曲面是 L

输入参数

全部折叠

输入数组,指定为向量、矩阵或多维数组。

数据类型: single | double
复数支持:

所有维度中的间距,指定为 1(默认值)或标量。

数据类型: single | double
复数支持:

每个维度中的间距,指定为单独的标量(对于均匀间距)或向量(对于非均匀间距)参数。间距输入数必须等于 U 中的维度数。每个间距输入定义 U 的一个维度中的点之间的间距:

  • 第一个间距值 hx 指定点的 x 间距(标量)或 x 坐标(向量)。如果是向量,则其长度必须等于 size(U,2)

  • 第二个间距值 hy 指定点的 y 间距(标量)或 y 坐标(向量)。如果是向量,则其长度必须等于 size(U,1)

  • 所有其他间距值指定 U 中对应维度的各点的间距(标量)或坐标(向量)。对于 n > 2 的情况,如果第 n 个间距输入是向量,则其长度必须等于 size(U,n)

数据类型: single | double
复数支持:

输出参数

全部折叠

离散拉普拉斯算子近似值,以向量、矩阵或多维数组的形式返回。L 与输入 U 的大小相同。

详细信息

全部折叠

拉普拉斯微分运算子

MATLAB® 中的 del2 使用的拉普拉斯算子的定义取决于 U 中数据的维度。

  • 如果 U 是表示函数 U(x) 的向量且该函数在一条直线的点位置进行计算,则 del2(U) 是下式的有限差分逼近

    L=ΔU4=142Ux2.

  • 如果 U 是表示函数 U(x,y) 的矩阵且该函数在方形网格的点位置进行计算,则 del2(U) 是下式的有限差分逼近

    L=ΔU4=14(2Ux2+2Uy2).

  • 对于带有三个或更多变量的函数 U(x,y,z,...),离散拉普拉斯算子 del2(U) 会计算每个维度中的第二个导数,

    L=ΔU2N=12N(2Ux2+2Uy2+2Uz2+...),

    其中 N 是 U 中的维度数,且 N2

算法

如果输入 U 是一个矩阵,则 L 的内部点通过取 U 中的点与其四个相邻点的平均值之间的差值找到:

Lij=[(ui+1,j+ui1,j+ui,j+1+ui,j1)4ui,j].

然后,del2 会通过线性外插第二个差分来从内部延伸计算 L 边界上的值。此公式会针对多维 U 进行扩展。

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2006a 之前推出

另请参阅

|