exponenta event banner

pdeeig

(Не рекомендуемый), Решают проблему УЧП собственного значения

pdeeig не рекомендуется. Используйте solvepdeeig вместо этого.

Синтаксис

[v,l] = pdeeig(model,c,a,d,r)
[v,l] = pdeeig(b,p,e,t,c,a,d,r)
[v,l] = pdeeig(Kc,B,M,r)

Описание

пример

[v,l] = pdeeig(model,c,a,d,r) производит решение формулировки FEM скалярной задачи о собственных значениях УЧП

(cu)+au=λdu на Ω

или системная задача о собственных значениях УЧП

(cu)+au=λdu на Ω

с геометрией, граничными условиями и mesh, заданной в model, объекте PDEModel. Смотрите Решают проблемы Используя Устаревшие Объекты PDEModel.

Проблемой УЧП собственного значения является гомогенная проблема, т.е. только граничные условия, где g = 0 и r = 0 может использоваться. Неоднородная часть удалена автоматически.

пример

[v,l] = pdeeig(b,p,e,t,c,a,d,r) решает для граничных условий, описанных в b и mesh конечного элемента в [p,e,t].

пример

[v,l] = pdeeig(Kc,B,M,r) производит решение обобщенной задачи о собственных значениях разреженной матрицы

Kc ui = λB´MBui
u = Bui

с Действительным (λ) в интервале r.

Примеры

свернуть все

Вычислите собственные значения, которые являются меньше чем 100 и вычисляют соответствующий eigenmodes для -u=λu на геометрии L-образной мембраны.

model = createpde;
geometryFromEdges(model,@lshapeg);
applyBoundaryCondition(model,'edge',1:model.Geometry.NumEdges,'u',0);
generateMesh(model,'GeometricOrder','linear','Hmax',0.02);
c = 1;
a = 0;
d = 1;
r = [-Inf 100];
[v,l] = pdeeig(model,c,a,d,r);
              Basis= 10,  Time=   0.82,  New conv eig=  0
              Basis= 11,  Time=   0.85,  New conv eig=  0
              Basis= 12,  Time=   0.90,  New conv eig=  0
              Basis= 13,  Time=   0.95,  New conv eig=  0
              Basis= 14,  Time=   1.02,  New conv eig=  0
              Basis= 15,  Time=   1.07,  New conv eig=  0
              Basis= 16,  Time=   1.09,  New conv eig=  1
              Basis= 17,  Time=   1.12,  New conv eig=  4
              Basis= 18,  Time=   1.15,  New conv eig=  4
              Basis= 19,  Time=   1.19,  New conv eig=  4
              Basis= 20,  Time=   1.22,  New conv eig=  4
              Basis= 21,  Time=   1.24,  New conv eig=  4
              Basis= 22,  Time=   1.27,  New conv eig=  4
              Basis= 23,  Time=   1.30,  New conv eig=  4
              Basis= 24,  Time=   1.34,  New conv eig=  4
              Basis= 25,  Time=   1.39,  New conv eig=  5
              Basis= 26,  Time=   1.41,  New conv eig=  5
              Basis= 27,  Time=   1.44,  New conv eig=  5
              Basis= 28,  Time=   1.46,  New conv eig=  6
              Basis= 29,  Time=   1.49,  New conv eig=  7
              Basis= 30,  Time=   1.52,  New conv eig=  7
              Basis= 31,  Time=   1.56,  New conv eig=  7
              Basis= 32,  Time=   1.58,  New conv eig=  8
              Basis= 33,  Time=   1.61,  New conv eig=  8
              Basis= 34,  Time=   1.63,  New conv eig=  8
              Basis= 35,  Time=   1.68,  New conv eig=  9
              Basis= 36,  Time=   1.70,  New conv eig=  9
              Basis= 37,  Time=   1.72,  New conv eig=  9
              Basis= 38,  Time=   1.75,  New conv eig=  9
              Basis= 39,  Time=   1.79,  New conv eig=  9
              Basis= 40,  Time=   1.81,  New conv eig=  9
              Basis= 41,  Time=   1.83,  New conv eig=  9
              Basis= 42,  Time=   1.87,  New conv eig= 11
              Basis= 43,  Time=   1.89,  New conv eig= 11
              Basis= 44,  Time=   1.92,  New conv eig= 11
              Basis= 45,  Time=   1.96,  New conv eig= 12
              Basis= 46,  Time=   1.99,  New conv eig= 14
              Basis= 47,  Time=   2.03,  New conv eig= 14
              Basis= 48,  Time=   2.06,  New conv eig= 15
              Basis= 49,  Time=   2.09,  New conv eig= 17
              Basis= 50,  Time=   2.14,  New conv eig= 17
              Basis= 51,  Time=   2.17,  New conv eig= 18
              Basis= 52,  Time=   2.22,  New conv eig= 19
              Basis= 53,  Time=   2.28,  New conv eig= 19
              Basis= 54,  Time=   2.33,  New conv eig= 20
              Basis= 55,  Time=   2.37,  New conv eig= 21
              Basis= 56,  Time=   2.41,  New conv eig= 24
              Basis= 57,  Time=   2.47,  New conv eig= 27
              Basis= 58,  Time=   2.52,  New conv eig= 28
