主要内容

拉普拉斯算子的特征值

这个例子展示了如何求解l形区域上拉普拉斯算子的特征值问题。

膜的问题

考虑一个固定在边界的膜 Ω 一个地区的 Ω 在平面上。它的位移 u x y 是由特征值问题描述的 Δ u λ u ,在那里 Δ u u x x + u y y 是拉普拉斯算子和 λ 是标量参数。边界条件是 u x y 0 对所有 x y Ω

拉普拉斯算子是自伴随的负定的,也就是说,只有实的负特征值 λ 存在。存在一个最大(负)离散本征值,对应的本征函数 u 叫做基态.在这个例子中, Ω 为l型区域,与该区域相关的基态为l型膜,即MATLAB®标志。

九点有限差分逼近

特征值问题最简单的方法是近似拉普拉斯算子 Δ u 通过有限差分近似(a钢网)在一个由点和距离组成的方格网格上hx x 方向和距离沪元 y 方向。在这个例子中,近似 Δ u 用求和S_h由中点周围的九个常规网格点组成 x y .未知量是权重 一个 - 1 - 1 ... 一个 1 1

信谊u (x, y)每股收益a11a10a1_1a01a00a0_1a_11a_10a_1_1信谊hx沪元积极的S_h = a_11 * u(x - Eps*hx,y + Eps*hy) +...a01 * u(x,y + Eps*hy) +...a11 * u(x + Eps*hx,y + Eps*hy) +...a_10 * u(x - Eps*hx,y) +...A00 * u(x,y) +...a10 * u(x + Eps*hx,y) +...a_1_1* u(x - Eps*hx,y - Eps*hy) +...a0_1 * u(x,y - Eps*hy) +...a1_1 * u(x + Eps*hx,y - Eps*hy);

使用符号参数每股收益对这个表达式的幂展开进行排序hx而且沪元.知道了权重,你可以通过设置来近似拉普拉斯Eps = 1

t = taylor(S_h, Eps,“秩序”7);

使用多项式系数函数来提取具有相同幂的项的系数每股收益.每个系数都是包含幂的表达式hx沪元的导数。u关于 x 而且 y .自S_h代表 u x x + u y y 的所有其他导数的系数u必须是零。通过替换所有的导数来提取系数u,除了 u x x 而且 u y y ,除以0。取代 u x x 而且 u y y 1。这将泰勒展开简化为您想要计算的系数,并导致以下六个线性方程。

C =公式(coeffs(t, Eps,“所有”));eq0 = subs(C(7),u(x,y),1) == 0;eq11 =潜艇(C (6), (diff (u, x) diff (u, y)], [1,0]) = = 0;eq12 =潜艇(C (6), (diff (u, x) diff (u, y)], [0,1]) = = 0;eq21 =潜艇(C (5), (diff (u, x, x) diff (u, x, y), diff (u, y, y)], [1, 0, 0)) = = 1;eq22 =潜艇(C (5), (diff (u, x, x) diff (u, x, y), diff (u, y, y)], [0, 1,0]) = = 0;eq23 =潜艇(C (5), (diff (u, x, x) diff (u, x, y), diff (u, y, y)], [0, 0, 1]) = = 1;

因为有9个未知权重S_h,通过要求的所有三阶导数来添加进一步的方程u都是0。

