exponenta event banner

Eigenvalues и Eigenmodes квадрата

Этот пример показывает, как вычислить собственные значения и eigenmodes квадратной области с помощью программируемого рабочего процесса. Для прикладного решения PDE Modeler смотрите Eigenvalues и Eigenmodes Квадрата: Приложение PDE Modeler.

Проблема УЧП собственного значения -Δu=λu. Этот пример находит собственные значения меньшими, чем 10 и соответствующий eigenmodes.

Создайте модель. Импортируйте и постройте геометрию. Файл описания геометрии для этой проблемы называется squareg.m.

model = createpde();
geometryFromEdges(model,@squareg);

pdegplot(model,'EdgeLabels','on')
ylim([-1.5,1.5])
axis equal

Задайте граничное условие Дирихле u=0 для левого контура.

applyBoundaryCondition(model,'dirichlet','Edge',4,'u',0);

Задайте нулевое Нейманово граничное условие для верхней и нижней границы.

applyBoundaryCondition(model,'neumann','Edge',[1,3],'g',0,'q',0);

Задайте обобщенное Нейманово условие un-34u=0 для правильного контура.

applyBoundaryCondition(model,'neumann','Edge',2,'g',0,'q',-3/4);

Коэффициенты УЧП собственного значения для этой проблемы являются c = 1, = 0, и d = 1. Можно ввести область значений собственного значения r как векторный [-Inf 10].

specifyCoefficients(model,'m',0,'d',1,'c',1,'a',0,'f',0);
r = [-Inf,10];

Создайте mesh и решите проблему.

generateMesh(model,'Hmax',0.05);
results = solvepdeeig(model,r);
              Basis= 10,  Time=   0.73,  New conv eig=  0
              Basis= 11,  Time=   0.76,  New conv eig=  0
              Basis= 12,  Time=   0.79,  New conv eig=  1
              Basis= 13,  Time=   0.81,  New conv eig=  1
              Basis= 14,  Time=   0.84,  New conv eig=  1
              Basis= 15,  Time=   0.87,  New conv eig=  1
              Basis= 16,  Time=   0.89,  New conv eig=  1
              Basis= 17,  Time=   0.93,  New conv eig=  1
              Basis= 18,  Time=   0.97,  New conv eig=  2
              Basis= 19,  Time=   0.99,  New conv eig=  2
              Basis= 20,  Time=   1.01,  New conv eig=  2
              Basis= 21,  Time=   1.04,  New conv eig=  3
              Basis= 22,  Time=   1.06,  New conv eig=  3
              Basis= 23,  Time=   1.10,  New conv eig=  4
              Basis= 24,  Time=   1.13,  New conv eig=  6
End of sweep: Basis= 24,  Time=   1.13,  New conv eig=  3
              Basis= 13,  Time=   1.38,  New conv eig=  0
              Basis= 14,  Time=   1.41,  New conv eig=  0
              Basis= 15,  Time=   1.43,  New conv eig=  0
              Basis= 16,  Time=   1.45,  New conv eig=  0
              Basis= 17,  Time=   1.48,  New conv eig=  0
              Basis= 18,  Time=   1.51,  New conv eig=  0
              Basis= 19,  Time=   1.53,  New conv eig=  0
              Basis= 20,  Time=   1.56,  New conv eig=  0
              Basis= 21,  Time=   1.59,  New conv eig=  0
              Basis= 22,  Time=   1.62,  New conv eig=  1
              Basis= 23,  Time=   1.63,  New conv eig=  2
End of sweep: Basis= 23,  Time=   1.65,  New conv eig=  0
              Basis= 13,  Time=   1.91,  New conv eig=  1
              Basis= 14,  Time=   1.92,  New conv eig=  1
              Basis= 15,  Time=   1.95,  New conv eig=  1
              Basis= 16,  Time=   1.98,  New conv eig=  3
              Basis= 17,  Time=   2.00,  New conv eig=  3
              Basis= 18,  Time=   2.02,  New conv eig=  3
              Basis= 19,  Time=   2.05,  New conv eig=  3
              Basis= 20,  Time=   2.07,  New conv eig=  3
              Basis= 21,  Time=   2.10,  New conv eig=  4
End of sweep: Basis= 21,  Time=   2.11,  New conv eig=  4
              Basis= 17,  Time=   2.38,  New conv eig=  0
End of sweep: Basis= 17,  Time=   2.38,  New conv eig=  0

Существует шесть собственных значений, меньших, чем 10 для этой проблемы.

l = results.Eigenvalues
l = 5×1

   -0.4146
    2.0528
    4.8019
    7.2693
    9.4550

Постройте первые и последние собственные функции в заданной области значений.

u = results.Eigenvectors;
pdeplot(model,'XYData',u(:,1));

pdeplot(model,'XYData',u(:,length(l)));

Эта проблема отделима, означая

u(x,y)=f(x)g(y).

Функции f и g являются собственными функциями в направлениях X и Y, соответственно. В направлении X первый eigenmode является медленно увеличивающейся показательной функцией. Более высокие режимы включают синусоиды. В направлении Y первый eigenmode является (постоянной) прямой линией, вторым является половина косинуса, третьим является полный косинус, четвертыми являются полтора полных косинуса и т.д. Эти eigenmodes в направлении Y сопоставлены с собственными значениями

0,π24,4π24,9π24,...

Возможно проследить предыдущие собственные значения в собственных значениях решения. Смотря на график первого eigenmode, вы видите, что он составлен из первого eigenmodes в направлениях X и Y. Второй eigenmode составлен из первого eigenmode в направлении X и второго eigenmode в направлении Y.

Посмотрите на различие между первым и вторым собственным значением по сравнению с π2/4:

l(2) - l(1) - pi^2/4
ans = 1.6751e-07

Аналогично, пятый eigenmode составлен из первого eigenmode в направлении X и третьего eigenmode в направлении Y. Как ожидалось l(5)-l(1) приблизительно равен π2:

l(5) - l(1) - pi^2
ans = 6.2135e-06

Можно исследовать более высокие режимы путем увеличения поисковой области значений, чтобы включать собственные значения, больше, чем 10.