首页 >> 大全

R语言矩阵的相关计算

2023-08-24 大全 28 作者:考证青年

R语言矩阵的相关计算 求矩阵线性方程组求解伴随矩阵 使用 函数

矩阵的转置

例:求下列矩阵的转置

b = [ 1 5 6 2 4 2 5 8 9 ] b=\left[ \begin{} 1& 5& 6\\ 2& 4& 2\\ 5& 8& 9\\ \end{} \right] b=⎣⎡​125​548​629​⎦⎤​

这里我们用到t函数

a <-  c(1,5,6,4,8,2,5,8,9) 
b <- matrix(a,nc=3,byrow=T);b
t(b)

输出结果:

矩阵的乘法

使用a%*%b表示矩阵ab的乘积,这里介绍第二种方法

(X,Y)计算 X T Y X^TY XTY

计算 b T b b^Tb bTb

crossprod(b,b)

计算 b b T bb^T bbT

bt <- t(b);bt#首先计算出转置
crossprod(bt,bt)

计算 b ∗ b b*b b∗b

bt <- t(b);bt
crossprod(bt,b)

特征值和特征向量

用到eigen函数

eigen(b)

行列式的值

用到det函数

det(b)

求逆矩阵 方法一:

solve(A,B)可以求解 A X = B AX=B AX=B ,当只有A时,即solve(A)表示求 A X = E AX=E AX=E,即求A的逆矩阵

求 A = [ 1 1 1 2 − 1 − 3 4 1 9 ] 的逆矩阵 \text{求}A=\left[ \begin{} 1& 1& 1\\ 2& -1& -3\\ 4& 1& 9\\ \end{} \right] \text{的逆矩阵} 求A=⎣⎡​124​1−11​1−39​⎦⎤​的逆矩阵

A<-  c(1,1,1,2,-1,-3,4,1,9) 
A <- matrix(ab,nc=3,byrow=T)
solve(A)

方法二:

使用MASS包里的ginv函数

library(MASS)
ginv(A)

求矩阵线性方程组

solve(A,B)可以求解 A X = B AX=B AX=B ,当只有A时,即solve(A)表示求 A X = E AX=E AX=E,即求A的逆矩阵

x 1 + x 2 + x 3 = 1 2 x 1 − x 2 − 3 x 3 = 0 4 x 1 + x 2 + 9 x 3 = 0 x_1+x_2+x_3=1 \\ 2x_1-x_2-3x_3=0 \\ 4x_1+x_2+9x_3=0 x1​+x2​+x3​=12x1​−x2​−3x3​=04x1​+x2​+9x3​=0

这个系数矩阵就是上面的A

A<-  c(1,1,1,2,-1,-3,4,1,9) 
A <- matrix(A,nc=3,byrow=T)
B <- c(1,0,0) 
B<- t(B)
solve(A,B)

即 x 1 = 0.2 , x 2 = 1 , x 3 = − 0.2 x_1=0.2,x_2=1,x_3=-0.2 x1​=0.2,x2​=1,x3​=−0.2

求解伴随矩阵

求 a = [ 1 1 1 2 − 1 − 3 4 1 9 ] 的伴随矩阵 \text{求}a=\left[ \begin{} 1& 1& 1\\ 2& -1& -3\\ 4& 1& 9\\ \end{} \right] \text{的伴随矩阵} 求a=⎣⎡​124​1−11​1−39​⎦⎤​的伴随矩阵

a<-  c(1,1,1,2,-1,-3,4,1,9) 
a <- matrix(A,nc=3,byrow=T)

这里我没有找到求解伴随矩阵的函数,如果有知道的,请在评论区告知,谢谢

使用for循环

根据伴随矩阵的定义,我们可以简单的写个for循环语句来求解

A ∗ = [ A 11 A 21 A 31 A 12 A 22 A 32 A 13 A 23 A 33 ] = ( A i j ) T A^{\ast}=\left[ \begin{} A_{11}& A_{21}& A_{31}\\ A_{12}& A_{22}& A_{32}\\ A_{13}& A_{23}& A_{33}\\ \end{} \right] =\left( A_{ij} \right) ^T A∗=⎣⎡​A11​A12​A13​​A21​A22​A23​​A31​A32​A33​​⎦⎤​=(Aij​)T

D<- matrix(0,nc=3,nr=3);D#首先创建一个3×30矩阵
for ( i in 1:3){for(j in 1:3)D[i,j] <- (-1)^(i+j)*det(a[-j,-i])
}
D

验证

若 A ∗ A^{\ast} A∗是矩阵A的伴随矩阵,根据伴随矩阵的性质有

A A ∗ = A ∗ A = ∣ A ∣ E AA^{\ast}=A^{\ast}A=\left| A \right|E AA∗=A∗A=∣A∣E

首先用diag函数创建一个3阶单位阵

C <- diag(3);C

首先计算 a ∗ D 和 D ∗ a 即 验 证 A A ∗ = A ∗ A a*D和D*a即验证AA^{\ast}=A^{\ast}A a∗D和D∗a即验证AA∗=A∗A

a%*%D
D%*%a

可以看出两个结果是一致的,但是当我使用逻辑语言时,出来的却是两个不相等,每一个对应的都是false

a%*%D==D%*%a

这是因为,因为什么呢,我也说不清楚

不过当我们对每一个数都保留两位小数的时候,再次判断,这时候就正确了

round(a%*%D,2)==round(D%*%a,2)

在验证 A ∗ A = ∣ A ∣ E A^{\ast}A=\left| A \right|E A∗A=∣A∣E

m <- det(a)*C
round(a%*%D,2)==round(m,2)

同样对结果保留两位小数,这就是正确的了

验证成功

使用 函数

这里自己编写了一个函数,复制下面代码运行一下即可使用此函数

adjoint <- function(x){n <- sqrt(length(x))y <- matrix(0,nc=n,nr=n)for ( i in 1:n)for ( j in 1:n)y[i,j] <- (-1)^(i+j)*det(x[-j,-i])y
}

如果想求A的伴随矩阵,只需要(A)即可

例:

adjoint(a)

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了