Этот пример показывает mesh конечного элемента для крыла НАСА, включая две запаздывающих откидных створки. Больше информации об истории крыльев доступно в Крыльях NACA (nasa.gov).
Данные хранятся в файле airfoil.mat
. Данные состоят из 4 253 пар (x, y) координаты точек mesh. Это также содержит массив 12 289 пар индексов, (i, j), задавая связи между точками mesh.
Загрузите файл данных в рабочую область.
load airfoil
Во-первых, масштабируйте x
и y
принести им в область значений . Затем сформируйте разреженную матрицу смежности из (i, j) связи и сделайте ее положительной определенный. Наконец, постройте матрицу смежности, использующую (x, y) как координаты для вершин (точки mesh).
% Scaling x and y x = pow2(x,-32); y = pow2(y,-32); % Forming the sparse adjacency matrix and making it positive definite n = max(max(i),max(j)); A = sparse(i,j,-1,n,n); A = A + A'; d = abs(sum(A)) + 1; A = A + diag(sparse(d)); % Plotting the finite element mesh gplot(A,[x y]) title('Airfoil Cross-Section')
Можно использовать spy
, чтобы визуализировать ненулевые элементы в матрице, таким образом, это - особенно полезная функция, чтобы видеть шаблон разреженности в разреженных матрицах. spy(A)
строит шаблон разреженности матричного A
.
spy(A)
title('Airfoil Adjacency Matrix')
symrcm
использует метод Обратного алгоритма Катхилла-Макки для переупорядочения матрицы смежности. r = symrcm(A)
возвращает вектор перестановки r
, таким образом, что A(r,r)
имеет тенденцию иметь свои диагональные элементы ближе к диагонали, чем A
. Эта форма является хорошим предварительным упорядоченным расположением для LU или факторизации Холесского матриц, которые прибывают из "долгих, тощих" проблем. Это работает и на симметричные и на несимметричные матрицы.
r = symrcm(A);
spy(A(r,r))
title('Reverse Cuthill-McKee')
Используйте j = COLPERM(A)
, чтобы возвратить вектор перестановки, который переупорядочивает столбцы разреженной матрицы A
в не уменьшающемся порядке ненулевого количества. Эта форма иногда полезна как предварительное упорядоченное расположение для LU-факторизации, как в lu(A(:,j))
.
j = colperm(A);
spy(A(j,j))
title('Column Count Reordering')
symamd
дает симметричную аппроксимированную минимальную перестановку степени. Для симметричного положительного определенного матричного A
команда p = symamd(S)
возвращает вектор перестановки p
, таким образом, что S(p,p)
имеет тенденцию иметь более разреженный Фактор Холесского, чем S
. Иногда symamd
работает хорошо на симметричные неопределенные матрицы также.
m = symamd(A);
spy(A(m,m))
title('Approximate Minimum Degree')