End of sweep: Basis= 58,  Time=   2.52,  New conv eig= 28
              Basis= 38,  Time=   2.87,  New conv eig=  0
              Basis= 39,  Time=   2.89,  New conv eig=  0
              Basis= 40,  Time=   2.90,  New conv eig=  0
End of sweep: Basis= 40,  Time=   2.93,  New conv eig=  0
l(1)                    % first eigenvalue
ans = 9.6506

Отобразите первый eigenmode и сравните его со встроенным графиком membrane.

pdeplot(model,'XYData',v(:,1),'ZData',v(:,1))

figure 
membrane(1,20,9,9)      % the MATLAB function

Вычислите шестнадцатое собственное значение и постройте шестнадцатый eigenmode.

l(16)                   % sixteenth eigenvalue
ans = 92.5248
figure
pdeplot(model,'XYData',v(:,16),'ZData',v(:,16))    % sixteenth eigenmode

Вычислите собственные значения, которые являются меньше чем 100 и вычисляют соответствующий eigenmodes для -u=λu на геометрии L-образной мембраны, с помощью традиционного синтаксиса.

Используйте геометрию в lshapeg. Для получения дополнительной информации об этом синтаксисе, смотрите Параметрическую Функцию для 2D Создания Геометрии.

g = @lshapeg;
pdegplot(g,'EdgeLabels','on')
axis equal
ylim([-1.1,1.1])

Установите нуль граничные условия Дирихле с помощью функции lshapeb. Для получения дополнительной информации об этом синтаксисе, смотрите Граничные условия путем Записи Функций.

b = @lshapeb;

Установите коэффициенты c = 1, a = 0 и d = 1. Соберите собственные значения до 100.

c = 1;
a = 0;
d = 1;
r = [-Inf 100];

Сгенерируйте mesh и решите задачу о собственных значениях.

