Обобщенные матрицы (для решения системы линейных уравнений) в R

Мне нужно решить систему линейных уравнений в 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, как я указал выше.

Кто-нибудь может указать мне правильное направление, как я могу сделать матрицу коэффициентов, но таким образом, что программа может быть использована для решения других систем?

Любая помощь будет с благодарностью получена

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
Другие вопросы по тегам