[数值计算] Julia 中的矩阵函数实现完成度(2020 版)

原文中比较了 MATLAB 内置/包;NAG lib;SciPy;Julia;R 中的矩阵函数实现情况。

http://eprints.maths.manchester.ac.uk/2754/

联动 issue


报告内容

按相关性重新分组、排序。
开头的数字为章节编号.
标题加粗代表进行对比

  • 1 简介报告的目的及一点点矩阵函数的历史。
    (万物开端:FORTRAN 版 MATLAB)

  • 2 矩阵函数的广泛应用

  • 3 常见的矩阵函数

    • 指数函数: e^{A}
    • 对数函数: \log A
    • 平方根函数: A^{1/2}
    • 实矩阵乘方: A^{t}
    • 三角函数: \cos A, \sin A
    • 反三角函数: \text{acos}[\text{h}](A), \text{acos}[\text{h}](A)
    • 通用矩阵函数(Schur-Parlett 算法): f(A)
    • 估计矩阵条件数: \text{cond}(f, A)
    • 指数函数×向量: e^{A}b
    • 矩阵指数的 Fréchet 导数: L_{\exp}
    • 矩阵对数的 Fréchet 导数: L_{\log}
    • 矩阵乘方的 Fréchet 导数: L_{x^t}
  • Fortran

    • 19 NAG Library: Fortran, C, MATLAB, Python
    • 20 ϕ Functions in Fortran 95
    • 25 SLICOT (Fortran 77)
  • MATLAB

    • 4 MATLAB 内置实现
    • 5 Symbolic Math Toolbox
    • 6 Advanpix Multiprecision Computing Toolbox
    • 7 Matrix Function Toolbox
    • 8 其他 MATLAB 矩阵函数
    • 11 Expokit:计算 e^{A}, e^{A}b
    • 12 EXPINT:ODE 的指数积分器
  • 类 MATLAB

    • 13 GNU Octave
    • 24 Scilab
  • 数学软件

    • 17 Maple
    • 18 Mathematica
  • 16 Julia

  • 21 Python

    • SciPy
    • SymPy
    • Other Python Functions
    • 26 Tensorflow
  • 22 R

    • Expm
    • pbdDMAT
    • Matrix
  • C/C++

    • 9 Armadillo
    • 10 Eigen
    • 14 GNU Scientific Library
    • 27 SLEPc (C)
  • 23 Rust

  • 15 Java

各语言/库矩阵函数实现情况

MATLAB
build-in
MATLAB
3rd
NAG Lib SciPy Julia R
e^{A} :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
\log A :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :x:
\cos A, \sin A :x: :white_check_mark: :x: :x: :white_check_mark: :x:
\text{acos}(\text{h})(A), \text{acos}(\text{h})(A) :x: :white_check_mark: :x: :x: :white_check_mark: :x:
A^{1/2} :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
A^{t} :x: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :x:
f(A) :white_check_mark: - :white_check_mark: :x: :x: :x:
Est. of \text{cond}(f, A) :x: :white_check_mark: :white_check_mark: :x: :x: :x:
e^{A}b :x: :white_check_mark: :white_check_mark: :white_check_mark: :x: :x:
L_{\exp} :x: :white_check_mark: :white_check_mark: :white_check_mark: :x: :white_check_mark:
L_{\log} :x: :white_check_mark: :white_check_mark: :x: :x: :x:
L_{x^t} :x: :white_check_mark: :white_check_mark: :x: :x: :x:
1 个赞

个人意见:通用矩阵函数、条件数、指数×向量,这三个加到 Base/stdlib 里看起来还行。

后面三个"Fréchet 导数"的实用程度,进不了 julia 主 repo,作为包还可以,就像MATLAB 一样。


这个 paper 是倒序翻 Issues + label:“linear algebra” · JuliaLang/julia 看到了。
简单介绍一下,没事干的时候大家可以完善一下 julia 的矩阵计算生态。