由于之前写一个软件同时开发安卓和iOS平台需要用到线性代数运算,安卓Java找到了一个比较合适的库Jama,但是在iOS平台上没有找到很合适的Swift库,尽管iOS自带有Accelerate计算库,但是只能实现最基本的矩阵运算,因此在看过Jama的源代码后发现其都是运用原生Java编写,可以轻松实现翻译成Swift语言版本,因此我花了两天时间翻译并调试,最终完成了Swift版Jama,具体代码可以到我的Github上下载:https://github.com/CalvinXu17/JamaSwift.git
所有类和方法均与Jama一致,可以直接搜索Jama查看使用方法
感谢Jama团队的源代码,Swift版如有错误,请大家指正
贴一个Demo:
let aa:[[Double]] = [[10.0,20.0,30.0],[12.0,24.0,46.0],[34.0,58.0,12.0]]
do {
let mat = try Matrix(paramArrayOfDouble: aa)
print("cond: \(mat.cond())")
print("rank: \(mat.rank())") // 秩
print("chol: \(mat.chol().getL().getArray())")
print("trace: \(mat.trace())") // 迹
print("transpose:\(mat.transpose().getArray())") // 转置
let r = try mat.det() // 行列式的值
print("det: \(r)")
let c = try mat.lu().det()
let d = try mat.inverse().getArray() // 逆矩阵
print("inverse: \(d)")
print("特征值: \(mat.eig().getD().getArray())") // 特征值
print("特征向量: \(mat.eig().getV().getArray())") // 特征向量
// mat.times(Matrix) 矩阵乘法
} catch {
print(error)
}