[p,e,t] = initmesh(g,'Hmax',0.02);
[v,l] = pdeeig(b,p,e,t,c,a,d,r);
              Basis= 10,  Time=   1.49,  New conv eig=  0
              Basis= 11,  Time=   1.60,  New conv eig=  0
              Basis= 12,  Time=   1.65,  New conv eig=  0
              Basis= 13,  Time=   1.73,  New conv eig=  0
              Basis= 14,  Time=   1.77,  New conv eig=  0
              Basis= 15,  Time=   1.86,  New conv eig=  1
              Basis= 16,  Time=   1.90,  New conv eig=  1
              Basis= 17,  Time=   1.93,  New conv eig=  3
              Basis= 18,  Time=   1.96,  New conv eig=  4
              Basis= 19,  Time=   2.01,  New conv eig=  4
              Basis= 20,  Time=   2.06,  New conv eig=  4
              Basis= 21,  Time=   2.08,  New conv eig=  4
              Basis= 22,  Time=   2.13,  New conv eig=  4
              Basis= 23,  Time=   2.15,  New conv eig=  4
              Basis= 24,  Time=   2.18,  New conv eig=  5
              Basis= 25,  Time=   2.22,  New conv eig=  5
              Basis= 26,  Time=   2.25,  New conv eig=  5
              Basis= 27,  Time=   2.30,  New conv eig=  6
              Basis= 28,  Time=   2.34,  New conv eig=  7
              Basis= 29,  Time=   2.37,  New conv eig=  7
              Basis= 30,  Time=   2.40,  New conv eig=  7
              Basis= 31,  Time=   2.47,  New conv eig=  7
              Basis= 32,  Time=   2.54,  New conv eig=  8
              Basis= 33,  Time=   2.57,  New conv eig=  8
              Basis= 34,  Time=   2.60,  New conv eig=  8
              Basis= 35,  Time=   2.63,  New conv eig=  9
              Basis= 36,  Time=   2.66,  New conv eig=  9
              Basis= 37,  Time=   2.69,  New conv eig=  9
              Basis= 38,  Time=   2.75,  New conv eig=  9
              Basis= 39,  Time=   2.85,  New conv eig=  9
              Basis= 40,  Time=   2.98,  New conv eig=  9
              Basis= 41,  Time=   3.05,  New conv eig=  9
              Basis= 42,  Time=   3.09,  New conv eig= 10
              Basis= 43,  Time=   3.13,  New conv eig= 11
              Basis= 44,  Time=   3.17,  New conv eig= 12
              Basis= 45,  Time=   3.21,  New conv eig= 12
              Basis= 46,  Time=   3.27,  New conv eig= 14
              Basis= 47,  Time=   3.31,  New conv eig= 15
              Basis= 48,  Time=   3.36,  New conv eig= 16
              Basis= 49,  Time=   3.42,  New conv eig= 17
              Basis= 50,  Time=   3.49,  New conv eig= 17
              Basis= 51,  Time=   3.56,  New conv eig= 18
              Basis= 52,  Time=   3.64,  New conv eig= 18
              Basis= 53,  Time=   3.70,  New conv eig= 19
              Basis= 54,  Time=   3.74,  New conv eig= 19
              Basis= 55,  Time=   3.78,  New conv eig= 22
              Basis= 56,  Time=   3.82,  New conv eig= 24
              Basis= 57,  Time=   3.89,  New conv eig= 28
End of sweep: Basis= 57,  Time=   3.89,  New conv eig= 28
              Basis= 38,  Time=   4.34,  New conv eig=  0
              Basis= 39,  Time=   4.37,  New conv eig=  0
              Basis= 40,  Time=   4.39,  New conv eig=  0
              Basis= 41,  Time=   4.44,  New conv eig=  0
              Basis= 42,  Time=   4.47,  New conv eig=  0
End of sweep: Basis= 42,  Time=   4.48,  New conv eig=  0

Найдите первое собственное значение.

l(1)
ans = 9.6481

Импортируйте простую 3-D геометрию и найдите собственные значения и собственные вектора из связанных матриц конечного элемента.

Создайте модель и импортируйте геометрию BracketWithHole.stl.

model = createpde();
importGeometry(model,'BracketWithHole.stl');
figure
pdegplot(model,'FaceLabels','on')
view(30,30)
title('Bracket with Face Labels')

figure
pdegplot(model,'FaceLabels','on')
view(-134,-32)
title('Bracket with Face Labels, Rear View')

Установите коэффициенты c = 1, a = 0 и d = 1. Соберите собственные значения, которые являются меньше чем 100.

c = 1;
a = 0;
d = 1;
r = [-Inf 100];

Сгенерируйте mesh для модели.

generateMesh(model);

Создайте связанные матрицы конечного элемента.

[Kc,~,B,~] = assempde(model,c,a,0);
[~,M,~] = assema(model,0,d,0);

Решите задачу о собственных значениях.

