r - R编程中的矩阵
问题描述
最近学习 R 编程,这是一个我想不通的练习。
该程序要求用户输入 2 个 2x2 数学矩阵的 8 个值。换句话说,一个 2x2 矩阵中有 4 个值,第二个矩阵有另外 4 个值。然后程序应该有用户,如果他们想加、减、乘或除 2 个矩阵。打印记录。
请参阅附件以获取示例输出。
解决方案
我是 R 编程的大佬,我的英语说得不太好,但我会尽力向你解释。
首先,您可以像 Amar 一样创建矩阵:
m1 <- matrix( rep(2,4) , ncol = 2) #rep(x,n) : repeat x n times
m2 <- matrix( c(2,3,5,6) , nrow = 2 , ncol = 2) #Personaly I prefer to precise the number of rows and columns
> m1
[,1] [,2]
[1,] 2 2
[2,] 2 2
> m2
[,1] [,2]
[1,] 2 5
[2,] 3 6
操作
您可以在矩阵上使用“传统”操作:+ - * / 但是您必须知道,考虑到 m3 = m1*m2 ,操作被逐个应用于矩阵的元素;这意味着 m3[i,j] = m1[i,j]*m2[i,j]
m3 <- m1*m2
[,1] [,2]
[1,] 4 10
[2,] 6 12
这显然不是数学中的矩阵乘法
注意:经典加法(+)是正确的
对于矩阵乘法,您必须使用操作 %*%
> m4 <- m1%*%m2
> m4
[,1] [,2]
[1,] 10 22
[2,] 10 22
Fo除法不使用操作 %/% 因为它不是除法而是模数。并且它返回一个一个应用于矩阵元素的模数。m5 = m1%/%m2 表示 m5[i,j]=m1[i,j]%/%m2[i,j]
> m5 <- m1%/%m2
> m5
[,1] [,2]
[1,] 1 0
[2,] 0 0
请注意,在数学中,除法不适用于矩阵。如果你有方程 m6*m2 = m1 那么 m6 = m1*inverse(m2)
要反转矩阵,您必须安装包 matlib :
install.packages("matlib")
> m6 <- m1*inv(m2)
> m6
[,1] [,2]
[1,] -4 3.333333
[2,] 2 -1.333333
重要的 !要逆矩阵,行列式应该不同于 0 :
> det(m2)
[1] -3
> inv(m2)
[,1] [,2]
[1,] -2 1.6666667
[2,] 1 -0.6666667
> det(m1)
[1] 0
> inv(m1)
Error in Inverse(X, tol = sqrt(.Machine$double.eps), ...) :
X is numerically singular
推荐阅读
- sql - SQL Server DATEDIFF 对 YEAR 差值进行四舍五入。如何四舍五入?
- javascript - Javascript 对象,返回包含嵌套数组中的值的更新对象
- r - grDevices::dev.new() 第一次不起作用
- vue.js - 带有 imagemin webpack 插件的 Vue cli 3
- sql - 大于或小于一个数量
- ms-access - 通过访问表单上的按钮将费用记录复制到发票详细信息
- java - Spring Integration 从 REST 服务获取分页结果
- javascript - 查找最大匹配计数
- r - 使用 ggplot scale_x_yearmon 缺少 yearmon 标签
- sql - SSIS 中的 Google Analytics/Adwords 数据?