解决线性方程组b = 0 Rstudio

时间:2018-11-16 12:23:14

标签: r equation equation-solving linear-equation

我会这样求解线性方程组:

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 :(得分:0)

好的,必须重新激活我生锈的线性代数知识,您可以使用奇异值分解来实现,如果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)

答案 1 :(得分:0)

更新后的结果显示,您有5个方程式和7个未知数,很明显,解决方案是多维的。
  我担心我没有代码来计算该表面,但是让我嘟嘟响并提供ktsolve包。对于您的{$ x_1,x_2,... x_7 $} [啊鼠,没有乳胶减价]的任何给定输入集,输入一个已知值的集合,ktsolve将运行一个反向求解器(通常{ 1}})寻找未知数。
因此,如果可以选择{X_5,X_6,X_7}中的任意两个来解决问题,则可以找到所有其他五个值。