[v,l] = pdeeig(Kc,B,M,r);
              Basis= 10,  Time=   1.15,  New conv eig=  0
              Basis= 11,  Time=   1.17,  New conv eig=  0
              Basis= 12,  Time=   1.19,  New conv eig=  0
              Basis= 13,  Time=   1.20,  New conv eig=  1
              Basis= 14,  Time=   1.24,  New conv eig=  1
              Basis= 15,  Time=   1.27,  New conv eig=  1
              Basis= 16,  Time=   1.30,  New conv eig=  2
              Basis= 17,  Time=   1.34,  New conv eig=  3
End of sweep: Basis= 17,  Time=   1.34,  New conv eig=  3
              Basis= 13,  Time=   1.56,  New conv eig=  0
End of sweep: Basis= 13,  Time=   1.57,  New conv eig=  0

Посмотрите на первые два собственных значения.

l([1,2])
ans = 2×1

   -0.0000
   42.8670

Постройте решение, соответствующее собственному значению 2.

pdeplot3D(model,'ColorMapData',v(:,2))

Входные параметры

свернуть все

Модель PDE, заданная как объект PDEModel.

Пример: model = createpde

Коэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, представляет в виде строки скаляр, вектор строки или коэффициентную функцию. c представляет коэффициент c в скалярном УЧП

(cu)+au=λdu на Ω

или системная задача о собственных значениях УЧП

(cu)+au=λdu на Ω

Существует большое разнообразие способов задать c, детализированный в c Коэффициенте для Систем. См. также Задают Скалярные Коэффициенты УЧП в символьной Форме, Задают 2D Скалярные Коэффициенты в Функциональной Форме и Задают 3-D Коэффициенты УЧП в Функциональной Форме.

Пример: 'cosh(x+y.^2)'

Типы данных: double | char | string | function_handle
Поддержка комплексного числа: Да

Коэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, представляет в виде строки скаляр, вектор строки или коэффициентную функцию. a представляет коэффициент a в скалярном УЧП

(cu)+au=λdu на Ω

или системная задача о собственных значениях УЧП

(cu)+au=λdu на Ω

Существует большое разнообразие способов задать a, детализированный в a или d Коэффициенте для Систем. См. также Задают Скалярные Коэффициенты УЧП в символьной Форме, Задают 2D Скалярные Коэффициенты в Функциональной Форме и Задают 3-D Коэффициенты УЧП в Функциональной Форме.

Пример: 2*eye(3)

Типы данных: double | char | string | function_handle
Поддержка комплексного числа: Да

Коэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, представляет в виде строки скаляр, вектор строки или коэффициентную функцию. d представляет коэффициент d в скалярном УЧП

(cu)+au=λdu на Ω

или системная задача о собственных значениях УЧП

(cu)+au=λdu на Ω

Существует большое разнообразие способов задать d, детализированный в a или d Коэффициенте для Систем. См. также Задают Скалярные Коэффициенты УЧП в символьной Форме, Задают 2D Скалярные Коэффициенты в Функциональной Форме и Задают 3-D Коэффициенты УЧП в Функциональной Форме.

Пример: 2*eye(3)

Типы данных: double | char | string | function_handle
Поддержка комплексного числа: Да

Область значений собственного значения, заданная как двухэлементный вектор действительных чисел. Действительные части собственных значений падение λ области значений r(1) ≤ λ ≤ r(2). r(1) может быть -Inf. Алгоритм возвращает все собственные значения в этом интервале в l вывод максимум до 99 собственных значений.

Пример: [-Inf,100]

Типы данных: double

Граничные условия, заданные как граничная матрица или массив данных граничных условий. Передайте массив данных граничных условий как указатель на функцию или как имя файла.

Пример: b = 'circleb1', b = "circleb1" или b = @circleb1

Типы данных: double | char | string | function_handle

Поймайте в сети точки, заданные как 2 Np матрицей точек, где Np является числом точек в mesh. Для описания (p, e, t) матрицы, смотрите Данные о Mesh.

