title |
---|
Linear Algebra |
[TOC]
fffc_linalg
模块提供了常用的线性代数求解函数。
矩阵求逆。
call [[fffc_linalg(module):inv(interface)]](a)
@note
没有使用 b = inv(a)
的形式是考虑到:将矩阵赋值的操作交给用户自己。
program demo_inv
use fffc_module
real :: x(2, 2) = reshape([1, 2, 3, 4], [2, 2])
call inv(x)
end program demo_inv
矩阵相乘。
c = [[fffc_linalg(module):gemm(interface)]](a, b)
program demo_gemm
use fffc_module
real :: x(2, 2) = reshape([1, 2, 3, 4], [2, 2])
real :: y(2, 1) = reshape([1, 1], [2, 1]), z(2, 1)
z = gemm(x, y)
end program demo_gemm
线性方程组求解。
call [[fffc_linalg(module):solve(interface)]](a, b)
@note
没有使用 b = solve(a, b)
的形式是考虑到:将矩阵赋值的操作交给用户自己。
program demo_solve
use fffc_module
real :: x(2, 2) = reshape([1, 2, 3, 4], [2, 2])
real :: y(2, 1) = reshape([1, 2], [2, 1])
call solve(x, y)
end program demo_solve
对角矩阵与矩阵对角向量的相互转换。
b = [[fffc_linalg(module):diag(interface)]](a)
program demo_diag
use fffc_module
real :: x(2, 2) = reshape([1, 2, 3, 4], [2, 2])
real :: v(2)
v = diag(x)
end program demo_diag
矩阵行列式值。
b = [[fffc_linalg(module):det(interface)]](a)
program demo_det
real :: x(2, 2) = reshape([1, 2, 3, 4], [2, 2]), v
v = det(x)
end program demo_det
构造单位矩阵。
b = [[fffc_linalg(module):eye(interface)]](m, n)
program demo_eye
use fffc_module
real :: x(2, 2)
x = eye(2, 2)
end program demo_eye