Хорошо, пришлось активировать мои ржавые знания линейной алгебры, вы можете сделать это с помощью разложения по сингулярным значениям, если все элементы диагональной части SVD отличны от нуля, существуют только тривиальные решения:
solution_space <- function(A){
my_svd <- svd(A)
if(all(my_svd$d != 0)){
return(rep(0, ncol(A)))
} else {
return(my_svd$u[,my_svd$d == 0, drop=F])
}
}
A %*% solution_space(A)
Вы можете попробовать код с этими матрицами:
A <- matrix(c(1,1,0,1,1,0,0,0,1), 3, 3)
A <- matrix(c(1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1), 4, 4)
A <- matrix(c(1,1,0,1,1,0,0,0,0), 3, 3)