Как правило, вы используете p, e и данные t, экспортированные из приложения PDE Modeler или сгенерированные initmesh или refinemesh.

Пример: [p,e,t] = initmesh(gd)

Типы данных: double

Поймайте в сети ребра, заданные как 7-by-Ne матрица ребер, где Ne является количеством ребер в mesh. Для описания (p, e, t) матрицы, смотрите Данные о Mesh.

Как правило, вы используете p, e и данные t, экспортированные из приложения PDE Modeler или сгенерированные initmesh или refinemesh.

Пример: [p,e,t] = initmesh(gd)

Типы данных: double

Поймайте в сети треугольники, заданные как 4-by-Nt матрица треугольников, где Nt является количеством треугольников в mesh. Для описания (p, e, t) матрицы, смотрите Данные о Mesh.

Как правило, вы используете p, e и данные t, экспортированные из приложения PDE Modeler или сгенерированные initmesh или refinemesh.

Пример: [p,e,t] = initmesh(gd)

Типы данных: double

Матрица жесткости, заданная как разреженная матрица или как полная матрица. Смотрите Эллиптические уравнения. Как правило, Kc является вывод assempde.

Дирихле nullspace, возвращенный как разреженная матрица. См. Алгоритмы. Как правило, B является вывод assempde.

Большая матрица. заданный как разреженная матрица или полная матрица. Смотрите Эллиптические уравнения.

Получить входные матрицы для pdeeig, hyperbolic или parabolic, выполнения и assema и assempde:

[Kc,Fc,B,ud] = assempde(model,c,a,f);
[~,M,~] = assema(model,0,d,f);

Примечание

Создайте матрицу M использование assema с d, не a, в качестве аргумента перед f.

Типы данных: double
Поддержка комплексного числа: Да

Выходные аргументы

свернуть все

Собственные вектора, возвращенные как матрица. Предположим

  • Np является количеством узлов mesh

  • N является количеством уравнений

  • ev является количеством собственных значений, возвращенных в l

Затем v имеет размер Np *N-by-ev. Каждый столбец v соответствует собственным векторам одного собственного значения. В каждом столбце первые элементы Np соответствуют собственному вектору уравнения 1 оцененный в узлах mesh, следующие элементы Np соответствуют уравнению 2 и т.д.

Примечание

Собственные вектора определяются только несколько скаляром, включая отрицательный скаляр.

Собственные значения, возвращенные как вектор. Действительные части l находятся в интервале r. Действительные части l являются монотонным увеличением.

Ограничения

В стандартном случае c и d положительны во всем регионе. Все собственные значения положительны, и 0 хороший выбор для нижней границы интервала. Случаи, где или c или d являются нулем, обсуждены затем.

  • Если d = 0 в подобласти, большая матрица M становится сингулярным. Это не доставляет неприятностей, при условии, что c> 0 везде. Карандаш (K,M) имеет набор бесконечных собственных значений.

  • Если c = 0 в подобласти, матрица жесткости, K становится сингулярным, и карандаш (K,M), имеет много нулевых собственных значений. С интервалом, содержащим нуль, pdeeig продолжает в течение очень долгого времени находить все нулевые собственные значения. Выберите положительную нижнюю границу далеко от нуля, но ниже самого маленького ненулевого собственного значения.

  • Если существует область, где и c = 0 и d = 0, мы получаем сингулярный карандаш. Целая задача о собственных значениях является неопределенной, и любое значение одинаково вероятно как собственное значение.

Некоторые неловкие случаи обнаруживаются pdeeig. Если переключенная матрица сингулярна, другой сдвиг предпринят. Если матрица с новым сдвигом все еще сингулярна, хорошее предположение - то, что целый карандаш (K,M) сингулярен.

Если вы пробуете какую-либо проблему, не принадлежащую стандартному случаю, необходимо использовать знание исходной физической проблемы интерпретировать результаты вычисления.

Советы

  • Коэффициенты уравнения не могут зависеть от решения u или его градиент.

Алгоритмы

свернуть все

Уравнения собственного значения

