【问题标题】:Symbolic matrix problem in R using rSymphR中使用rSymph的符号矩阵问题
【发布时间】:2021-08-30 06:00:02
【问题描述】:

我需要在 R 控制台中使用 rSympy 执行符号矩阵乘法 Ry.Ry。

library(rSymPy)
Ry = matrix(c("c","-s","s","c"),2,2, byrow=1); Ry
########## I convert matrix in R to Python's format
# from https://stackoverflow.com/questions/39820161/handling-symbolic-matrices-in-r-as-in-matlab
# written by jav

mat2py <- function(x){
  str = lapply(1:nrow(x), function(i) 
paste0(x[i,], collapse = ", "))
  str = paste0("Matrix([", paste0("[", 
unlist(str), "]", collapse = ", "), "])")
  return (str)
}
mat2py(Ry)
cat(sympy(mat2py(Ry)), "\n")    

得到如下错误信息:

.jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, : Traceback (最近一次调用最后一次): File "", line 1、在NameError: name 'c' is not defined

【问题讨论】:

    标签: python r matrix-multiplication symbolic-math


    【解决方案1】:

    仍然收到错误消息。当我执行 cat(sympy("Ry*Ry"), "\n")

    .jcall("RJavaTools", "Z", "hasField", .jcast(x, "java/lang/Object"), 中的错误: java.lang.NullPointerException ####################下面是代码#############

    library(rSymPy)
    str1="c"
    str2="-s"
    str3="s"
    str4="c"
    str(str1)
    P=matrix(c(str1, str2, str3, str4),2,2, byrow=1); P
    
    Ry<-matrix(nrow=2, ncol=2)
    for (i in 1:2){
    for (j in 1:2) {
    Ry[i,j] = paste0(P[i,j]) # Declare variable in matrix 
    first
       }
     }
    Ry
    
    mat2py <- function(x){
    str = lapply(1:nrow(x), function(i) paste0(x[i,], 
    collapse = ", "))
    str = paste0("Matrix([", paste0("[", unlist(str), "]", 
    collapse = ", "), "])")
    return (str)
    }
    
     mat2py(Ry)
     cat(sympy(mat2py(Ry)), "\n")
     cat(sympy("Ry*Ry"), "\n")
    

    【讨论】:

      【解决方案2】:

      遵循 rSymPy 的文档 - 您是否已经尝试使用此代码? 我不熟悉 rSymPy 包,但我认为有必要将变量 c-ss 声明为 SymPy 变量。

      library(rSymPy)
      # create a SymPy variable called c
      sympy("var('c')")
      # create a SymPy variable called -s
      sympy("var('-s')")
      # create a SymPy variable called s
      sympy("var('s')")
      
      # Matrices are stored row by row (unlike R matrices)
      cat(sympy("Ry = Matrix([[c,-s], [s,c]])"), "\n")
      cat(sympy("Ry*Ry"), "\n")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多