1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > r语言中矩阵QR分解_R语言常用的矩阵操作

r语言中矩阵QR分解_R语言常用的矩阵操作

时间:2023-09-27 00:19:26

相关推荐

r语言中矩阵QR分解_R语言常用的矩阵操作

R语言是一门非常方便的数据分析语言,它内置了许多处理矩阵的方法。下面列出一些常用的矩阵操作方法示例。

矩阵的生成

> mat <- matrix(1:16, ncol = 4, nrow = 4, byrow=TRUE, dimnames=list(c(paste("x", 1:4, sep = ".")), c(paste("y", 1:4, sep = "."))))> maty.1 y.2 y.3 y.4x.1 1 2 3 4x.2 5 6 7 8x.3 9 10 11 12x.4 13 14 15 16# 矩阵的行列名还可以使用rownames或者colnames进行修改> rownames(mat) <- paste("row", 1:4, sep=".")> colnames(mat) <- paste("col", 1:4, sep=".")> matcol.1 col.2 col.3 col.4row.11234row.25678row.39 10 11 12row.4 13 14 15 16

矩阵的维度

# 表示这是一个4行4列的矩阵> dim(mat)[1] 4 4

矩阵的加减

> mat.2 <- matrix(51:66, nrow = 4)> mat.2[,1] [,2] [,3] [,4][1,] 51 55 59 63[2,] 52 56 60 64[3,] 53 57 61 65[4,] 54 58 62 66> mat.plus <- mat + mat.2> mat.pluscol.1 col.2 col.3 col.4row.1 52 57 62 67row.2 57 62 67 72row.3 62 67 72 77row.4 67 72 77 82> mat.minus <- mat - mat.2> mat.minuscol.1 col.2 col.3 col.4row.1 -50 -53 -56 -59row.2 -47 -50 -53 -56row.3 -44 -47 -50 -53row.4 -41 -44 -47 -50

矩阵的转置

> t(mat)row.1 row.2 row.3 row.4col.1159 13col.226 10 14col.337 11 15col.448 12 16

矩阵相乘

# 若A矩阵的维度为m*n,那么B矩阵的维度应为n*p# 生成的结果矩阵的维度为m*p> mat.3 <- matrix(1:8, nrow = 4)> mat.3[,1] [,2][1,] 1 5[2,] 2 6[3,] 3 7[4,] 4 8> mat.mcl <- mat %*% mat.3> mat.mcl[,1] [,2]row.1 30 70row.2 70 174row.3 110 278row.4 150 382

返回矩阵的对角

> diag(mat)[1] 1 6 11 16

生成上三角或下三角矩阵

# 生成上三角矩阵,注意这里的diag参数如果为TRUE,# 表示把矩阵对角也包括进来。设置为FALSE就是不包括。> mat[!upper.tri(mat, diag = TRUE)] <- 0> matcol.1 col.2 col.3 col.4row.11234row.20678row.300 11 12row.4000 16# 生成下三角矩阵> mat[!lower.tri(mat, diag = TRUE)] <- 0> matcol.1 col.2 col.3 col.4row.11000row.25600row.39 10 110row.4 13 14 15 16

求解逆矩阵

> solve(mat)row.1 row.2 row.3 row.4col.1 1.00000000 6.832142e-17 0.00000000 0.0000col.2 -0.83333333 1.666667e-01 0.00000000 0.0000col.3 -0.06060606 -1.515152e-01 0.09090909 0.0000col.4 -0.02651515 -3.787879e-03 -0.08522727 0.0625

求行列式的值

> det(mat)[1] 4.733165e-30

矩阵的特征值和特征向量

> mat.e <- eigen(mat)> mat.eeigen() decomposition$values[1] 3.620937e+01 -2.209373e+00 -3.188632e-15 -1.348401e-16$vectors[,1] [,2] [,3] [,4][1,] -0.1511543 0.7270500 0.5037002 -0.06456091[2,] -0.3492373 0.2832088 -0.8319577 -0.31932112[3,] -0.5473203 -0.1606324 0.1528148 0.83232496[4,] -0.7454033 -0.6044736 0.1754427 -0.44844294# 可以使用mat.e$values和mat.e$vectors取出结果

奇异值分解

> svd(mat)$d[1] 3.862266e+01 2.071323e+00 7.609772e-16 3.860638e-16$u[,1] [,2] [,3] [,4][1,] -0.1347221 -0.82574206 0.3812474 -0.39325613[2,] -0.3407577 -0.42881720 -0.2152141 0.80850658[3,] -0.5467933 -0.03189234 -0.7133141 -0.43724476[4,] -0.7528288 0.36503251 0.5472808 0.02199431$v[,1] [,2] [,3] [,4][1,] -0.4284124 0.7186535 0.2825595 -0.4692122[2,] -0.4743725 0.2738078 -0.7264762 0.4150089[3,] -0.5203326 -0.1710379 0.6052738 0.5776189[4,] -0.5662928 -0.6158835 -0.1613571 -0.5234156

QR分解

> qr(mat)$qrcol.1 col.2 col.3 col.4row.1 -16.6132477 -18.2986497 -1.998405e+01 -2.166945e+01row.2 0.3009646 -1.0767638 -2.153528e+00 -3.230291e+00row.3 0.5417363 -0.3456506 1.350645e-15 3.139336e-15row.4 0.7825080 -0.9120325 1.643990e-01 7.300782e-17$rank[1] 2$qraux[1] 1.060193e+00 1.220731e+00 1.986394e+00 7.300782e-17$pivot[1] 1 2 3 4attr(,"class")[1] "qr"> qr.Q(qr(mat))[,1] [,2] [,3] [,4][1,] -0.06019293 -0.83449195 -0.3906679 -0.3838992[2,] -0.30096463 -0.45762462 0.2347489 0.8030523[3,] -0.54173634 -0.08075729 0.7025058 -0.4544068[4,] -0.78250805 0.29611005 -0.5465868 0.0352538> qr.R(qr(mat))col.1col.2 col.3 col.4row.1 -16.61325 -18.298650 -1.998405e+01 -2.166945e+01row.2 0.00000 -1.076764 -2.153528e+00 -3.230291e+00row.3 0.00000 0.000000 1.350645e-15 3.139336e-15row.4 0.00000 0.000000 0.000000e+00 7.300782e-17

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。