用于数值模拟的矩阵和张量对象 ⇐ 文章草稿
初步文章
1710349517
Guest
[h4] ==简介==
涉及矩阵和张量的数值方法为物理学尤其是工程理论模型提供了框架。由此导出数学数值模型,以在数字计算机上可靠地模拟物理过程并设计技术结构。
下面提出了一个将矩阵演算、张量演算和面向对象方法编程相结合的概念。
传统的矩阵演算基于计算量二维排列模式的概念,起源于数字计算机出现之前的时代。然而,现在使用多维数组来动态存储和处理数值和文本已成为编程的标准。为了优化这些资源,有必要将矩阵演算扩展到多维矩阵,并在编程中应用与数学方法一致的合适语法和语义。
索引表示法中完善的张量微积分为此目的提供了一种理想的形式;因为高阶索引量也可以像矩阵一样进行处理。这导致了使用数组和过程进行编程的统一概念。
不幸的是,很少有编程语言可以直接实现用于直接处理矩阵元素和相关矩阵算术的语法和语义。然而,这可以通过使用面向对象的方法来编程矩阵/张量算法来解决。在这里,用户有机会声明自己的矩阵和张量对象以及关联的成员函数,从而允许使用统一的概念来处理不同的张量/矩阵类型。在本文中,编程语言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{数组}{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{数组}
\右)
= M_{ik} ,维度为 (N_{i}\times N_{k})。
在这里,第一个索引 i 遍历行,第二个索引 k 遍历矩阵 M_{ik} 的列。
在内部,矩阵是通过将矩阵元素按顺序分配给一维向量场来存储的:
:
\textbf{V} :=
\左(
\begin{数组}{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{数组}
\右)
:
=
\左(
\begin{数组}{ccc}
v_{0} & v_{1} & ... & v_{N_{i-1 & ... & ... & v_{N_{i}*N_{k}-1}
\end{数组}
\右)
= 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-indices} 合并到符号中,而无需更改向量或矩阵的存储。
这也适用于向量 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++ 程序示例解释了如何处理矩阵类来创建相应的矩阵对象(实例)。
\换行
'''VEKTOR、MATRIX、delta_MATRIX、e_MATRIX''' 类的构造函数可用于创建具有“double”类型元素的静态或动态对象。使用 C 风格的数组表示法,向量和矩阵元素可以预加载数值。通过重载标准运算符“>>”和“