В этом примере показана сетка конечных элементов для профиля NASA, включая два задних закрылка. Более подробную информацию об истории аэродинамических поверхностей можно получить в NACA Airfoils (nasa.gov).
Данные хранятся в файле airfoil.mat. Данные состоят из 4253 пар координат (x, y) точек сетки. Он также содержит массив из 12 289 пар индексов (i, j), определяющих соединения между точками сетки.
Загрузите файл данных в рабочую область.
load airfoilВо-первых, масштаб x и y на для приведения их в диапазон ]. Затем сформировать разреженную матрицу смежности из (i, j) соединений и сделать ее положительной определенной. Наконец, постройте график матрицы смежности, используя (x, y) в качестве координат для вершин (точек сети).
% 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 или Cholesky факторизации матриц, которые происходят от «длинных, худых» задач. Он работает как для симметричных, так и для несимметричных матриц.
r = symrcm(A);
spy(A(r,r))
title('Reverse Cuthill-McKee')
Использовать j = COLPERM(A) для возврата вектора перестановки, который переупорядочивает столбцы разреженной матрицы A в порядке отсутствия повторений ненулевого числа. Эта форма иногда используется в качестве предварительного порядка для факторизации логической единицы, как в 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')