Вычислить обратную матрицу, используя biogo?

Я работаю над реализацией фильтра Калмана в Go. Прочитав эту тему, я решил использовать biogo для матричных операций. Однако из документации следует, что biogo не предоставляет Функция для вычисления обратной матрицы.

Кто-нибудь знает иначе или знает простой способ вычисления обратного с использованием функций, которые предоставляет biogo? Спасибо!


person drautb    schedule 12.12.2013    source источник
comment
Является ли ваша реализация открытым исходным кодом? Я также рассматриваю возможность запуска такой библиотеки KF. Спасибо.   -  person ChrisR    schedule 27.10.2016


Ответы (2)


Если вы хотите перейти на пакет github.com/gonum/matrix, он предоставляет < функция href="http://godoc.org/github.com/gonum/matrix/mat64#Inverse" rel="nofollow">Inverse, которую вы можете использовать. Интерфейсы двух пакетов кажутся похожими.

Из сообщений в списке рассылки gonum-dev следует, что gonum/ matrix - это путь вперед (и в конечном итоге он заменит biogo.matrix).

person BurntSushi5    schedule 13.12.2013
comment
Gonum/matrix в основном написан Дэном Корчаком, который также пишет biogo, на самом деле, я почти уверен, что gonum/matrix начинался как более или менее форк biogo.matrix. Вы правы в том, что эндшпиль заменит гонум/матрицу. - person LinearZoetrope; 13.12.2013
comment
Дэн предложил использовать gonum/matrix, когда я также спросил его в списке рассылки biogo. Спасибо! - person drautb; 16.12.2013

Вы должны проверить, действительно ли вам нужна обратная матрица или все, что вы делаете с ней, решает какую-то линейную систему.

Например, если ваша формула x=AB^(-1)Cy, то вы разбиваете ее на шаги w=Cy, z=solve(B,w), x=Az, полностью избегая обратной матрицы. Поэтому, если ваше приложение представляет собой вектор ввода-вывода, есть вероятность, что обратное не требуется.

person Lutz Lehmann    schedule 13.12.2013
comment
это помогло реализовать псевдоинверсию с помощью gonum. Решение линейной регрессии w = (X'X)^(-1) X'y может быть реализовано с использованием gonum как w.Solve(X'X, X'y). где X' представляет собой X, транспонированный. - person Cassiohg; 18.10.2018
comment
Поскольку у вас есть доступные функции Лапака, численно более стабильно вычислять QR-разложение $X$, а затем решать Rw=Q'y, w=solve(R, Q'y) с уменьшенными размерностями R. Пуристы используют СВД X для покрытия всех возможных случаев. - person Lutz Lehmann; 18.10.2018