【问题标题】:Generalised Matrices (to solve system of linear equations) in RR中的广义矩阵(求解线性方程组)
【发布时间】:2013-02-06 12:01:20
【问题描述】:

我需要在 R 中求解一个线性方程组——我已经能够做到这一点。请看下面的代码:

A<-matrix(c(1:5,2,1,2:4,3,2,1:3,4:2,1,2,5:1),nrow=5) #Creates a matrix of the coefficients
A #Displays the matrix of coefficients (below)

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    2    1    2    3    4
[3,]    3    2    1    2    3
[4,]    4    3    2    1    2
[5,]    5    4    3    2    1

kv<-matrix(c(7,-1,-3,5,17),nrow=5) #Creates a column vector of the known values

kv #Displays the column vector

     [,1]
[1,]    7
[2,]   -1
[3,]   -3
[4,]    5
[5,]   17

solve(A,kv) #Solves the continuous equation

     [,1]
[1,]   -2
[2,]    3
[3,]    5
[4,]    2
[5,]   -4

问题是我现在需要概括我的解决方案,它可以用于具有相同结构但更大尺寸的方程组 - 无需像上面那样键入矩阵 A 的所有值。

有没有人能指出我如何做系数矩阵的正确方向,但该程序可用于解决其他系统?

任何帮助将不胜感激 谢谢

【问题讨论】:

  • Ummm...首先你的矩阵系数的来源是什么?例如,是否有人向您发送了一堆文本字符串,例如 k*y1 = a*x1 + b*x2 + c*x3,而您想要提取值 "k,a,b,c" ?

标签: r matrix system


【解决方案1】:

如果我理解正确:

bandmat <- function(n){
require(Matrix)
as.matrix(bandSparse(n,n,-(n-1):(n-1),diag=lapply(c(n:1,2:n),function(i) rep(i,n))))
}

bandmat(4)

     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    2    1    2    3
[3,]    3    2    1    2
[4,]    4    3    2    1

可能有更方便的方法来构建它。

编辑: 以下是您的使用方法。

#create some vector
set.seed(42)
kv <- sample(-10:10,10)
#[1]  9  8 -5  4  0 -2  1 -9  5  2

#solve equation system
solve(bandmat(length(kv)),kv)
#[1]  0.0 -6.0 11.0 -6.5  1.0  2.5 -6.5 12.0 -8.5  2.0

【讨论】:

  • 您好,感谢您的回复。这就是我所追求的,但它需要被概括,所以我需要它来适应任何大小的矩阵,而不是指定 bandmat (4) - 这可能吗?
  • @TanyaKiddle 我不明白。您可以计算具有这种带结构的任意大小的矩阵。试试bandmat(10)
  • 非常感谢;对不起,我误解了。我现在需要求解连续方程。我有代码来显示列向量 kvsolve(A,kv) 这现在不起作用 - 你能建议我如何做相当于 >solve(A,kv) 合并你的矩阵功能?谢谢
  • @TanyaKiddle 我还是不明白这个问题,但在我的答案中添加了一个使用该函数的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
相关资源
最近更新 更多