按照我在这里找到的好的指示:https://github.com/haginile/SwiftAccelerate,我验证了矩阵求逆的工作。实际上,它对于给定的示例确实有效。
但是,对于任何其他大于2x2的矩阵(例如转换为1D数组的以下2D矩阵),我会收到EXC_BAD_ACCESS
错误,并已在matlab和python中进行了测试并成功运行。
m = [0.55481645013013, -1.15522603580724, 0.962090414322894, -0.530226035807236, 0.168545207161447, -0.38627124296868, 0.93401699437494, -0.999999999999995, 0.684016994374945, -0.23176274578121, 0.123606797749979, -0.323606797749979, 0.432893622827287, -0.323606797749979, 0.123606797749979, 0.231762745781211, -0.684016994374948, 1.0, -0.934016994374947, 0.386271242968684, 0.168545207161448, -0.530226035807237, 0.962090414322895, -1.15522603580724, 0.554816450130132]
它的逆矩阵应该是
inv(AA)
ans =
Columns 1 through 3
-262796763616197 -656991909040516 4.90007819375216
-162417332048282 -406043330120712 14.6405748712708
0.718958226823704 7.87760147961979 30.4010295628018
162417332048287 406043330120730 46.1614842543337
262796763616208 656991909040536 55.9019809318537
Columns 4 through 5
-656991909040528 262796763616211
-406043330120721 162417332048287
-4.28281034550088 -0.718958226823794
406043330120704 -162417332048283
656991909040497 -262796763616196
您能否给我另一种在Swift中进行矩阵求逆的方法?或者解释一下如何修复这个问题?
dgetrf_
或dgetri_
不会修改任何&N
,对吗? - Guig__CLPK_integer *__n
而不是const __CLPK_integer *__n
,即使它们不会被修改。这可能有历史原因,但作为后果,它们以UnsafeMutablePointer<...>
的形式导入到 Swift 中,而 Swift 编译器会抱怨可能的同时访问。 - Martin R