Следуя хорошим инструкциям, которые я нашел здесь: https://github.com/haginile/SwiftAccelerate Я проверил, что инверсия матрицы работает. Фактически это было сделано для приведенного примера. Но я получаю ошибку EXC_BAD_ACCESS
для любой другой матрицы (больше, чем 2х2), например, следующие 2D матрицы (конвертируются как 1D массив) был протестирован в MATLAB и питона успешно и он не работаетМатричная инверсия в Swift с использованием ускорительной структуры
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? Или объясните мне, как это исправить? Я действительно не понимаю, почему это не работает.
Genius! Спасибо огромное! Моя матрица плохо кондиционирована, так как она мала 5х5. Я буду делать другие тесты, но для моих вычислений мне нужно использовать матрицы по крайней мере 21x21. – Nicholas
Ошибка Xcode 9: «Одновременный доступ к var 'N», но для изменения требуется эксклюзивный доступ; рассмотрите возможность копирования в локальную переменную'. Является ли это ошибкой Xcode 9 или мы должны писать вещи по-другому – Guig
@Guig: это следствие https://github.com/apple/swift-evolution/blob/master/proposals/0176-enforce-exclusive-access-to- memory.md, хотя не очевидно, что он предназначен для применения к небезопасным API-интерфейсам типа C, например LAPACK. Вы можете обойти это, просто сделав пару копий 'N'. –