符号矩阵乘法误差 (Ryacas)
Symbolic matrix mutiplication error (Ryacas)
我想用 Ryacas
使用将基 R
矩阵转换为 Ryacas
格式的函数来执行符号矩阵运算。该函数的结果似乎符合 Ryacas
格式。但是当我尝试乘以矩阵时,错误
# Error in aa %*% aa : requires numeric/complex matrix/vector arguments
投掷。下面的代码是展示这种情况的最小示例。
有什么建议吗?
library(Ryacas)
conv.mat <- function(x) {
conv <- lapply(1:nrow(x), function(i) paste0(x[i, ], collapse = ", "))
conv <- paste0("List(", paste0("List(", unlist(conv), ")", collapse = ", "), ")")
noquote(conv)
}
# Writing a matrix manually for Ryacas format
a <- List(List(1, 2), List(3, 7))
a * a
# expression(list(list(7, 16), list(24, 55)))
# Writing a matrix in R and convert it to Ryacas format by the function conv.mat
aa <- matrix(c(1, 2, 3, 7), 2, byrow = TRUE)
aa <- conv.mat(aa)
# [1] List(List(1, 2), List(3, 7))
aa * aa
# Error in aa * aa : non-numeric argument to binary operator
首先,乘 Ryacas
矩阵需要 aa * aa
而不是 aa %*% aa
。但这对你的情况没有帮助,因为 conv.mat
没有给出我们所需要的(表达式)。
我们可以使用,例如,
conv.mat <- function(x)
do.call(List, lapply(1:nrow(x), function(r) do.call(List, as.list(x[r, ]))))
然后
M <- matrix(c(1, 2, 3, 7), 2, byrow = TRUE)
M %*% M
# [,1] [,2]
# [1,] 7 16
# [2,] 24 55
M <- conv.mat(M)
M * M
# expression(list(list(7, 16), list(24, 55)))
我想用 Ryacas
使用将基 R
矩阵转换为 Ryacas
格式的函数来执行符号矩阵运算。该函数的结果似乎符合 Ryacas
格式。但是当我尝试乘以矩阵时,错误
# Error in aa %*% aa : requires numeric/complex matrix/vector arguments
投掷。下面的代码是展示这种情况的最小示例。
有什么建议吗?
library(Ryacas)
conv.mat <- function(x) {
conv <- lapply(1:nrow(x), function(i) paste0(x[i, ], collapse = ", "))
conv <- paste0("List(", paste0("List(", unlist(conv), ")", collapse = ", "), ")")
noquote(conv)
}
# Writing a matrix manually for Ryacas format
a <- List(List(1, 2), List(3, 7))
a * a
# expression(list(list(7, 16), list(24, 55)))
# Writing a matrix in R and convert it to Ryacas format by the function conv.mat
aa <- matrix(c(1, 2, 3, 7), 2, byrow = TRUE)
aa <- conv.mat(aa)
# [1] List(List(1, 2), List(3, 7))
aa * aa
# Error in aa * aa : non-numeric argument to binary operator
首先,乘 Ryacas
矩阵需要 aa * aa
而不是 aa %*% aa
。但这对你的情况没有帮助,因为 conv.mat
没有给出我们所需要的(表达式)。
我们可以使用,例如,
conv.mat <- function(x)
do.call(List, lapply(1:nrow(x), function(r) do.call(List, as.list(x[r, ]))))
然后
M <- matrix(c(1, 2, 3, 7), 2, byrow = TRUE)
M %*% M
# [,1] [,2]
# [1,] 7 16
# [2,] 24 55
M <- conv.mat(M)
M * M
# expression(list(list(7, 16), list(24, 55)))