Программное обеспечение Partial Differential Equation Toolbox™ обрабатывает следующую основную задачу о собственных значениях:

(cu)+au=λdu

где λ является неизвестным комплексным числом. В механике твердого тела это - проблема, сопоставленная с описанием явлений волны, например, естественные режимы вибрирующей мембраны. В квантовой механике λ является энергетическим уровнем связанного состояния в потенциале хорошо a (x), где x представляет 2D или 3-D точку.

Числовое решение найдено путем дискретизации уравнения и решения получившейся алгебраической задачи о собственных значениях. Давайте сначала рассмотрим дискретизацию. Расширьте u в основании FEM, умножьтесь с базисным элементом и объединяйтесь на области Ω. Это приводит к обобщенному уравнению собственного значения

KU = λMU(1)

где большая матрица соответствует правой стороне, т.е.

Mi,j=Ωd(x)ϕj(x)ϕi(x)dx

Матрицы K и M производятся путем вызова assema для уравнений

– ∇ · (cu) + au = 0 и – ∇ · (0∇u) + du = 0 (2)

В наиболее распространенном случае, когда функциональный d (x) положителен, большая матрица, M положителен определенный симметричный. Аналогично, когда c (x) положителен, и у нас есть граничные условия Дирихле, матрица жесткости, K также положителен определенный.

Обобщенная задача о собственных значениях, KU = λMU, теперь решена алгоритмом Арнольди, применился к переключенному и инвертировал матрицу с перезапусками, пока все собственные значения в заданном пользователями интервале не были найдены.

Давайте опишем, как это сделано более подробно. Можно хотеть посмотреть на примеры Eigenvalues и Eigenmodes L-образной Мембраны или Eigenvalues и Eigenmodes Квадрата, где о фактических выполнениях сообщают.

Сначала µ сдвига определяется близко к тому, где мы хотим найти собственные значения. Когда и K и M положительны определенный, естественно взять µ = 0 и получить самые маленькие собственные значения; в других случаях берут любую точку в интервале [lb, ub], где собственные значения разыскиваются. Вычтите µM из уравнения собственного значения и получите (K - µM) U = (λ - µ) MU. Затем умножьтесь с инверсией этой переключенной матрицы и доберитесь

1λμU=(KμM)1MU

Это - стандартная задача о собственных значениях AU = θU с матричным A = (K – µM)-1M и собственные значения

θi=1λiμ

где i = 1... N. Самые большие собственные значения θi преобразованного матричного A теперь соответствуют собственным значениям λi = µ + 1/θi исходного карандаша (K,M), самый близкий к сдвигу µ.

Алгоритм Арнольди вычисляет ортонормированный базис V, где переключенный и инвертированный оператор A представлен H матрицы Хессенберга,

AVj = VjHj,j + Ej.(3)

(Индексы означают, что Vj и Ej имеют столбцы j, и Hj,j имеет строки и столбцы j. Когда никакие индексы не используются, мы имеем дело с векторами и матрицами размера n.)

Некоторые собственные значения этого Hj,j матрицы Хессенберга в конечном счете дают хорошие приближения собственным значениям исходного карандаша (K,M), когда основание растет в размерности, j, и все меньше и меньше собственного вектора скрыт в остаточном матричном Ej.

Основание V создается один столбец vj за один раз. Первый векторный v 1 выбран наугад как n нормально распределенные случайные числа. На шаге j первые векторы j уже вычисляются и формируют n ×j матричный Vj. Следующий векторный v j +1 вычисляется первым разрешением A работать с новейшим векторным vj и затем созданием результата, ортогонального ко всем предыдущим векторам.

Это формулируется как hj+1vj+1=AvjVjhj, где вектор-столбец, hj состоит из коэффициентов Грамма-Schmidt и h j +1, j, является коэффициентом нормализации, который дает v j +1 единичная длина. Поместите соответствующие отношения от предыдущих шагов перед этим и доберитесь

AVj=VjHj,j+vj+1hj+1,jejT

