Решить систему линейных уравнений b = 0 Rstudio - PullRequest
0 голосов
/ 16 ноября 2018

Я бы решил систему линейных уравнений следующим образом:

x_1*3+x_2*4+x_3*5+x_4*6+x_6*2=0
x_1*21+x_2*23+x_3*45+x_4*37*+x_6*0=0
x_1*340+x_2*24+x_3*25+x_4*31+x_6*0=0
x_1*32+x_2*45+x_3*5+x_4*6+x_7*2=0
x_1*9+x_2*11+x_3*13+x_4*49+x_7*0=0
x_1*5+x_2*88+x_3*100+x_4*102+X_7*2=0



     [x_1][x_2][x_3] [x_4]  [,5]
[1,]   3    4     5     6     2
[2,]  21   23    45    37     0
[3,]  340  24    25    31     0
[4,]  32   45     5     6     2
[5,]    9  11    13    49     0
[6,]   5   88   100   102     2

Я использую решение этой системы линейных однородных уравнений с MASS::null(t(M), но проблема в том, что найти x_1 .... x_4, но x_5найти только одно решение, но мне нужны разные три значения, это x_5,1, x_5,2 и x_5,3.значения матрицы являются случайными, и их можно изменить

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

С обновлением, которое показывает, что у вас есть 5 уравнений с 7 неизвестными, становится очевидным, что существует многомерная поверхность решений.
Боюсь, у меня нет кода для расчета этой поверхности, но позвольте мне взять свой рог и предложить пакет ktsolve. Для любого заданного набора входных данных из вашего {$ x_1, x_2, ... x_7 $} [а у крыс нет латексной уценки] введите набор известных значений и ktsolve запустит обратный решатель (обычно BB) найти неизвестных.
Таким образом, если вы можете указать вашей задаче выбранный набор из любых двух {X_5, X_6, X_7}, вы можете найти все пять других значений.

0 голосов
/ 16 ноября 2018

Хорошо, пришлось активировать мои ржавые знания линейной алгебры, вы можете сделать это с помощью разложения по сингулярным значениям, если все элементы диагональной части 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)
...