== Введение ==
Численные методы, включающие матрицы и тензоры, обеспечивают основу для теоретических моделей в физике и, в частности, в технике. На их основе создаются математические численные модели для надежного моделирования физических процессов и проектирования технических структур на цифровых компьютерах.
Ниже представлена концепция, которая объединяет матричное исчисление, тензорное исчисление и программирование с объектно-ориентированными методами.
Традиционное матричное исчисление основано на концепции схемы двумерного расположения вычислительных величин, зародившейся еще до появления цифровых компьютеров. Однако сейчас в программировании стало стандартом использовать многомерные массивы для динамического хранения и обработки числовых значений и текста. Чтобы оптимизировать эти ресурсы, необходимо расширить матричное исчисление до многомерных матриц и применить в программировании подходящий синтаксис и семантику, соответствующую математическим методам.
Хорошо зарекомендовавшее себя тензорное исчисление в индексной записи обеспечивает идеальную форму для этой цели; потому что индексированные величины более высокого порядка также могут обрабатываться так же, как матрицы. Это приводит к единой концепции программирования с использованием массивов и процедур.
К сожалению, существует немного языков программирования, которые напрямую реализуют синтаксис и семантику для непосредственной обработки элементов матрицы и связанной с ней матричной арифметики. Однако эту проблему можно решить, используя объектно-ориентированные методы программирования матричных/тензорных алгоритмов. Здесь пользователи имеют возможность объявлять свои собственные объекты матриц и тензоров и связанные с ними функции-члены, что позволяет использовать единую концепцию для обработки различных типов тензоров/матриц. В этой статье для этой цели используется язык программирования C++; поскольку он также позволяет перегружать стандартные операторы программирования для арифметики и функции для тензорных и матричных операций, позволяя реализовать традиционную матричную арифметику, как, например,
C_{i} = A_{i}+ B_{i} соотв. '''C''' = '''A''' + '''B'''
или
f^{i} = k^{ik} * v_{k} соотв. '''f''' = '''k''' * '''v''',
в ясной форме и с использованием свойств тензорного исчисления.
Этот подход представлен в .
Концепция была специально разработана для лекций и упражнений по численным методам и методам конечных элементов с целью дать студентам четкое понимание теоретических тензорных и практических матричных методов, а также объектно-ориентированного моделирования.
Теория матриц и тензоров, тексты программ и результаты вычислений изложены в синтетической форме.
== Матричные объекты и элементарные операторы ==
Ниже предполагается, что прямоугольные матрицы хранятся \textbf{\textit{по столбцам, как это принято в научных и технических приложениях и алгоритмических языках программирования, таких как FORTRAN.
:
\textbf{M} =
\влево(
\begin{array}{ccc}
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{array}
\справа)
= M_{ik} с размерами (N_{i}\times N_{k}).
Здесь первый индекс i проходит по строкам, а второй индекс k — по столбцам матрицы M_{ik.
Внутренне матрицы сохраняются путем присвоения элементов матрицы в последовательном порядке одномерному векторному полю:
:
\textbf{V} :=
\влево(
\begin{array}{ccc}
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{array}
\справа)
:
=
\влево(
\begin{array}{ccc}
v_{0} & v_{1} & ... & v_{N_{i-1 & ... & ... & v_{N_{i}*N_{k}-1
\end{array}
\справа)
= 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}
и для любых матриц 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_an ... imulations
Матричные и тензорные объекты для численного моделирования ⇐ Васина Википедия
-
Автор темыwiki_en
- Всего сообщений: 93319
- Зарегистрирован: 16.01.2024
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
Мобильная версия