我会这样求解线性方程组:
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。
矩阵的值是随机的,并且可以更改
答案 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}中的任意两个来解决问题,则可以找到所有其他五个值。