定义用于有限元类型计算的密集矩阵。 用于在求和成全局矩阵之前存储单元刚度矩阵。所有被覆盖的虚函数都记录在dense_matrix_base.h中。 更多...
#include <dof_map.h>
类 | |
struct | UseBlasLapack |
用于确定是否使用blas_lapack的辅助结构。 更多... | |
Public 成员函数 | |
DenseMatrix (const unsigned int new_m=0, const unsigned int new_n=0) | |
构造函数。创建一个维度为 m x n 的密集矩阵。 更多... | |
template<typename T2 > | |
DenseMatrix (unsigned int nrow, unsigned int ncol, std::initializer_list< T2 > init_list) | |
构造函数。根据行数、列数和初始化列表创建矩阵。 更多... | |
DenseMatrix (DenseMatrix &&)=default | |
移动构造函数。移动构造函数使用默认实现,因为该类不管理任何内存。 更多... | |
DenseMatrix (const DenseMatrix &)=default | |
复制构造函数。复制构造函数使用默认实现,因为该类不管理任何内存。 更多... | |
DenseMatrix & | operator= (const DenseMatrix &)=default |
复制赋值运算符。复制赋值运算符使用默认实现,因为该类不管理任何内存。 更多... | |
DenseMatrix & | operator= (DenseMatrix &&)=default |
移动赋值运算符。移动赋值运算符使用默认实现,因为该类不管理任何内存。 更多... | |
virtual | ~DenseMatrix ()=default |
析构函数。析构函数使用默认实现,因为该类不管理任何内存。 更多... | |
virtual void | zero () overridefinal |
将矩阵的所有元素设置为0,并重置任何可能先前设置的分解标志。 这允许例如计算新的LU分解,同时重用相同的存储空间。 更多... | |
DenseMatrix | sub_matrix (unsigned int row_id, unsigned int row_size, unsigned int col_id, unsigned int col_size) const |
获取具有最小行和列索引以及子矩阵大小的子矩阵。 更多... | |
T | operator() (const unsigned int i, const unsigned int j) const |
获取矩阵的 (i,j) 元素。 更多... | |
T & | operator() (const unsigned int i, const unsigned int j) |
获取矩阵的 (i,j) 元素的可写引用。 更多... | |
virtual T | el (const unsigned int i, const unsigned int j) const overridefinal |
获取矩阵的 (i,j) 元素。 更多... | |
virtual T & | el (const unsigned int i, const unsigned int j) overridefinal |
获取矩阵的 (i,j) 元素的可写引用。 更多... | |
virtual void | left_multiply (const DenseMatrixBase< T > &M2) overridefinal |
左乘以矩阵 M2。 更多... | |
template<typename T2 > | |
void | left_multiply (const DenseMatrixBase< T2 > &M2) |
左乘以不同类型的矩阵 M2。 更多... | |
virtual void | right_multiply (const DenseMatrixBase< T > &M2) overridefinal |
右乘以矩阵 M2。 更多... | |
template<typename T2 > | |
void | right_multiply (const DenseMatrixBase< T2 > &M2) |
右乘以不同类型的矩阵 M2。 更多... | |
void | vector_mult (DenseVector< T > &dest, const DenseVector< T > &arg) const |
执行矩阵-向量乘法,dest := (*this) * arg。 更多... | |
template<typename T2 > | |
void | vector_mult (DenseVector< typename CompareTypes< T, T2 >::supertype > &dest, const DenseVector< T2 > &arg) const |
执行矩阵-向量乘法,dest := (*this) * arg ,支持不同类型的矩阵和向量。 更多... | |
void | vector_mult_transpose (DenseVector< T > &dest, const DenseVector< T > &arg) const |
执行矩阵-向量乘法,dest := (*this)^T * arg。 更多... | |
template<typename T2 > | |
void | vector_mult_transpose (DenseVector< typename CompareTypes< T, T2 >::supertype > &dest, const DenseVector< T2 > &arg) const |
执行矩阵-向量乘法,dest := (*this)^T * arg,支持不同类型的矩阵和向量。 更多... | |
void | vector_mult_add (DenseVector< T > &dest, const T factor, const DenseVector< T > &arg) const |
执行缩放矩阵-向量乘法,结果存储在 dest 中。 dest += factor * (*this) * arg . 更多... | |
template<typename T2 , typename T3 > | |
void | vector_mult_add (DenseVector< typename CompareTypes< T, typename CompareTypes< T2, T3 >::supertype >::supertype > &dest, const T2 factor, const DenseVector< T3 > &arg) const |
执行混合类型的缩放矩阵-向量乘法,结果存储在 dest 中。 dest += factor * (*this) * arg . 更多... | |
void | get_principal_submatrix (unsigned int sub_m, unsigned int sub_n, DenseMatrix< T > &dest) const |
将 sub_m x sub_n 的主子矩阵放入 dest 中。 更多... | |
void | get_principal_submatrix (unsigned int sub_m, DenseMatrix< T > &dest) const |
将 sub_m x sub_m 的主子矩阵放入 dest 中。 更多... | |
void | outer_product (const DenseVector< T > &a, const DenseVector< T > &b) |
计算两个向量的外积并将结果存储在 (*this) 中。 更多... | |
template<typename T2 > | |
DenseMatrix< T > & | operator= (const DenseMatrix< T2 > &other_matrix) |
从另一种矩阵类型复制矩阵。 更多... | |
void | swap (DenseMatrix< T > &other_matrix) |
STL 风格的交换方法,交换值和分解方法。 更多... | |
void | resize (const unsigned int new_m, const unsigned int new_n) |
调整矩阵的大小,并调用 zero() 方法。 更多... | |
void | scale (const T factor) |
将矩阵的每个元素乘以 factor。 更多... | |
void | scale_column (const unsigned int col, const T factor) |
将矩阵的第 col 列的每个元素乘以 factor。 更多... | |
DenseMatrix< T > & | operator*= (const T factor) |
将矩阵的每个元素乘以 factor。 更多... | |
template<typename T2 , typename T3 > | |
boostcopy::enable_if_c < ScalarTraits< T2 >::value, void >::type | add (const T2 factor, const DenseMatrix< T3 > &mat) |
将 factor 倍的矩阵 mat 添加到此矩阵。 更多... | |
bool | operator== (const DenseMatrix< T > &mat) const |
检查矩阵是否与另一个矩阵 mat 完全相等。 更多... | |
bool | operator!= (const DenseMatrix< T > &mat) const |
检查矩阵是否与另一个矩阵 mat 完全不相等。 更多... | |
DenseMatrix< T > & | operator+= (const DenseMatrix< T > &mat) |
将矩阵 mat 添加到此矩阵。 更多... | |
DenseMatrix< T > & | operator-= (const DenseMatrix< T > &mat) |
从此矩阵中减去矩阵 mat。 更多... | |
auto | min () const -> decltype(libmesh_real(T(0))) |
返回矩阵的最小元素或复数情况下的最小实部。 更多... | |
auto | max () const -> decltype(libmesh_real(T(0))) |
返回矩阵的最大元素或复数情况下的最大实部。 更多... | |
auto | l1_norm () const -> decltype(std::abs(T(0))) |
返回矩阵的 l1-范数,即最大列和 更多... | |
auto | linfty_norm () const -> decltype(std::abs(T(0))) |
返回矩阵的 linfty-范数,即最大行和 更多... | |
void | left_multiply_transpose (const DenseMatrix< T > &A) |
用矩阵 A 的转置左乘。 更多... | |
template<typename T2 > | |
void | left_multiply_transpose (const DenseMatrix< T2 > &A) |
用包含不同数值类型的矩阵 A 的转置左乘。 更多... | |
void | right_multiply_transpose (const DenseMatrix< T > &A) |
用矩阵 A 的转置右乘。 更多... | |
template<typename T2 > | |
void | right_multiply_transpose (const DenseMatrix< T2 > &A) |
用包含不同数值类型的矩阵 A 的转置右乘。 更多... | |
T | transpose (const unsigned int i, const unsigned int j) const |
返回转置矩阵的 (i, j) 元素。 更多... | |
void | get_transpose (DenseMatrix< T > &dest) const |
将转置矩阵存储在 dest 中。 更多... | |
std::vector< T > & | get_values () |
返回对应于存储向量的引用的底层数据存储矢量。 更多... | |
const std::vector< T > & | get_values () const |
返回底层数据存储矢量的常量引用。 更多... | |
void | condense (const unsigned int i, const unsigned int j, const T val, DenseVector< T > &rhs) |
将矩阵的 (i,j) 元素凝聚出来,强制其取值为 val。 更多... | |
void | lu_solve (const DenseVector< T > &b, DenseVector< T > &x) |
解方程组 ![]() | |
template<typename T2 > | |
void | cholesky_solve (const DenseVector< T2 > &b, DenseVector< T2 > &x) |
对于对称正定矩阵(SPD),进行Cholesky分解。 分解为 A = L L^T,比标准LU分解大约快两倍。 因此,如果事先知道矩阵是SPD,则可以使用此方法。如果矩阵不是SPD,则会生成错误。 Cholesky分解的一个优点是它不需要主元交换以确保稳定性。 更多... | |
void | svd (DenseVector< Real > &sigma) |
计算矩阵的奇异值分解(SVD)。 在退出时,sigma包含所有奇异值(按降序排列)。 更多... | |
void | svd (DenseVector< Real > &sigma, DenseMatrix< Number > &U, DenseMatrix< Number > &VT) |
计算矩阵的“简化”奇异值分解。 在退出时,sigma包含所有奇异值(按降序排列), U包含左奇异向量,VT包含右奇异向量的转置。 在简化的SVD中,U有min(m,n)列,VT有min(m,n)行。(在“完整”SVD中,U和VT将是方形的。) 更多... | |
void | svd_solve (const DenseVector< T > &rhs, DenseVector< T > &x, Real rcond=std::numeric_limits< Real >::epsilon()) const |
以最小二乘意义解方程组 ![]() ![]() | |
void | evd (DenseVector< T > &lambda_real, DenseVector< T > &lambda_imag) |
计算一般矩阵的特征值(实部和虚部)。 更多... | |
void | evd_left (DenseVector< T > &lambda_real, DenseVector< T > &lambda_imag, DenseMatrix< T > &VL) |
计算一般矩阵 ![]() | |
void | evd_right (DenseVector< T > &lambda_real, DenseVector< T > &lambda_imag, DenseMatrix< T > &VR) |
计算一般矩阵 ![]() | |
void | evd_left_and_right (DenseVector< T > &lambda_real, DenseVector< T > &lambda_imag, DenseMatrix< T > &VL, DenseMatrix< T > &VR) |
计算一般矩阵的特征值(实部和虚部),以及左右特征向量。 更多... | |
T | det () |
返回矩阵的行列式。 更多... | |
unsigned int | m () const |
返回矩阵的行维度。 更多... | |
unsigned int | n () const |
返回矩阵的列维度。 更多... | |
void | print (std::ostream &os=libMesh::out) const |
漂亮地打印矩阵,默认为 libMesh::out。 更多... | |
void | print_scientific (std::ostream &os, unsigned precision=8) const |
以科学计数法格式打印矩阵。 更多... | |
template<typename T2 , typename T3 > | |
boostcopy::enable_if_c < ScalarTraits< T2 >::value, void >::type | add (const T2 factor, const DenseMatrixBase< T3 > &mat) |
将 factor 添加到矩阵的每个元素。 这应该仅在 T += T2 * T3 是有效的 C++,且 T2 是标量的情况下工作。返回类型是 void。 更多... | |
DenseVector< T > | diagonal () const |
返回矩阵的对角线。 更多... | |
Public 属性 | |
bool | use_blas_lapack |
计算密矩阵的逆(假设可逆性), 首先计算LU分解,然后执行多次回代步骤。 遵循在Web上提供的Numerical Recipes in C中的算法。 更多... | |
Protected 成员函数 | |
void | condense (const unsigned int i, const unsigned int j, const T val, DenseVectorBase< T > &rhs) |
将矩阵的 (i,j) 条目压缩出来,强制它取值为 val。这对于在数值模拟中应用边界条件很有用。 保留矩阵的对称性。 更多... | |
静态 Protected 成员函数 | |
static void | multiply (DenseMatrixBase< T > &M1, const DenseMatrixBase< T > &M2, const DenseMatrixBase< T > &M3) |
辅助函数 - 执行计算 M1 = M2 * M3 其中: M1 = (m x n) M2 = (m x p) M3 = (p x n) 更多... | |
Protected 属性 | |
unsigned int | _m |
行维度。 更多... | |
unsigned int | _n |
列维度。 更多... | |
Private 类型 | |
enum | DecompositionType { LU =0, CHOLESKY =1, LU_BLAS_LAPACK, NONE } |
_cholesky_back_substitute 的分解方案会改变矩阵A的条目。因此,在调用A.lu_solve()后再次调用A.cholesky_solve()是错误的, 因为结果可能不符合任何预期结果。这个typedef跟踪在此矩阵上执行了哪种分解。 更多... | |
enum | _BLAS_Multiply_Flag { LEFT_MULTIPLY = 0, RIGHT_MULTIPLY, LEFT_MULTIPLY_TRANSPOSE, RIGHT_MULTIPLY_TRANSPOSE } |
用于确定_multiply_blas函数行为的枚举。 更多... | |
typedef PetscBLASInt | pivot_index_t |
用于存储枢轴索引的数组。可能被当前活动的任何因式分解使用, 类的客户端不应出于任何原因依赖它。 更多... | |
typedef int | pivot_index_t |
Private 成员函数 | |
void | _lu_decompose () |
形成矩阵的LU分解。此函数是私有的,因为它仅在lu_solve(...)函数的实现部分中被调用。 更多... | |
void | _lu_back_substitute (const DenseVector< T > &b, DenseVector< T > &x) const |
通过回代步骤解方程Ax=b。此函数是私有的,因为它仅在lu_solve(...)函数的实现部分中被调用。 更多... | |
void | _cholesky_decompose () |
将对称正定矩阵分解为两个下三角矩阵的乘积,即A = LL^T。 更多... | |
template<typename T2 > | |
void | _cholesky_back_substitute (const DenseVector< T2 > &b, DenseVector< T2 > &x) const |
根据矩阵A的Cholesky分解解方程Ax=b,得到未知值x和rhs b。 更多... | |
void | _multiply_blas (const DenseMatrixBase< T > &other, _BLAS_Multiply_Flag flag) |
_multiply_blas函数使用BLAS gemm函数计算A <- op(A) * op(B)。 用于right_multiply()、left_multiply()、right_multiply_transpose()和 left_multiply_transpose()例程。 [ 在dense_matrix_blas_lapack.C中实现 ] 更多... | |
void | _lu_decompose_lapack () |
使用Lapack例程“getrf”计算矩阵的LU分解。此例程只能由lu_solve()函数的“use_blas_lapack”分支使用。 调用此函数后,矩阵将被其因式分解版本替换,并且DecompositionType将设置为LU_BLAS_LAPACK。 [ 在dense_matrix_blas_lapack.C中实现 ] 更多... | |
void | _svd_lapack (DenseVector< Real > &sigma) |
使用Lapack例程“getsvd”计算矩阵的奇异值分解。 [ 在dense_matrix_blas_lapack.C中实现 ] 更多... | |
void | _svd_lapack (DenseVector< Real > &sigma, DenseMatrix< Number > &U, DenseMatrix< Number > &VT) |
使用Lapack例程“getsvd”计算矩阵的“缩减”奇异值分解。 [ 在dense_matrix_blas_lapack.C中实现 ] 更多... | |
void | _svd_solve_lapack (const DenseVector< T > &rhs, DenseVector< T > &x, Real rcond) const |
由svd_solve(rhs)调用。 更多... | |
void | _svd_helper (char JOBU, char JOBVT, std::vector< Real > &sigma_val, std::vector< Number > &U_val, std::vector< Number > &VT_val) |
实际执行SVD的辅助函数。 [ 在dense_matrix_blas_lapack.C中实现 ] 更多... | |
void | _evd_lapack (DenseVector< T > &lambda_real, DenseVector< T > &lambda_imag, DenseMatrix< T > *VL=nullptr, DenseMatrix< T > *VR=nullptr) |
使用Lapack例程“DGEEV”计算矩阵的特征值。如果VR和/或VL不为nullptr, 则此函数还计算并返回右和/或左特征向量的矩阵。 [ 在dense_matrix_blas_lapack.C中实现 ] 更多... | |
void | _lu_back_substitute_lapack (const DenseVector< T > &b, DenseVector< T > &x) |
与_lu_decompose_lapack()相对应的伴随函数。不要直接使用,通过公共lu_solve()接口调用。 由于我们只是调用LAPACK例程,该函数在逻辑上是const的,因为它不修改矩阵, 但由于它比const_cast更少的麻烦,所以直接声明函数为非const。 [ 在dense_matrix_blas_lapack.C中实现 ] 更多... | |
void | _matvec_blas (T alpha, T beta, DenseVector< T > &dest, const DenseVector< T > &arg, bool trans=false) const |
使用BLAS GEMV函数(通过PETSc)计算 更多... | |
template<typename T2 > | |
void | _left_multiply_transpose (const DenseMatrix< T2 > &A) |
由矩阵 A 的转置左乘,该矩阵可能包含不同的数值类型。 更多... | |
template<typename T2 > | |
void | _right_multiply_transpose (const DenseMatrix< T2 > &A) |
由矩阵 A 的转置右乘,该矩阵可能包含不同的数值类型。 更多... | |
Private 属性 | |
std::vector< T > | _val |
实际的数据值,存储为1D数组。 更多... | |
DecompositionType | _decomposition_type |
此标志跟踪在矩阵上执行的分解类型。 更多... | |
std::vector< pivot_index_t > | _pivots |
定义用于有限元类型计算的密集矩阵。 用于在求和成全局矩阵之前存储单元刚度矩阵。所有被覆盖的虚函数都记录在dense_matrix_base.h中。
|
private |
用于存储枢轴索引的数组。可能被当前活动的任何因式分解使用, 类的客户端不应出于任何原因依赖它。
在文件 dense_matrix.h 第 849 行定义.
|
private |
在文件 dense_matrix.h 第 851 行定义.
|
private |
用于确定_multiply_blas函数行为的枚举。
枚举值 | |
---|---|
LEFT_MULTIPLY | |
RIGHT_MULTIPLY | |
LEFT_MULTIPLY_TRANSPOSE | |
RIGHT_MULTIPLY_TRANSPOSE |
在文件 dense_matrix.h 第 756 行定义.
|
private |
_cholesky_back_substitute
的分解方案会改变矩阵A的条目。因此,在调用A.lu_solve()后再次调用A.cholesky_solve()是错误的, 因为结果可能不符合任何预期结果。这个typedef跟踪在此矩阵上执行了哪种分解。
枚举值 | |
---|---|
LU | |
CHOLESKY | |
LU_BLAS_LAPACK | |
NONE |
在文件 dense_matrix.h 第 746 行定义.
|
inline |
构造函数。创建一个维度为 m
x n
的密集矩阵。
new_m | 矩阵的行数。 |
new_n | 矩阵的列数。 |
在文件 dense_matrix.h 第 954 行定义.
参考 libMesh::DenseMatrix< T >::resize().
libMesh::DenseMatrix< T >::DenseMatrix | ( | unsigned int | nrow, |
unsigned int | ncol, | ||
std::initializer_list< T2 > | init_list | ||
) |
构造函数。根据行数、列数和初始化列表创建矩阵。
new_m | 矩阵的行数。 |
new_n | 矩阵的列数。 |
init_list | 包含行主元素值的初始化列表,其长度必须为 nrow * ncol。 |
在文件 dense_matrix.h 第 966 行定义.
|
default |
移动构造函数。移动构造函数使用默认实现,因为该类不管理任何内存。
|
default |
复制构造函数。复制构造函数使用默认实现,因为该类不管理任何内存。
|
virtualdefault |
析构函数。析构函数使用默认实现,因为该类不管理任何内存。
|
private |
根据矩阵A的Cholesky分解解方程Ax=b,得到未知值x和rhs b。
使用 Cholesky 分解的回代步骤,求解 Ly=b 和 L^T x = y。
T2 | 解方程时使用的数据类型。 |
b | 右侧向量。 |
x | 存储解的向量。 |
T2 | 输入向量 b 和解向量 x 的数据类型。 |
b | 输入向量 b。 |
x | 存储解的目标向量 x。 |
在文件 dense_matrix_impl.h 第 885 行定义.
参考 libMesh::DenseVector< T >::resize().
|
private |
将对称正定矩阵分解为两个下三角矩阵的乘积,即A = LL^T。
使用 Cholesky 分解的实际分解过程。
该算法基于 Numerical Recipes in C 书中的 Cholesky 分解。
在文件 dense_matrix_impl.h 第 835 行定义.
参考 std::sqrt().
|
private |
使用Lapack例程“DGEEV”计算矩阵的特征值。如果VR和/或VL不为nullptr, 则此函数还计算并返回右和/或左特征向量的矩阵。 [ 在dense_matrix_blas_lapack.C中实现 ]
lambda_real | 存储实部特征值的向量。 |
lambda_imag | 存储虚部特征值的向量。 |
VL | 存储左特征向量的矩阵。 |
VR | 存储右特征向量的矩阵。 |
在文件 dense_matrix_blas_lapack.C 第 695 行定义.
参考 libMesh::DenseVector< T >::get_values(), libMesh::DenseMatrix< T >::get_values(), libMesh::pPS(), libMesh::DenseVector< T >::resize() , 以及 libMesh::DenseMatrix< T >::resize().
|
private |
由矩阵 A
的转置左乘,该矩阵可能包含不同的数值类型。
执行左乘转置矩阵的实际操作。
T2 | 矩阵元素的新数据类型。 |
A | 另一个矩阵。 |
如果正在执行 (A^T)*A,将执行一种优化方法;否则,将执行通用的左乘转置操作。
A | 要左乘的转置矩阵。 |
在文件 dense_matrix_impl.h 第 125 行定义.
参考 libMesh::DenseMatrixBase< T >::m(), libMesh::DenseMatrixBase< T >::n() , 以及 libMesh::DenseMatrix< T >::transpose().
|
private |
通过回代步骤解方程Ax=b。此函数是私有的,因为它仅在lu_solve(...)函数的实现部分中被调用。
使用 LU 分解的反向代入解线性系统。
b | 输入向量 b。 |
x | 存储结果的目标向量 x。 |
在文件 dense_matrix_impl.h 第 656 行定义.
参考 libMesh::DenseVector< T >::resize() , 以及 libMesh::DenseVector< T >::size().
|
private |
与_lu_decompose_lapack()相对应的伴随函数。不要直接使用,通过公共lu_solve()接口调用。 由于我们只是调用LAPACK例程,该函数在逻辑上是const的,因为它不修改矩阵, 但由于它比const_cast更少的麻烦,所以直接声明函数为非const。 [ 在dense_matrix_blas_lapack.C中实现 ]
b | 右侧向量。 |
x | 存储解的向量。 |
在文件 dense_matrix_blas_lapack.C 第 901 行定义.
参考 libMesh::DenseVector< T >::get_values() , 以及 libMesh::pPS().
|
private |
形成矩阵的LU分解。此函数是私有的,因为它仅在lu_solve(...)函数的实现部分中被调用。
使用 LU 分解的实际分解过程。
在文件 dense_matrix_impl.h 第 700 行定义.
参考 std::abs(), libMesh::DenseMatrix< T >::resize() , 以及 libMesh::zero.
|
private |
使用Lapack例程“getrf”计算矩阵的LU分解。此例程只能由lu_solve()函数的“use_blas_lapack”分支使用。 调用此函数后,矩阵将被其因式分解版本替换,并且DecompositionType将设置为LU_BLAS_LAPACK。 [ 在dense_matrix_blas_lapack.C中实现 ]
在文件 dense_matrix_blas_lapack.C 第 210 行定义.
参考 libMesh::pPS().
|
private |
使用BLAS GEMV函数(通过PETSc)计算
dest := alpha*A*arg + beta*dest
其中alpha和beta是标量,A是此矩阵,arg和dest是适当大小的输入向量。 如果trans为true,则计算转置matvec。默认情况下,trans==false。
[ 在dense_matrix_blas_lapack.C 中实现 ]
alpha | 标量alpha。 |
beta | 标量beta。 |
dest | 存储结果的向量。 |
arg | 输入向量。 |
trans | 如果为true,则计算转置matvec。 |
在文件 dense_matrix_blas_lapack.C 第 990 行定义.
参考 libMesh::DenseVector< T >::get_values(), libMesh::DenseMatrix< T >::get_values(), libMesh::pPS() , 以及 libMesh::DenseVector< T >::size().
|
private |
_multiply_blas函数使用BLAS gemm函数计算A <- op(A) * op(B)。 用于right_multiply()、left_multiply()、right_multiply_transpose()和 left_multiply_transpose()例程。 [ 在dense_matrix_blas_lapack.C中实现 ]
other | 另一个矩阵。 |
flag | 用于指定操作类型的标志。 |
在文件 dense_matrix_blas_lapack.C 第 37 行定义.
参考 libMesh::DenseMatrix< T >::get_values(), libMesh::DenseMatrixBase< T >::m(), libMesh::DenseMatrixBase< T >::n() , 以及 libMesh::pPS().
|
private |
由矩阵 A
的转置右乘,该矩阵可能包含不同的数值类型。
执行右乘转置矩阵的实际操作。
T2 | 矩阵元素的新数据类型。 |
A | 另一个矩阵。 |
如果正在执行 B*(B^T),将执行一种优化方法;否则,将执行通用的右乘转置操作。
B | 要右乘的转置矩阵。 |
在文件 dense_matrix_impl.h 第 261 行定义.
参考 libMesh::DenseMatrixBase< T >::m(), libMesh::DenseMatrixBase< T >::n() , 以及 libMesh::DenseMatrix< T >::transpose().
|
private |
实际执行SVD的辅助函数。 [ 在dense_matrix_blas_lapack.C中实现 ]
JOBU | 用于控制计算左奇异向量的选项。 |
JOBVT | 用于控制计算右奇异向量的选项。 |
sigma_val | 存储奇异值的向量。 |
U_val | 存储左奇异向量的向量。 |
VT_val | 存储右奇异向量的向量。 |
在文件 dense_matrix_blas_lapack.C 第 384 行定义.
参考 libMesh::pPS().
|
private |
使用Lapack例程“getsvd”计算矩阵的奇异值分解。 [ 在dense_matrix_blas_lapack.C中实现 ]
sigma | 存储奇异值的向量。 |
在文件 dense_matrix_blas_lapack.C 第 277 行定义.
参考 libMesh::DenseVector< T >::resize() , 以及 libMesh::DenseVector< T >::size().
|
private |
使用Lapack例程“getsvd”计算矩阵的“缩减”奇异值分解。 [ 在dense_matrix_blas_lapack.C中实现 ]
sigma | 存储奇异值的向量。 |
U | 存储左奇异向量的矩阵。 |
VT | 存储右奇异向量的矩阵的转置。 |
在文件 dense_matrix_blas_lapack.C 第 318 行定义.
参考 libMesh::DenseMatrix< T >::get_values(), libMesh::DenseVector< T >::resize(), libMesh::DenseMatrix< T >::resize() , 以及 libMesh::DenseVector< T >::size().
|
private |
由svd_solve(rhs)调用。
rhs | 右侧向量。 |
x | 存储解的向量。 |
rcond | 控制哪些奇异值被视为零的参数。 |
在文件 dense_matrix_blas_lapack.C 第 529 行定义.
参考 libMesh::DenseVector< T >::get_values(), libMesh::DenseMatrix< T >::get_values(), libMesh::DenseMatrixBase< T >::m(), libMesh::DenseMatrixBase< T >::n(), libMesh::pPS(), libMesh::DenseVector< T >::resize() , 以及 libMesh::DenseVector< T >::size().
|
inlineinherited |
将 factor
添加到矩阵的每个元素。 这应该仅在 T += T2 * T3 是有效的 C++,且 T2 是标量的情况下工作。返回类型是 void。
factor | 要添加的标量因子。 |
mat | 乘法的右操作数矩阵。 |
在文件 dense_matrix_base.h 第 217 行定义.
参考 libMesh::DenseMatrixBase< T >::el(), libMesh::DenseMatrixBase< T >::m() , 以及 libMesh::DenseMatrixBase< T >::n().
|
inline |
void libMesh::DenseMatrix< T >::cholesky_solve | ( | const DenseVector< T2 > & | b, |
DenseVector< T2 > & | x | ||
) |
对于对称正定矩阵(SPD),进行Cholesky分解。 分解为 A = L L^T,比标准LU分解大约快两倍。 因此,如果事先知道矩阵是SPD,则可以使用此方法。如果矩阵不是SPD,则会生成错误。 Cholesky分解的一个优点是它不需要主元交换以确保稳定性。
使用 Cholesky 分解解线性系统。
注意:一旦调用cholesky_solve(),就不能通过对operator(i,j)的调用修改矩阵的条目, 并在没有先调用zero()或resize()的情况下再次调用cholesky_solve(),否则代码将跳过计算矩阵的分解, 直接进行回代步骤。这是出于效率考虑而故意这样做的,以便相同的分解可用于多个右侧。但这也可能导致一些问题,所以要小心!
T2 | 解向量x和右侧向量b的元素类型。 |
b | 输入向量b。 |
x | 解向量x。 |
Cholesky 分解首先通过 cholesky_decompose 对矩阵进行分解, 然后使用 cholesky_back_substitute 找到解 x。
T2 | 输入向量 b 的数据类型。 |
b | 输入向量 b。 |
x | 存储结果的目标向量 x。 |
在文件 dense_matrix_impl.h 第 804 行定义.
|
protectedinherited |
将矩阵的 (i,j) 条目压缩出来,强制它取值为
val。这对于在数值模拟中应用边界条件很有用。
保留矩阵的对称性。
将矩阵列约减为已知值。
i | 要压缩的行索引。 |
j | 要压缩的列索引。 |
val | 压缩出的值。 |
rhs | 与压缩操作相关联的右侧向量。 |
T | 矩阵元素类型。 |
iv | 列索引。 |
jv | 列索引。 |
val | 已知值。 |
rhs | 包含右侧向量的 DenseVectorBase 对象。 |
在文件 dense_matrix_base_impl.h 第 94 行定义.
参考 libMesh::DenseVectorBase< T >::el() , 以及 libMesh::DenseVectorBase< T >::size().
参考自 libMesh::DenseMatrix< T >::condense().
|
inline |
将矩阵的 (i,j) 元素凝聚出来,强制其取值为
val。
这在数值模拟中用于应用边界条件。保留矩阵的对称性。
i | 矩阵行索引。 |
j | 矩阵列索引。 |
val | 设定的值。 |
rhs | 右侧向量。 |
在文件 dense_matrix.h 第 507 行定义.
参考 libMesh::DenseMatrixBase< T >::condense().
T libMesh::DenseMatrix< T >::det | ( | ) |
返回矩阵的行列式。
|
inherited |
返回矩阵的对角线。
返回稠密矩阵的对角线。
T | 矩阵元素类型。 |
在文件 dense_matrix_base_impl.h 第 43 行定义.
参考自 libMesh::DiagonalMatrix< T >::add_matrix().
|
inlinefinaloverridevirtual |
获取矩阵的 (i,j) 元素。
i | 元素的行索引。 |
j | 元素的列索引。 |
(i,j) 元素。 实现了 libMesh::DenseMatrixBase< T >.
在文件 dense_matrix.h 第 160 行定义.
|
inlinefinaloverridevirtual |
获取矩阵的 (i,j) 元素的可写引用。
i | 元素的行索引。 |
j | 元素的列索引。 |
(i,j) 元素的可写引用。 实现了 libMesh::DenseMatrixBase< T >.
在文件 dense_matrix.h 第 171 行定义.
void libMesh::DenseMatrix< T >::evd | ( | DenseVector< T > & | lambda_real, |
DenseVector< T > & | lambda_imag | ||
) |
计算一般矩阵的特征值(实部和虚部)。
警告:此函数会覆盖*this的内容!
实现需要由PETSc包装的LAPACKgeev_函数。
lambda_real | 存储实部特征值的向量。 |
lambda_imag | 存储虚部特征值的向量。 |
void libMesh::DenseMatrix< T >::evd_left | ( | DenseVector< T > & | lambda_real, |
DenseVector< T > & | lambda_imag, | ||
DenseMatrix< T > & | VL | ||
) |
计算一般矩阵 的特征值(实部和虚部)和左特征向量。
警告:此函数会覆盖*this的内容!
矩阵 的左特征向量
满足:
,其中
表示
的共轭转置。
如果第j和(j+1)个特征值形成复共轭对,则VL的第j和(j+1)列“共享”它们的实值存储,方式如下: u_j = VL(:,j) + i*VL(:,j+1) 和 u_{j+1} = VL(:,j) - i*VL(:,j+1)。
实现需要由PETSc提供的LAPACKgeev_例程。
lambda_real | 存储实部特征值的向量。 |
lambda_imag | 存储虚部特征值的向量。 |
VL | 存储左特征向量的矩阵。 |
void libMesh::DenseMatrix< T >::evd_left_and_right | ( | DenseVector< T > & | lambda_real, |
DenseVector< T > & | lambda_imag, | ||
DenseMatrix< T > & | VL, | ||
DenseMatrix< T > & | VR | ||
) |
计算一般矩阵的特征值(实部和虚部),以及左右特征向量。
警告:此函数会覆盖*this的内容!
有关更多信息,请参见evd_left()
和 evd_right()
函数的文档。 实现需要由PETSc提供的LAPACKgeev_例程。
lambda_real | 存储实部特征值的向量。 |
lambda_imag | 存储虚部特征值的向量。 |
VL | 存储左特征向量的矩阵。 |
VR | 存储右特征向量的矩阵。 |
void libMesh::DenseMatrix< T >::evd_right | ( | DenseVector< T > & | lambda_real, |
DenseVector< T > & | lambda_imag, | ||
DenseMatrix< T > & | VR | ||
) |
计算一般矩阵 的特征值(实部和虚部)和右特征向量。
警告:此函数会覆盖*this的内容!
矩阵 的右特征向量
满足:
,其中
是其相应的特征值。
实现需要由PETSc提供的LAPACKgeev_例程。
lambda_real | 存储实部特征值的向量。 |
lambda_imag | 存储虚部特征值的向量。 |
VR | 存储右特征向量的矩阵。 |
void libMesh::DenseMatrix< T >::get_principal_submatrix | ( | unsigned int | sub_m, |
unsigned int | sub_n, | ||
DenseMatrix< T > & | dest | ||
) | const |
将 sub_m
x sub_n
的主子矩阵放入 dest
中。
获取主对角线子矩阵。
sub_m | 子矩阵的行数。 |
sub_n | 子矩阵的列数。 |
dest | 存储结果的矩阵。 |
sub_m | 子矩阵的行数。 |
sub_n | 子矩阵的列数。 |
dest | 存储结果的目标矩阵。 |
在文件 dense_matrix_impl.h 第 529 行定义.
参考 libMesh::DenseMatrix< T >::resize().
void libMesh::DenseMatrix< T >::get_principal_submatrix | ( | unsigned int | sub_m, |
DenseMatrix< T > & | dest | ||
) | const |
将 sub_m
x sub_m
的主子矩阵放入 dest
中。
获取主对角线子矩阵。
sub_m | 子矩阵的行数和列数。 |
dest | 存储结果的矩阵。 |
sub_m | 子矩阵的行数和列数。 |
dest | 存储结果的目标矩阵。 |
在文件 dense_matrix_impl.h 第 567 行定义.
void libMesh::DenseMatrix< T >::get_transpose | ( | DenseMatrix< T > & | dest | ) | const |
将转置矩阵存储在 dest
中。
获取矩阵的转置。
dest | 存储结果的矩阵。 |
dest | 存储结果的目标矩阵。 |
在文件 dense_matrix_impl.h 第 578 行定义.
参考 libMesh::DenseMatrixBase< T >::m(), libMesh::DenseMatrixBase< T >::n() , 以及 libMesh::DenseMatrix< T >::resize().
|
inline |
返回对应于存储向量的引用的底层数据存储矢量。
警告:在使用时应谨慎(即不应更改向量的大小等),但用于与期望简单数组的低级BLAS例程进行交互很有用。
在文件 dense_matrix.h 第 488 行定义.
参考 libMesh::DenseMatrix< T >::_val.
参考自 libMesh::DenseMatrix< T >::_evd_lapack(), libMesh::DenseMatrix< T >::_matvec_blas(), libMesh::DenseMatrix< T >::_multiply_blas(), libMesh::DenseMatrix< T >::_svd_lapack(), libMesh::DenseMatrix< T >::_svd_solve_lapack(), libMesh::PetscMatrix< T >::add_block_matrix(), libMesh::EpetraMatrix< T >::add_matrix() , 以及 libMesh::PetscMatrix< T >::add_matrix().
|
inline |
返回底层数据存储矢量的常量引用。
在文件 dense_matrix.h 第 495 行定义.
参考 libMesh::DenseMatrix< T >::_val.
|
inline |
返回矩阵的 l1-范数,即最大列和
这是与向量的 l1-范数兼容的自然矩阵范数,即 。
在文件 dense_matrix.h 第 1242 行定义.
参考 std::abs().
|
finaloverridevirtual |
左乘以矩阵 M2。
左乘另一个矩阵(M2 * (*this))。
M2 | 另一个矩阵。 |
M2 | 与之左乘的矩阵。 |
实现了 libMesh::DenseMatrixBase< T >.
在文件 dense_matrix_impl.h 第 51 行定义.
参考 libMesh::DenseMatrixBase< T >::m() , 以及 libMesh::DenseMatrixBase< T >::n().
void libMesh::DenseMatrix< T >::left_multiply | ( | const DenseMatrixBase< T2 > & | M2 | ) |
左乘以不同类型的矩阵 M2。
左乘另一个矩阵(M2 * (*this))。
T2 | 矩阵 M2 的元素类型。 |
M2 | 另一个矩阵。 |
M2 | 与之左乘的矩阵。 |
在文件 dense_matrix_impl.h 第 76 行定义.
参考 libMesh::DenseMatrixBase< T >::m() , 以及 libMesh::DenseMatrixBase< T >::n().
void libMesh::DenseMatrix< T >::left_multiply_transpose | ( | const DenseMatrix< T > & | A | ) |
用矩阵 A
的转置左乘。
左乘转置矩阵。
A | 要与左乘的矩阵。 |
如果启用了 BLAS/LAPACK,它将使用优化的 BLAS 例程;否则,它将执行 _left_multiply_transpose 函数。
A | 要左乘的转置矩阵。 |
在文件 dense_matrix_impl.h 第 96 行定义.
参考自 libMesh::DofMap::constrain_element_matrix(), libMesh::DofMap::constrain_element_matrix_and_vector(), libMesh::DofMap::heterogeneously_constrain_element_jacobian_and_residual() , 以及 libMesh::DofMap::heterogeneously_constrain_element_matrix_and_vector().
void libMesh::DenseMatrix< T >::left_multiply_transpose | ( | const DenseMatrix< T2 > & | A | ) |
用包含不同数值类型的矩阵 A
的转置左乘。
左乘转置矩阵。
T2 | 矩阵元素的其他数值类型。 |
A | 要与左乘的矩阵。 |
A | 要左乘的转置矩阵。 |
在文件 dense_matrix_impl.h 第 111 行定义.
|
inline |
返回矩阵的 linfty-范数,即最大行和
这是与向量的 linfty-范数兼容的自然矩阵范数,即 。
在文件 dense_matrix.h 第 1269 行定义.
参考 std::abs().
void libMesh::DenseMatrix< T >::lu_solve | ( | const DenseVector< T > & | b, |
DenseVector< T > & | x | ||
) |
解方程组 给定输入向量 b。
使用 LU 分解解线性系统。
默认情况下执行部分主元消去以保持算法对舍入误差的影响稳定。
注意:一旦调用 lu_solve(),就不能通过对 operator(i, j) 的调用修改矩阵的条目, 也不能在没有先调用 zero() 或 resize() 的情况下再次调用 lu_solve(), 否则代码将跳过计算矩阵的分解而直接进入回代步骤。 这是出于效率考虑而故意这样做的,以便相同的LU分解可以用于多个右侧。 但这也可能导致一些问题,所以要小心!
b | 输入向量 b。 |
x | 解向量 x。 |
b | 输入向量 b。 |
x | 存储结果的目标向量 x。 使用 LU 分解解线性系统。 |
在进行 LU 求解之前,确保矩阵是方阵。通常情况下,可以计算非方阵的 LU 分解,但是:
不希望在这里处理这两种不明确的情况
b | 输入向量 b。 |
x | 存储结果的目标向量 x。 |
在文件 dense_matrix_impl.h 第 607 行定义.
|
inlineinherited |
返回矩阵的行维度。
在文件 dense_matrix_base.h 第 115 行定义.
参考 libMesh::DenseMatrixBase< T >::_m.
参考自 libMesh::DenseMatrix< T >::_left_multiply_transpose(), libMesh::DenseMatrix< T >::_multiply_blas(), libMesh::DenseMatrix< T >::_right_multiply_transpose(), libMesh::DenseMatrix< T >::_svd_solve_lapack(), libMesh::DenseMatrixBase< T >::add(), libMesh::SparseMatrix< T >::add_block_matrix(), libMesh::PetscMatrix< T >::add_block_matrix(), libMesh::EigenSparseMatrix< T >::add_matrix(), libMesh::DiagonalMatrix< T >::add_matrix(), libMesh::LaspackMatrix< T >::add_matrix(), libMesh::EpetraMatrix< T >::add_matrix(), libMesh::PetscMatrix< T >::add_matrix(), libMesh::DofMap::build_constraint_matrix(), libMesh::DofMap::build_constraint_matrix_and_vector(), libMesh::DofMap::constrain_element_dyad_matrix(), libMesh::DofMap::constrain_element_matrix(), libMesh::DofMap::constrain_element_matrix_and_vector(), libMesh::DofMap::constrain_element_vector(), libMesh::DofMap::extract_local_vector(), libMesh::DenseMatrix< T >::get_transpose(), libMesh::DofMap::heterogeneously_constrain_element_jacobian_and_residual(), libMesh::DofMap::heterogeneously_constrain_element_matrix_and_vector(), libMesh::DofMap::heterogeneously_constrain_element_residual(), libMesh::DofMap::heterogeneously_constrain_element_vector(), libMesh::DenseMatrix< T >::left_multiply(), libMesh::DofMap::max_constraint_error(), libMesh::DenseMatrixBase< T >::multiply(), libMesh::DenseMatrix< T >::right_multiply() , 以及 MetaPhysicL::RawType< libMesh::DenseMatrix< T > >::value().
|
inline |
|
inline |
|
staticprotectedinherited |
辅助函数 - 执行计算 M1 = M2 * M3 其中: M1 = (m x n) M2 = (m x p) M3 = (p x n)
将两个矩阵相乘。
M1 | 乘法的结果矩阵。 |
M2 | 乘法的左操作数矩阵。 |
M3 | 乘法的右操作数矩阵。 |
T | 矩阵元素类型。 |
M1 | 存储结果的矩阵。 |
M2 | 第一个矩阵。 |
M3 | 第二个矩阵。 |
在文件 dense_matrix_base_impl.h 第 61 行定义.
参考 libMesh::DenseMatrixBase< T >::el(), libMesh::DenseMatrixBase< T >::m() , 以及 libMesh::DenseMatrixBase< T >::n().
|
inlineinherited |
返回矩阵的列维度。
在文件 dense_matrix_base.h 第 122 行定义.
参考 libMesh::DenseMatrixBase< T >::_n.
参考自 libMesh::DenseMatrix< T >::_left_multiply_transpose(), libMesh::DenseMatrix< T >::_multiply_blas(), libMesh::DenseMatrix< T >::_right_multiply_transpose(), libMesh::DenseMatrix< T >::_svd_solve_lapack(), libMesh::DenseMatrixBase< T >::add(), libMesh::SparseMatrix< T >::add_block_matrix(), libMesh::PetscMatrix< T >::add_block_matrix(), libMesh::EigenSparseMatrix< T >::add_matrix(), libMesh::DiagonalMatrix< T >::add_matrix(), libMesh::LaspackMatrix< T >::add_matrix(), libMesh::EpetraMatrix< T >::add_matrix(), libMesh::PetscMatrix< T >::add_matrix(), libMesh::DofMap::build_constraint_matrix(), libMesh::DofMap::build_constraint_matrix_and_vector(), libMesh::DofMap::constrain_element_dyad_matrix(), libMesh::DofMap::constrain_element_matrix(), libMesh::DofMap::constrain_element_matrix_and_vector(), libMesh::DofMap::constrain_element_residual(), libMesh::DofMap::constrain_element_vector(), libMesh::DofMap::extract_local_vector(), libMesh::DenseMatrix< T >::get_transpose(), libMesh::DofMap::heterogeneously_constrain_element_jacobian_and_residual(), libMesh::DofMap::heterogeneously_constrain_element_matrix_and_vector(), libMesh::DofMap::heterogeneously_constrain_element_residual(), libMesh::DofMap::heterogeneously_constrain_element_vector(), libMesh::DenseMatrix< T >::left_multiply(), libMesh::DofMap::max_constraint_error(), libMesh::DenseMatrixBase< T >::multiply(), libMesh::DenseMatrix< T >::right_multiply() , 以及 MetaPhysicL::RawType< libMesh::DenseMatrix< T > >::value().
|
inline |
检查矩阵是否与另一个矩阵 mat
完全不相等。
mat | 要比较的矩阵。 |
mat
与当前矩阵完全不相等,则为 true,否则为 false。 在文件 dense_matrix.h 第 1163 行定义.
|
inline |
|
inline |
|
inline |
将矩阵的每个元素乘以 factor。
在文件 dense_matrix.h 第 1122 行定义.
|
inline |
|
inline |
|
default |
复制赋值运算符。复制赋值运算符使用默认实现,因为该类不管理任何内存。
|
default |
移动赋值运算符。移动赋值运算符使用默认实现,因为该类不管理任何内存。
|
inline |
从另一种矩阵类型复制矩阵。
将类型为 T2
的矩阵复制到当前矩阵。这对于将实矩阵复制到复矩阵以进行后续操作很有用。
other_matrix | 要复制的矩阵。 |
在文件 dense_matrix.h 第 997 行定义.
|
inline |
检查矩阵是否与另一个矩阵 mat
完全相等。
mat | 要比较的矩阵。 |
mat
与当前矩阵完全相等,则为 true,否则为 false。 在文件 dense_matrix.h 第 1150 行定义.
void libMesh::DenseMatrix< T >::outer_product | ( | const DenseVector< T > & | a, |
const DenseVector< T > & | b | ||
) |
计算两个向量的外积并将结果存储在 (*this) 中。
外积操作。
对于两个实值向量 和
的外积是
对于两个复值向量 和
的外积是
其中 表示向量的共轭转置,
表示复共轭。
a | 与行相关的向量。 |
b | 与列相关的向量。 |
a | 输入向量 a。 |
b | 输入向量 b。 |
在文件 dense_matrix_impl.h 第 548 行定义.
参考 libMesh::libmesh_conj() , 以及 libMesh::DenseVector< T >::size().
|
inherited |
漂亮地打印矩阵,默认为 libMesh::out。
以普通格式打印矩阵。
os | 输出流,默认为 libMesh::out。 |
T | 矩阵元素类型。 |
os | 输出流。 |
在文件 dense_matrix_base_impl.h 第 155 行定义.
|
inherited |
以科学计数法格式打印矩阵。
os | 输出流。 |
precision | 打印的精度。 |
T | 矩阵元素类型。 |
os | 输出流。 |
precision | 打印的精度。 |
在文件 dense_matrix_base_impl.h 第 126 行定义.
|
inline |
调整矩阵的大小,并调用 zero() 方法。
不会释放内存,但可能会分配更多内存。注意:当矩阵被 zero() 时,任何分解(LU、Cholesky 等)也将被清除, 强制在下一次调用例如 lu_solve() 时重新计算。
new_m | 新的行数。 |
new_n | 新的列数。 |
在文件 dense_matrix.h 第 1012 行定义.
参考 libMesh::zero.
参考自 libMesh::DenseMatrix< T >::_evd_lapack(), libMesh::DenseMatrix< T >::_lu_decompose(), libMesh::DenseMatrix< T >::_svd_lapack(), libMesh::DofMap::build_constraint_matrix(), libMesh::DofMap::build_constraint_matrix_and_vector(), libMesh::DenseMatrix< T >::DenseMatrix(), libMesh::DenseMatrix< T >::get_principal_submatrix() , 以及 libMesh::DenseMatrix< T >::get_transpose().
|
finaloverridevirtual |
右乘以矩阵 M2。
右乘另一个矩阵((*this) * M3)。
M2 | 另一个矩阵。 |
如果启用了 BLAS/LAPACK,它将使用优化的 BLAS 例程;否则,它将执行基类中的乘法函数。
M3 | 与之右乘的矩阵。 |
实现了 libMesh::DenseMatrixBase< T >.
在文件 dense_matrix_impl.h 第 188 行定义.
参考 libMesh::DenseMatrixBase< T >::m() , 以及 libMesh::DenseMatrixBase< T >::n().
参考自 libMesh::DofMap::build_constraint_matrix(), libMesh::DofMap::build_constraint_matrix_and_vector(), libMesh::DofMap::constrain_element_matrix(), libMesh::DofMap::constrain_element_matrix_and_vector(), libMesh::DofMap::heterogeneously_constrain_element_jacobian_and_residual() , 以及 libMesh::DofMap::heterogeneously_constrain_element_matrix_and_vector().
void libMesh::DenseMatrix< T >::right_multiply | ( | const DenseMatrixBase< T2 > & | M3 | ) |
右乘以不同类型的矩阵 M2。
右乘另一个矩阵((*this) * M3)。
T2 | 矩阵 M2 的元素类型。 |
M2 | 另一个矩阵。 |
如果启用了 BLAS/LAPACK,它将使用优化的 BLAS 例程;否则,它将执行基类中的乘法函数。
M3 | 与之右乘的矩阵。 |
在文件 dense_matrix_impl.h 第 213 行定义.
参考 libMesh::DenseMatrixBase< T >::m() , 以及 libMesh::DenseMatrixBase< T >::n().
void libMesh::DenseMatrix< T >::right_multiply_transpose | ( | const DenseMatrix< T > & | B | ) |
用矩阵 A
的转置右乘。
右乘转置矩阵。
A | 要与右乘的矩阵。 |
如果启用了 BLAS/LAPACK,它将使用优化的 BLAS 例程;否则,它将执行 _right_multiply_transpose 函数。
B | 要右乘的转置矩阵。 |
在文件 dense_matrix_impl.h 第 232 行定义.
void libMesh::DenseMatrix< T >::right_multiply_transpose | ( | const DenseMatrix< T2 > & | B | ) |
用包含不同数值类型的矩阵 A
的转置右乘。
右乘转置矩阵。
T2 | 矩阵元素的其他数值类型。 |
A | 要与右乘的矩阵。 |
B | 要右乘的转置矩阵。 |
在文件 dense_matrix_impl.h 第 247 行定义.
|
inline |
|
inline |
|
inline |
获取具有最小行和列索引以及子矩阵大小的子矩阵。
row_id | 子矩阵的起始行索引。 |
row_size | 子矩阵的行数。 |
col_id | 子矩阵的起始列索引。 |
col_size | 子矩阵的列数。 |
在文件 dense_matrix.h 第 1039 行定义.
void libMesh::DenseMatrix< T >::svd | ( | DenseVector< Real > & | sigma | ) |
计算矩阵的奇异值分解(SVD)。 在退出时,sigma包含所有奇异值(按降序排列)。
使用 LAPACK svd 实现的奇异值分解。
实现使用PETSc对BLAS/LAPACK的接口。如果不可用,此函数会引发错误。
sigma | 存储奇异值的向量。 |
sigma | 存储奇异值的目标向量。 |
在文件 dense_matrix_impl.h 第 768 行定义.
void libMesh::DenseMatrix< T >::svd | ( | DenseVector< Real > & | sigma, |
DenseMatrix< Number > & | U, | ||
DenseMatrix< Number > & | VT | ||
) |
计算矩阵的“简化”奇异值分解。 在退出时,sigma包含所有奇异值(按降序排列), U包含左奇异向量,VT包含右奇异向量的转置。 在简化的SVD中,U有min(m,n)列,VT有min(m,n)行。(在“完整”SVD中,U和VT将是方形的。)
使用 LAPACK svd 实现的奇异值分解。
实现使用PETSc对BLAS/LAPACK的接口。如果不可用,此函数会引发错误。
sigma | 存储奇异值的向量。 |
U | 存储左奇异向量的矩阵。 |
VT | 存储右奇异向量的转置的矩阵。 |
sigma | 存储奇异值的目标向量。 |
U | 存储左奇异向量的目标矩阵。 |
VT | 存储右奇异向量的目标矩阵。 |
在文件 dense_matrix_impl.h 第 782 行定义.
void libMesh::DenseMatrix< T >::svd_solve | ( | const DenseVector< T > & | rhs, |
DenseVector< T > & | x, | ||
Real | rcond = std::numeric_limits< Real >::epsilon() |
||
) | const |
以最小二乘意义解方程组 。
可能是非方阵和/或秩亏的。 可以通过更改“rcond”参数来控制哪些奇异值被视为零。 对于满足S(i) <= rcond*S(1)的奇异值S(i),在解的目的上被视为零。 传递负数的rcond将强制使用“机器精度”值。
由于各种实现细节,此函数被标记为const,我们不需要修改A的内容来计算SVD(内部会进行复制)。
需要PETSc >= 3.1,因为这是提供LAPACKgelss_包装器的第一个版本。
rhs | 右侧向量rhs。 |
x | 解向量x。 |
rcond | 控制奇异值被视为零的阈值。 |
|
inline |
STL 风格的交换方法,交换值和分解方法。
other_matrix | 要交换值的矩阵。 |
在文件 dense_matrix.h 第 982 行定义.
|
inline |
返回转置矩阵的 (i, j) 元素。
i | 行索引。 |
j | 列索引。 |
(i, j) 元素。 在文件 dense_matrix.h 第 1296 行定义.
参考自 libMesh::DenseMatrix< T >::_left_multiply_transpose() , 以及 libMesh::DenseMatrix< T >::_right_multiply_transpose().
void libMesh::DenseMatrix< T >::vector_mult | ( | DenseVector< T > & | dest, |
const DenseVector< T > & | arg | ||
) | const |
执行矩阵-向量乘法,dest
:= (*this) * arg。
矩阵与向量的乘法。
dest | 存储结果的向量。 |
arg | 输入向量。 |
确保输入大小兼容。调整并清除 dest。 注意:DenseVector::resize() 也会将向量清零。
dest | 存储结果的目标向量。 |
arg | 与之相乘的输入向量。 |
在文件 dense_matrix_impl.h 第 326 行定义.
参考 libMesh::DenseVector< T >::resize() , 以及 libMesh::DenseVector< T >::size().
参考自 libMesh::DofMap::heterogeneously_constrain_element_matrix_and_vector() , 以及 libMesh::DofMap::heterogeneously_constrain_element_vector().
void libMesh::DenseMatrix< T >::vector_mult | ( | DenseVector< typename CompareTypes< T, T2 >::supertype > & | dest, |
const DenseVector< T2 > & | arg | ||
) | const |
执行矩阵-向量乘法,dest
:= (*this) * arg
,支持不同类型的矩阵和向量。
重载的 vector_mult 函数,支持不同数据类型的向量。
T2 | 输入向量 arg 的元素类型。 |
dest | 存储结果的向量。 |
arg | 输入向量。 |
dest | 存储结果的目标向量。 |
arg | 与之相乘的输入向量。 |
在文件 dense_matrix_impl.h 第 360 行定义.
参考 libMesh::DenseVector< T >::size().
void libMesh::DenseMatrix< T >::vector_mult_add | ( | DenseVector< T > & | dest, |
const T | factor, | ||
const DenseVector< T > & | arg | ||
) | const |
执行缩放矩阵-向量乘法,结果存储在 dest
中。 dest
+= factor
* (*this) * arg
.
矩阵与向量相加。
dest | 结果向量,存储缩放后的矩阵乘以向量的和。 |
factor | 缩放因子。 |
arg | 乘法的右侧向量。 |
如果矩阵为空,直接返回。根据是否启用 BLAS/LAPACK 执行不同的操作。
dest | 存储结果的目标向量。 |
factor | 与乘积相加的因子。 |
arg | 与之相乘的输入向量。 |
在文件 dense_matrix_impl.h 第 473 行定义.
参考 libMesh::DenseVector< T >::add(), libMesh::DenseVector< T >::resize() , 以及 libMesh::DenseVector< T >::size().
参考自 libMesh::DofMap::build_constraint_matrix_and_vector().
void libMesh::DenseMatrix< T >::vector_mult_add | ( | DenseVector< typename CompareTypes< T, typename CompareTypes< T2, T3 >::supertype >::supertype > & | dest, |
const T2 | factor, | ||
const DenseVector< T3 > & | arg | ||
) | const |
执行混合类型的缩放矩阵-向量乘法,结果存储在 dest
中。 dest
+= factor
* (*this) * arg
.
重载的 vector_mult_add 函数,支持不同数据类型的向量。
dest | 结果向量,存储缩放后的矩阵乘以向量的和。 |
factor | 缩放因子。 |
arg | 乘法的右侧向量。 |
如果矩阵为空,直接返回。根据是否启用 BLAS/LAPACK 执行不同的操作。
dest | 存储结果的目标向量。 |
factor | 与乘积相加的因子。 |
arg | 与之相乘的输入向量。 |
在文件 dense_matrix_impl.h 第 505 行定义.
参考 libMesh::DenseVector< T >::size().
void libMesh::DenseMatrix< T >::vector_mult_transpose | ( | DenseVector< T > & | dest, |
const DenseVector< T > & | arg | ||
) | const |
执行矩阵-向量乘法,dest
:= (*this)^T * arg。
矩阵转置与向量的乘法。
dest | 存储结果的向量。 |
arg | 输入向量。 |
确保输入大小兼容。调整并清除 dest。 注意:DenseVector::resize() 也会将向量清零。
dest | 存储结果的目标向量。 |
arg | 与之相乘的输入向量。 |
在文件 dense_matrix_impl.h 第 392 行定义.
参考 libMesh::DenseVector< T >::resize() , 以及 libMesh::DenseVector< T >::size().
参考自 libMesh::DofMap::constrain_element_dyad_matrix(), libMesh::DofMap::constrain_element_matrix_and_vector(), libMesh::DofMap::constrain_element_residual(), libMesh::DofMap::constrain_element_vector(), libMesh::DofMap::heterogeneously_constrain_element_jacobian_and_residual(), libMesh::DofMap::heterogeneously_constrain_element_matrix_and_vector(), libMesh::DofMap::heterogeneously_constrain_element_residual() , 以及 libMesh::DofMap::heterogeneously_constrain_element_vector().
void libMesh::DenseMatrix< T >::vector_mult_transpose | ( | DenseVector< typename CompareTypes< T, T2 >::supertype > & | dest, |
const DenseVector< T2 > & | arg | ||
) | const |
执行矩阵-向量乘法,dest
:= (*this)^T * arg,支持不同类型的矩阵和向量。
重载的 vector_mult_transpose 函数,支持不同数据类型的向量。
T2 | 输入向量 arg 的元素类型。 |
dest | 存储结果的向量。 |
arg | 输入向量。 |
dest | 存储结果的目标向量。 |
arg | 与之相乘的输入向量。 |
在文件 dense_matrix_impl.h 第 435 行定义.
参考 libMesh::DenseVector< T >::size().
|
inlinefinaloverridevirtual |
将矩阵的所有元素设置为0,并重置任何可能先前设置的分解标志。 这允许例如计算新的LU分解,同时重用相同的存储空间。
实现了 libMesh::DenseMatrixBase< T >.
在文件 dense_matrix.h 第 1028 行定义.
|
private |
此标志跟踪在矩阵上执行的分解类型。
在文件 dense_matrix.h 第 751 行定义.
|
protectedinherited |
|
protectedinherited |
|
private |
在文件 dense_matrix.h 第 853 行定义.
|
private |
bool libMesh::DenseMatrix< T >::use_blas_lapack |
计算密矩阵的逆(假设可逆性), 首先计算LU分解,然后执行多次回代步骤。 遵循在Web上提供的Numerical Recipes in C中的算法。
该程序被注释掉,因为它实际上不是一种内存或计算上高效的实现。 而且,通常不需要实际的逆矩阵,可以使用lu_solve()之类的东西代替。 在运行时选择性地启用/禁用BLAS支持的选项。 这主要用于测试目的
在文件 dense_matrix.h 第 694 行定义.