В этом примере показано, как вычислять собственные значения и собственные векторы. Задача собственного значения - λ u. В этом примере вычисляются все собственные моды с собственными значениями меньше 100.
Создайте модель и включите эту геометрию. Геометрия L-образной мембраны описана в файле lshapeg.
model = createpde(); geometryFromEdges(model,@lshapeg);
Задайте нулевые граничные условия Дирихле для всех кромок.
applyBoundaryCondition(model,'dirichlet','Edge',1:model.Geometry.NumEdges,'u',0);
Укажите коэффициенты для задачи: d = 1 и c = 1. Все остальные коэффициенты равны нулю.
specifyCoefficients(model,'m',0,'d',1,'c',1,'a',0,'f',0);
Установка интервала [0 100] в качестве области для собственных значений в решении.
r = [0 100];
Создайте сетку и решите проблему.
generateMesh(model,'Hmax',0.05);
results = solvepdeeig(model,r); Basis= 10, Time= 1.10, New conv eig= 0
Basis= 11, Time= 1.14, New conv eig= 0
Basis= 12, Time= 1.17, New conv eig= 0
Basis= 13, Time= 1.20, New conv eig= 0
Basis= 14, Time= 1.22, New conv eig= 0
Basis= 15, Time= 1.27, New conv eig= 0
Basis= 16, Time= 1.29, New conv eig= 0
Basis= 17, Time= 1.34, New conv eig= 0
Basis= 18, Time= 1.39, New conv eig= 1
Basis= 19, Time= 1.41, New conv eig= 1
Basis= 20, Time= 1.47, New conv eig= 1
Basis= 21, Time= 1.51, New conv eig= 1
Basis= 22, Time= 1.56, New conv eig= 3
Basis= 23, Time= 1.63, New conv eig= 3
Basis= 24, Time= 1.69, New conv eig= 4
Basis= 25, Time= 1.84, New conv eig= 5
Basis= 26, Time= 1.92, New conv eig= 6
Basis= 27, Time= 1.99, New conv eig= 6
Basis= 28, Time= 2.07, New conv eig= 6
Basis= 29, Time= 2.14, New conv eig= 7
Basis= 30, Time= 2.19, New conv eig= 7
Basis= 31, Time= 2.26, New conv eig= 10
Basis= 32, Time= 2.33, New conv eig= 10
Basis= 33, Time= 2.39, New conv eig= 11
Basis= 34, Time= 2.47, New conv eig= 11
Basis= 35, Time= 2.55, New conv eig= 14
Basis= 36, Time= 2.62, New conv eig= 14
Basis= 37, Time= 2.77, New conv eig= 14
Basis= 38, Time= 2.82, New conv eig= 14
Basis= 39, Time= 2.87, New conv eig= 14
Basis= 40, Time= 2.92, New conv eig= 14
Basis= 41, Time= 3.02, New conv eig= 15
Basis= 42, Time= 3.10, New conv eig= 15
Basis= 43, Time= 3.14, New conv eig= 15
Basis= 44, Time= 3.19, New conv eig= 16
Basis= 45, Time= 3.26, New conv eig= 16
Basis= 46, Time= 3.37, New conv eig= 16
Basis= 47, Time= 3.59, New conv eig= 16
Basis= 48, Time= 3.71, New conv eig= 17
Basis= 49, Time= 3.96, New conv eig= 18
Basis= 50, Time= 4.18, New conv eig= 18
Basis= 51, Time= 4.44, New conv eig= 18
Basis= 52, Time= 4.71, New conv eig= 18
Basis= 53, Time= 4.88, New conv eig= 18
Basis= 54, Time= 5.10, New conv eig= 21
End of sweep: Basis= 54, Time= 5.10, New conv eig= 21
Basis= 31, Time= 5.66, New conv eig= 0
Basis= 32, Time= 5.73, New conv eig= 0
Basis= 33, Time= 5.81, New conv eig= 0
End of sweep: Basis= 33, Time= 5.81, New conv eig= 0
Существует 19 собственных значений, меньших 100.
length(results.Eigenvalues)
ans = 19
Постройте график первой собственной моды и сравните ее с MATLAB membrane функция.
u = results.Eigenvectors; pdeplot(model,'XYData',u(:,1),'ZData',u(:,1));

figure membrane(1,20,9,9)

Собственные векторы могут быть умножены на любые скалярные и остаются собственными векторами. Это объясняет разницу в масштабе, которую вы видите.
membrane может создавать первые 12 собственных функций для L-образной мембраны. Сравните 12-ю собственную моду.
figure pdeplot(model,'XYData',u(:,12),'ZData',u(:,12));

figure membrane(12,20,9,9)
