Изчисляване на обратната матрица с помощта на biogo?

Работя върху внедряване на филтър на Калман в Go. След като прочетох тази тема, реших да използвам biogo за матрични операции. От документацията обаче изглежда, че biogo не предоставя функция за изчисляване на обратната на матрица.

Някой знае ли друго или знае ли за лесен начин за изчисляване на обратното, като се използват функциите, които biogo предоставя? Благодаря!


person drautb    schedule 12.12.2013    source източник
comment
Вашата реализация с отворен код ли е? Обмислям да стартирам такава KF библиотека и в go. Благодаря.   -  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 е написан предимно от Dan Kortschak, който също пише biogo, всъщност съм почти сигурен, че gonum/matrix е започнал като повече или по-малко разклонение на biogo.matrix. Прав си, че крайната игра е gonum/matrix да го замени. - person LinearZoetrope; 13.12.2013
comment
Дан предложи използването на gonum/matrix, когато го попитах и ​​в пощенския списък на biogo. Благодаря! - person drautb; 16.12.2013

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

Например, ако вашата формула е x=AB^(-1)Cy, тогава я разлагате на стъпките w=Cy, z=решаване(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
Тъй като разполагате с функциите на Lapack, числено по-стабилно е да изчислите QR разлагането на $X$ и след това да решите Rw=Q'y, w=solve(R, Q'y) с намалените размери на R. Пуристите използват SVD на X, за да покрие всички възможни случаи. - person Lutz Lehmann; 18.10.2018