eq31 =潜艇(C (4), (diff (u, x, x, x), diff (u, x, x, y), diff (u, x, y, y) diff (u, y, y, y)], [1, 0, 0, 0) = = 0;eq32 =潜艇(C (4), (diff (u, x, x, x), diff (u, x, x, y), diff (u, x, y, y) diff (u, y, y, y)], [0 1 0,0]) = = 0;eq33 =潜艇(C (4), (diff (u, x, x, x), diff (u, x, x, y), diff (u, x, y, y) diff (u, y, y, y)], [0, 0, 1, 0]) = = 0;eq34 =潜艇(C (4), (diff (u, x, x, x), diff (u, x, x, y), diff (u, x, y, y) diff (u, y, y, y)], [0, 0, 0, 1]) = = 0;

为9个未知权重解出结果的10个方程。使用ReturnConditions求包含任意参数的所有解。金宝搏官方网站

(a11 a10, a1_1、a01 a00、a0_1, a_11, a_10, a_1_1,参数、条件)=...解决([eq0, eq11、eq12 eq21, eq22, eq23, eq31, eq32, eq33, eq34),...(a11 a10, a1_1、a01 a00、a0_1, a_11, a_10, a_1_1),...“ReturnConditions”,真正的);扩大([a_11 a01, a11;...a_10、a00 a01;...a1_1、a0_1 a_1_1])
ans =
                  

z 1 沪元 2 - 2 z z 1 hx 2 - 2 z 4 z - 2 hx 2 - 2 沪元 2 1 沪元 2 - 2 z z 1 沪元 2 - 2 z z

参数
参数=
                  
                   
                    
                     z
                   
                  

使用潜艇函数将权重替换为其计算值。

C =简化(subs(C));

的表情C (7)C (6),C (4)包含的0阶,一阶,三阶导数u消失。

[c (7), c (6), c (4)]
ans =
                  
                   
                    
                     
                     
                      
                       
                        
                         
                          0
                        
                       
                       
                        
                         
                          0
                        
                       
                       
                        
                         
                          0
                        
                       
                      
                     
                     
                    
                   
                  

表达式C (5)的拉普拉斯式是什么u

C (5)
ans =
                  

2 x 2 u x y + 2 y 2 u x y

因此,有了上面计算的权重值,模具S_h使拉普拉斯近似符合顺序hx ^ 2hy ^ 2对于任意参数的任意值z,条件是z被选择是有秩序的O (1 / hx ^ 2, 1 / hy ^ 2)

包含四阶和更高阶导数的术语

尽管该解决方案包含一个自由参数z,表达式C (3)的四阶导数u不能由一个合适的选择变成零z.另一种选择是把它变成拉普拉斯算子平方的倍数。

信谊d拉普拉斯= @(u)拉普拉斯(u,[x,y]);扩大(d *拉普拉斯(拉普拉斯(u)))
Ans (x, y) =
                  

d 4 x 4 u x y + 2 d 2 y 2 2 x 2 u x y + d 4 y 4 u x y

选择不同的导数uC (3),并将其系数与相应项相等。

潜艇(C (3), [diff (u, x, x, x, x), diff (u, x, x, y, y), diff (u, y, y, y, y)], [1, 0, 0)) = = d
ans =
                  

hx 2 12 d

潜艇(C (3), [diff (u, x, x, x, x), diff (u, x, x, y, y), diff (u, y, y, y, y)], [0, 1,0]) = = 2 * d
ans =
                  
                   
                    
                     
                      
                       
                        
                         
                          
                           hx
                         
                         
                          
                           2
                         
                        
                        
                        
                        
                         
                          
                           沪元
                         
                         
                          
                           2
                         
                        
                        
                        
                        
                         z
                       
                      
                      
                      
                       
                        
                         2
                        
                        
                        
                         d
                       
                      
                     
                    
                   
                  
潜艇(C (3), [diff (u, x, x, x, x), diff (u, x, x, y, y), diff (u, y, y, y, y)], [0, 0, 1]) = = d
ans =
                  

沪元 2 12 d

因此,你可以选择D = hx^2/12 = hy^2/12而且Z = 2*d/(hx²*hy²),这意味着Hx = hy而且Z = 1/(6*hx*hy).因此,模具S_h近似于正方形网格上的一个修正拉普拉斯算子Hx = hy = h

年代 h Δ u + h 2 1 2 Δ 2 u + O h 3. 1

信谊hHx = h;Hy = h;D = h^2/12;

取代hx而且沪元通过h

C = subs(C);

取代z根据它的值,h ^ 1 / (6 * 2).因为z在MATLAB工作区中不存在,您只能将其作为存储在参数数组中。

C = subs(C,参数,1/(6*h^2));

验证公式(1)。

简化(C(3) - d*拉普拉斯(拉普拉斯(u)))
Ans (x, y) =
                  
                   
                    
                     0
                   
                  

现在,考虑三阶项hx沪元

简化(C (2))
ans =
                  
                   
                    
                     0
                   
                  

由于在模板展开中不存在这样的术语,因此术语 O h 3. 第(1)项实际上是有序的 O h 4 .考虑模板的四阶项。

因子(简化(C (1)))
ans =
                  

1 360 h h h h 6 x 6 u x y + 5 2 y 2 4 x 4 u x y + 5 4 y 4 2 x 2 u x y + 6 y 6 u x y

检查一下这些项是否可以用拉普拉斯算子的另一次幂来表示。然而,与

拉普拉斯(拉普拉斯(拉普拉斯(u)))
Ans (x, y) =
                  

6 x 6 u x y + 3. 2 y 2 4 x 4 u x y + 3. 4 y 4 2 x 2 u x y + 6 y 6 u x y

说明表达式的顺序 O h 4 不能被认为是拉普拉斯算子的三次方的倍数因为系数不能匹配。

总结

对于有距离的正方形网格h在相邻的网格点和上面的权重选择之间,你得到:

年代 h Δ u + h 2 1 2 Δ 2 u + O h 4 2

将此展开用于特征值问题的数值方法 Δ u λ u .加上某个倍数 Δ 2 u λ 2 u 特征值方程。

Δ u + h 2 1 2 Δ 2 u λ + h 2 1 2 λ 2 u

这个方程的左边很接近于模板 年代 h .因此,利用(2),一个数值特征值 μ 满意的模具 年代 h u μ u 一定是特征值的近似值 λ 拉普拉斯算子的

μ λ + h 2 1 2 λ 2 + O h 4

对于给定 μ 求解 λ 来得到拉普拉斯特征值更好的近似。注意,在二次方程的解中 λ 根号的正确符号是由要求给出的 λ μ h 0

λ 6 h 2 1 + μ h 2 3. - 1 2 μ 1 + μ h 2 3. + 1 3.

利用符号矩阵求解特征值问题

考虑一个l型区域 Ω 由三个单位方格组成的。

Ω x y - 1 x 0 - 1 y 0 x y 0 x 1 - 1 y 0 x y - 1 x 0 0 y 1

定义区域各角的坐标值。

xmin = 1;Xmax = 1;ymin = 1;Ymax = 1;

考虑一个由奇数组成的正方形网格Nx = 2 * nx-1的网格点x方向和奇数纽约= 2 * ny-1的网格点y方向。

Nx = 6;Nx = 2* Nx -1;hx = (xmax-xmin)/(Nx-1);Ny = 6;Ny = 2* Ny -1;hy = (ymax-ymin)/(Ny-1);

创建一个纽约——- - - - - -Nx象征性的矩阵 u .它的条目u (i, j)表示值U (xmin + (j - 1)*hx,ymin + (i - 1)*hy)解决方案u (x, y)特征值问题 Δ u λ u

U = sym(“u”(纽约Nx]);

的界限 Ω 对应以下指标:

U (:,1) = 0;左边界%U (1,:) = 0;%下限u(1:ny,Nx) = 0;%右边界,上半部分u(ny: ny,nx) = 0;%右边界,下半部分u(Ny,1:nx) = 0;%上边界,左边部分u(ny,nx: nx) = 0;%上边界,右边部分

0 < x 1 而且 0 < y 1 不属于 Ω .设置对应的矩阵项(i = ny + 1: ny, j = nx + 1: nx)为零。他们不再发挥任何作用,也将被忽视。

u(ny + 1: ny,nx + 1: nx) = 0;

问题的未知数为以下矩阵项:

u
u =
                  

0 0 0 0 0 0 0 0 0 0 0 0 u 2 2 u 2 3. u 2 4 u 2 5 u 2 6 u 2 7 u 2 8 u 2 9 u 2 10 0 0 u 3. 2 u 3. 3. u 3. 4 u 3. 5 u 3. 6 u 3. 7 u 3. 8 u 3. 9 u 3. 10 0 0 u 4 2 u 4 3. u 4 4 u 4 5 u 4 6 u 4 7 u 4 8 u 4 9 u 4 10 0 0 u 5 2 u 5 3. u 5 4 u 5 5 u 5 6 u 5 7 u 5 8 u 5 9 u 5 10 0 0 u 6 2 u 6 3. u 6 4 u 6 5 0 0 0 0 0 0 0 u 7 2 u 7 3. u 7 4 u 7 5 0 0 0 0 0 0 0 u 8 2 u 8 3. u 8 4 u 8 5 0 0 0 0 0 0 0 u 9 2 u 9 3. u 9 4 u 9 5 0 0 0 0 0 0 0 u 10 2 u 10 3. u 10 4 u 10 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

该区域的内部点 Ω Ω 对应于指标 j 包含未知值 u j 这个问题。将这些未知数收集到一个向量中var

[I,J] = find(u~=0);Vars = u(u~=0);

将符号表达式(由本例第一部分中派生的模板给出)与每个索引(即与每个未知)关联。

N =长度(vars);Lu = sym(零(n,1));k=1: i = i (k);j = j (k);陆(k) = 1/6 * u (i + 1, j - 1) + 2/3 * u (i + 1, j) + 1/6 * u (i + 1, j + 1)...+ 2/3*u(I,j-1) - 10/3*u(I,j) + 2/3*u(I,j+1)...+1 /6*u(i-1,j-1) + 2/3*u(i-1,j) +1 /6*u(i-1,j+1);结束Lu = Lu/hx^2;

因为这个表达式在未知元素中是线性的u(存储在var),你可以把它当作作用在向量上的矩阵var

S_h =雅可比矩阵(Lu, vars);

你可以治疗S_h作为拉普拉斯算子的矩阵近似。计算它的特征向量和特征值。

[V,D] = eig(vpa(S_h));

三个最大特征值由D的第一个对角线元素给出。

[d (1,1), d (2,2), d (3,3)]
ans =
                  
                   
                    
                     
                     
                      
                       
                        
                         
                          
                           
                            -
                           
                            9.5214641572625960021345709535953
                          
                         
                        
                       
                       
                        
                         
                          
                           
                            -
                           
                            14.431096242107969492574666743957
                          
                         
                        
                       
                       
                        
                         
                          
                           
                            -
                           
                            18.490392088545609858994660377955
                          
                         
                        
                       
                      
                     
                     
                    
                   
                  

因为对于这个近似,你使用了一个有少量点的网格,所以只有特征值的前导数字是正确的。

l形区域上拉普拉斯算子的第三大特征值 Ω 确切地说是知道的。拉普拉斯算子的本征函数就是这个函数 u x y π x π y 与(确切的)特征值相关 - 2 π 2 - 1 9 7 3. 9 2 .实际上,使用上面的方程(3),你可以得到一个更好的拉普拉斯特征值的近似 λ 从模板特征值 μ

= D(3,3)
μ=
                  
                   
                    
                     
                      
                       -
                      
                       18.490392088545609858994660377955
                     
                    
                   
                  
= 2* /(√(1 + hx^2/3) + 1)
λ=
                  
                   
                    
                     
                      
                       -
                      
                       19.796765119155672176257649532142
                     
                    
                   
                  

画出与第三高的特征值相关的特征函数。

v = v (:,3);k=1:n u(I(k),J(k)) = v(k);结束U = double(U);冲浪(xmin: hx: xmax ymin::为什么ymax, u ');视图(125年,30);

图中包含一个轴对象。axis对象包含一个surface类型的对象。

利用双精度矩阵求解特征值问题

当您使用符号矩阵时,不建议大幅增加网格点的数量,因为符号计算比使用MATLAB双精度矩阵的数值计算慢得多。这部分示例演示了如何使用稀疏双算术来细化数值网格。l型区域 Ω 和之前一样。初始化网格值,而不是用符号未知数表示内部点u然后定义 Ω 通过将边界点和外部点的值设置为零。与其为每个内部点定义一个符号表达式并将模板计算为雅可比矩阵,不如直接将模板矩阵设置为稀疏矩阵。

xmin = 1;Xmax = 1;ymin = 1;Ymax = 1;Nx = 30;Nx = 2* Nx -1;hx = (xmax-xmin)/(Nx-1);Ny = 30;Ny = 2* Ny -1;hy = (ymax-ymin)/(Ny-1); u = ones(Ny,Nx); u(:,1) = 0;左边界%u(1:ny,Nx) = 0;%右边界,上半部分u(ny: ny,nx) = 0;%右边界,下半部分U (1,:) = 0;%下限u(Ny,1:nx) = 0;%上边界,左边部分u(ny,nx: nx) = 0;%上边界,右边部分u(ny + 1: ny,nx + 1: nx) = 0;[I,J] = find(u ~= 0);n = length(I);S_h =稀疏(n,n);k=1: i = i (k);j = j (k);S_h(k,I== I +1 & J== J +1)= 1/6;S_h(k,I== I +1 & J== J)= 2/3;S_h(k,I== I +1 & J== J -1)= 1/6;S_h(k,I== I & J== J +1)= 2/3;S_h(k,I== I & J== J)=-10/3;S_h(k,I== I & J== J -1)= 2/3;S_h(k,I== I -1 & J== J +1)= 1/6;S_h(k,I== I -1 & J== J)= 2/3; S_h(k,I==i-1 & J==j-1)= 1/6;结束S_h = S_h /hx^2;

在这里,S_h是(稀疏)模板矩阵。使用eigs它处理稀疏矩阵来计算三个最大的特征值。

[V,D] = eigs(S_h,3,“拉”);

三个最大特征值是D的第一个对角线元素。

[d (1,1), d (2,2), d (3,3)]
ans =1×3-9.6493 -15.1742 -19.7006

D (3,3)近似准确的特征值 - 2 π 2 - 1 9 7 3. 9 2 0 8 8 .利用上面的方程(3),推导出拉普拉斯特征值的更精确的近似 λ 从模板特征值 μ

= D(3,3)
Mu = -19.7006
= 2* /(√(1 + hx^2/3) + 1)
Lambda = -19.7393

画出与第三高的特征值相关的特征函数。

v = v (:,3);k=1:n u(I(k),J(k)) = v(k);结束冲浪(xmin: hx: xmax ymin::为什么ymax, u ');视图(125年,30);

图中包含一个轴对象。axis对象包含一个surface类型的对象。

注意MATLAB函数用不同的方法计算拉普拉斯算子的本征函数。

膜(3,nx - 1,8,8);

图中包含一个轴对象。axis对象包含一个surface类型的对象。