【问题标题】:Square root of a SymPy matrix in R using the Caracas package使用 Caracas 包的 R 中 SymPy 矩阵的平方根
【发布时间】:2021-08-18 00:00:37
【问题描述】:

语言: R; 使用的包: caracas

假设我有一个复杂的符号矩阵 M,我想找到矩阵的平方根。即找到满足M = A %*% A 的A。对于我的问题,M 定义如下:

library(caracas)
# Define M
s_b <- matrix_(c(1, 0, 0, 1), 2, 2)
X <- matrix_(c(2, 1, 1, 1), 2, 2)
o <- symbol('o')
M <- inv(1/o * t(X) %*% X + inv(s_b))

我尝试使用 caracas 包中的 eigenvaleigenvec 函数来生成特征值和特征向量列表,但由于它们很复杂,我无法弄清楚如何将这些列表转换为矩阵SymPy 对象列表。

this post 中的解决方案没有帮助,因为 R 不是取整个矩阵的平方根,而是取条目的平方根。

【问题讨论】:

    标签: r sympy linear-algebra


    【解决方案1】:

    我已经找到了解决方案。在这个解决方案中,我使用对角化方法。

    要将任何符号值分配给符号矩阵,必须先将其转换为字符。 IE。必须使用as.character 函数。

    以下代码在R 中生成P,D,这样对于示例符号矩阵MM=P %*% D %*% inv(P)

    图书馆(加拉加斯)

    a=symbol('a')

    m=matrix_(c("1", "a", "a", "1"), 2)

    eigenVec_V_b

    D

    for(i in 1:n){ D[i, i]

    P

    for(i in 1:n){ P[,i]

    要测试代码是否正确实现,只需运行P %*% D %*% inv(P),它应该返回与M相同的矩阵

    要获得 M 的平方根,请运行 P %*% sqrt(D) %*% inv(P)。这些条目并未完全简化(即使在应用 simplify 函数之后),因此它们与原始矩阵不匹配,但一旦手动简化,这些值就会显示正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-29
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2011-05-13
      • 1970-01-01
      相关资源
      最近更新 更多