где Hj,j является j ×j матрица Хессенберга с векторами hj как столбцы. Второй срок на правой стороне имеет ненули только в последнем столбце; более ранние коэффициенты нормализации обнаруживаются в поддиагонали Hj,j.

eigensolution маленькой матрицы Хессенберга H дает приближения некоторым собственным значениям и собственные вектора большого матричного оператора Aj,j следующим образом. Вычислите собственные значения θi и собственные вектора si Hj,j,

Hj,jsi=siθi,i=1,...,j

Затем yi = Vj si является аппроксимированным собственным вектором A, и его невязка

ri=Ayiyiθi=AVjsiVjsiθi=(AVjVjHj,j)si=vj+1hj+1,jsi,j

Эта невязка должна быть маленькой в норме для θi, чтобы быть хорошим приближением собственного значения. Норма невязки

ri=|hj+1,jsj,i|

продукт последнего поддиагонального элемента матрицы Хессенберга и последнего элемента ее собственного вектора. Это редко происходит, что h j +1, j становится особенно маленьким, но после достаточно много шагов j, там всегда некоторые собственные вектора si с маленькими последними элементами. Длинный векторный V j +1 имеет модульную норму.

Не необходимо на самом деле вычислить приближение собственного вектора yi, чтобы получить норму невязки; мы только должны исследовать короткие векторы si и отметить тех с помощью крошечных последних компонентов, как сходился. В типичном случае n может быть 2000, в то время как j редко превышает 50, таким образом, все вычисления, которые включают только матрицы и векторы размера j, являются намного более дешевыми, чем те включающие векторы длины n.

Это вычисление собственного значения и тест для сходимости выполнены каждые несколько шагов j, пока все приближения к собственным значениям в интервале [lb, ub] не отмечаются, как сходился. Когда n намного больше, чем j, это делается очень часто для меньшего n более редко. Когда все собственные значения в интервале сходились, или когда j достиг предписанного максимума, сходившихся собственных векторов, или более соответственно векторов Шура, вычисляется и помещается перед основанием V.

После этого алгоритм Арнольди перезапущен со случайным вектором, если все приближения в интервале отмечаются, как сходился, или иначе с лучшим не сходившимся аппроксимированным собственным вектором yi. На каждом шаге запускается j этого второго Арнольди, вектор сделан ортогональным ко всем векторам в V включая сходившиеся векторы Шура от предыдущих выполнений. Таким образом, алгоритм применяется к спроектированной матрице и забирает вторую копию любого двойного собственного значения может быть в интервале. Если что-нибудь в интервале сходится во время этого второго выполнения, одна треть предпринята и так далее, до больше аппроксимированных собственных значений θi обнаруживается внутри. Затем алгоритм сигнализирует о сходимости. Если там все еще не сходятся аппроксимированные собственные значения после предписанного максимального количества шагов, несходимости сигналов алгоритма, и сообщает обо всех решениях, которые оно нашло.

Это - эвристическая стратегия, которая работала хорошо и над симметричными, несимметричными, и над даже дефектными задачами о собственных значениях. Существует крошечный теоретический шанс пропавших без вести собственного значения, если все случайные стартовые векторы, оказывается, являются ортогональными к его собственному вектору. Обычно, алгоритм перезапускает времена p, если максимальной кратностью собственного значения является p. При каждом перезапуске введено новое случайное стартовое направление.

Переключенный и инвертированный матричный A = (KµM) –1M необходим только, чтобы работать с векторным vj в алгоритме Арнольди. Это сделано путем вычисления LU-факторизации,

P (KµM) Q = LU(4)

использование разреженной команды MATLAB® lu (P и Q являются перестановками, которые делают треугольные факторы L и U разреженный и факторизация численно стабильный). Эта факторизация должна быть сделана только однажды, в начале, затем x =, Avj вычисляется как,

x = QU –1L–1PMvj(5)

с одним векторным умножением разреженной матрицы, перестановкой, разреженным форвардом - и задние замены и итоговое изменение нумерации.

Смотрите также

Представлено до R2006a