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 π x 2 π 范围内生成 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')

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

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

定义函数的 x 和 y 域。

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

在此域中定义 U ( x , y ) = 1 3 ( x 4 + y 4 ) 函数。

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

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

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

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

绘制离散拉普拉斯算子 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)

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

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

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

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

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

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

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

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

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

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

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

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)

上曲面是 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 = Δ U 4 = 1 4 2 U x 2 .

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

    L = Δ U 4 = 1 4 ( 2 U x 2 + 2 U y 2 ) .

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

    L = Δ U 2 N = 1 2 N ( 2 U x 2 + 2 U y 2 + 2 U z 2 + ... ) ,

    其中 N 是 U 中的维数,且 N 2

算法

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

L i j = [ ( u i + 1 , j + u i 1 , j + u i , j + 1 + u i , j 1 ) 4 u i , j ] .

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

扩展功能

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

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

版本历史记录

在 R2006a 之前推出

另请参阅

|

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.