不使用 if-else 语句的 haskell 矩阵幂

标签 haskell matrix linear-algebra

我有以下函数来获取矩阵的幂

X^0 = 单位矩阵, X^1 =X;
X^2 = X'X;
X^3 = X X' X;
X^4 = X' X X' X ......

我尝试了以下功能:

import Numeric.Container
import Numeric.LinearAlgebra 

mpow :: Field t => (Matrix t) -> Integer -> (Matrix t) 
mpow x 0 = ident $ cols x 
mpow x 1 = x
mpow x n =
    if (mod n 2) == 0 then 
        multiply (trans x) (mpow x $ n - 1)
    else 
        multiply x (mpow x $ n - 1)

是否可以不使用 if-else 语句重写此函数?

最佳答案

是的,你可以使用守卫。但通常它会在 Haskell 中编译成相同的内部表示。

import Numeric.Container
import Numeric.LinearAlgebra

mpow :: Field t => (Matrix t) -> Integer -> (Matrix t)
mpow x 0 = ident $ cols x
mpow x 1 = x
mpow x n | (mod n 2) == 0 = multiply (trans x) (mpow x $ n - 1)
         | otherwise      = multiply x (mpow x $ n - 1)

关于不使用 if-else 语句的 haskell 矩阵幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21152669/

相关文章:

haskell - 无法使用 IO Monad 打印到文件

debugging - Haskell 有分步调试器吗?

matlab - 散布一个非零元素岛

r - 计算 R 矩阵中每列特定整数的数量

algorithm - 对于整数 A>0、B>0、N>0,找到整数 x>0、y>0,使得 N-(Ax+By) 是最小的非负数

python - numpy matrix trickery - 逆时矩阵之和

haskell - 重新排序搜索空间

haskell - 将函数应用于haskell中的每个参数

python - 如何在python中遍历矩阵

r - Quadprog优化