= '''Тензорные/матричные алгоритмы''' =
=== '''1.0 Введение'''===
Численные методы, включающие матрицы и тензоры, обеспечивают основу для теоретических моделей в физике и, особенно, в технике. На их основе создаются математические численные модели для надежного моделирования физических процессов и проектирования технических структур на цифровых компьютерах.
Ниже представлена концепция, которая объединяет матричное исчисление, тензорное исчисление и программирование с объектно-ориентированными методами.
Традиционное матричное исчисление основано на концепции схемы двумерного расположения вычислительных величин, зародившейся еще до появления цифровых компьютеров. Однако сейчас в программировании стало стандартом использовать многомерные массивы для динамического хранения и обработки числовых значений и текста. Чтобы оптимизировать эти ресурсы, необходимо расширить матричное исчисление до многомерных матриц и применить в программировании подходящий синтаксис и семантику, соответствующую математическим методам.
Хорошо зарекомендовавшее себя тензорное исчисление в индексной записи обеспечивает идеальную форму для этой цели; потому что индексированные величины более высокого порядка также могут обрабатываться так же, как матрицы. Это приводит к единой концепции программирования с использованием массивов и процедур.
К сожалению, существует немного языков программирования, которые напрямую реализуют синтаксис и семантику для непосредственной обработки элементов матрицы и связанной с ней матричной арифметики. Однако эту проблему можно решить, используя объектно-ориентированные методы программирования матричных/тензорных алгоритмов. Здесь пользователи имеют возможность объявлять свои собственные объекты матриц и тензоров и связанные с ними функции-члены, что позволяет использовать единую концепцию для обработки различных типов тензоров/матриц. В этой статье для этой цели используется язык программирования C++; поскольку он также позволяет перегружать стандартные операторы программирования для арифметики и функции для тензорных и матричных операций, позволяя реализовать традиционную матричную арифметику, как, например,
C_{i} = A_{i}+ B_{i} соотв. '''C''' = '''A''' + '''B'''
или
f^{i} = k^{ik} * v_{k} соотв. '''f''' = '''k''' * '''v''',
в ясной форме и с использованием свойств тензорного исчисления.
Этот подход представлен в .
Концепция была специально разработана для лекций и упражнений по численным методам и методам конечных элементов с целью дать студентам четкое понимание теоретических тензорных и практических матричных методов, а также объектно-ориентированного моделирования.
Следующая статья разделена на следующие разделы:
''- 2.0 Матричные объекты и элементарные операторы'',
''- 3.0 Список декартовых базисов и матрично-векторных умножений'',
''- 4.0 Перечислить базисные векторы и метрики в евклидовом пространстве'',
''- Преобразования тензора списка 5-0''.
Теория матриц и тензоров, тексты программ и результаты вычислений изложены в синтетической форме.
=== 2.0 Матричные объекты и элементарные операторы ===
Ниже предполагается, что прямоугольные матрицы хранятся \textbf{\textit{по столбцам, как это принято в научных и технических приложениях и алгоритмических языках программирования, таких как FORTRAN.
\textbf{M} =
\begin{vmatrix}
a_{0,0} & a_{1,1} & ... & a_{1,N_{k-1 \\
... \\
... \\
... \\
... \\
a_{N_{i-1},0} & a_{N_{i-1},1} & ... & a_{N_{i-1},N_{k-1
\end{vmatrix}
= M_{ik} с размерами (N_{i}\times N_{k}).
Здесь первый индекс i проходит по строкам, а второй индекс k — по столбцам матрицы M_{ik.
Внутренне матрицы сохраняются путем присвоения элементов матрицы в последовательном порядке одномерному векторному полю:
'''В''' :=
\begin{матрица
( a_{0,0} & a_{1,0} &... & a_{N_{i-1},0} & a_{0,1} & a_{1,1} & ... & a_ {N_{i-1},1} и
... & ... &
a_{0,N_{i-1 & a_{1,N_{i-1 & ... & a_{N_{i-1},N_{k-1 )
\end{matrix}
=
\begin{матрица
( v_{0} & v_{1} & ... & v_ {N_ {i-1 & ... & ... & v_{N_{i}*N_{k}-1} )
\end{matrix}
= V_{z} с размерностью N_{z} = N_{i} * N_{k},
аналогично тому, как это делается внутри компьютерных архитектур фон Неймана.
Соответствующие «биективные отображения» определяются следующим образом:
Сопоставление
V_{z} := M\underbrace{_{ik_z
определяется как z = k * N_{i} + i
,
и обратное отображение
M\underbrace{_{ik_z := V_{z}
задается как k = \text{Entier}(z/N_{i}) и i = z - k * N_{i} .
Дескриптор объекта для представления матрицы не зависит от внутреннего последовательного хранения элементов и управляет только внешним отображением формы матрицы.
Если матрица '''{M}''' сокращается до одной строки, она становится вектором-строкой M_{0k} ; то же самое относится и к вектору-столбцу M_{i0} . Это демонстрирует, что можно включать \textbf{0-index} в нотацию без изменения места хранения векторов или матриц.
Это справедливо и для вектора '''V''':
V_{z} := V_{0z} := V_{z0}
и для любых матриц \textbf{M}:
M_{ik} := M_{0ik} := M_{i0k} := M_{ik0} \;.
Конструктор '''MATRIX M''' (N_i,N_k,N_l,N_m) определяет математическую форму прямоугольной матрицы в программном коде путем выбора размеров. В настоящее время разрешено до четырех измерений, которых обычно достаточно для инженерных приложений. Кроме того, соседние индексы могут быть объединены с помощью сопоставлений, используемых в программном коде.
В следующем примере программы на C++ объясняется, как обрабатываются матричные классы для создания соответствующих матричных объектов (экземпляров).
\newline
Конструкторы классов VEKTOR, MATRIX, delta_MATRIX, e_MATRIX могут использоваться для создания статических или динамических объектов с элементами типа double. Используя обозначение массива в стиле C, векторные и матричные элементы могут быть предварительно загружены числовыми значениями. Ввод/вывод осуществляется с помощью перегруженных стандартных операторов «>>» и «
Подробнее: https://en.wikipedia.org/wiki/Matrix/Tensor_Algorithms
Матричные/тензорные алгоритмы ⇐ Васина Википедия
-
Автор темыwiki_en
- Всего сообщений: 93862
- Зарегистрирован: 16.01.2024
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
Мобильная версия