The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Matrix and vector Sym objects

Mikkel Meyer Andersen and Søren Højsgaard

2023-01-12

library(Ryacas0)

Matrices

Define a character matrix (covariance matrix from a certain \(AR(1)\)):

N <- 3
L1 <- diag(1, 1 + N)
L1[cbind(1+(1:N), 1:N)] <- "-alpha"
L1s <- as.Sym(L1)
L1s
## Yacas matrix:
##      [,1]   [,2]   [,3]   [,4]
## [1,] 1      0      0      0   
## [2,] -alpha 1      0      0   
## [3,] 0      -alpha 1      0   
## [4,] 0      0      -alpha 1

Now, this can be converted to a Sym object:

L1s <- as.Sym(L1)
L1s
## Yacas matrix:
##      [,1]   [,2]   [,3]   [,4]
## [1,] 1      0      0      0   
## [2,] -alpha 1      0      0   
## [3,] 0      -alpha 1      0   
## [4,] 0      0      -alpha 1

Operations can be performed:

L1s + 4
## Yacas matrix:
##      [,1]      [,2]      [,3]      [,4]
## [1,] 5         4         4         4   
## [2,] 4 - alpha 5         4         4   
## [3,] 4         4 - alpha 5         4   
## [4,] 4         4         4 - alpha 5
tmp <- L1s^4
tmp
## Yacas matrix:
##      [,1]                               [,2]                       [,3]      
## [1,] 1                                  0                          0         
## [2,] -4 * alpha                         1                          0         
## [3,] 3 * alpha^2 - -3 * alpha^2         -4 * alpha                 1         
## [4,] -(alpha^3 + alpha * (3 * alpha^2)) 3 * alpha^2 - -3 * alpha^2 -4 * alpha
##      [,4]
## [1,] 0   
## [2,] 0   
## [3,] 0   
## [4,] 1
Simplify(tmp)
## Yacas matrix:
##      [,1]         [,2]        [,3]       [,4]
## [1,] 1            0           0          0   
## [2,] -4 * alpha   1           0          0   
## [3,] 6 * alpha^2  -4 * alpha  1          0   
## [4,] -4 * alpha^3 6 * alpha^2 -4 * alpha 1

Or the concentration matrix \(K=L L'\) can be found:

K1s <- Simplify(L1s * Transpose(L1s))
K1s
## Yacas matrix:
##      [,1]   [,2]        [,3]        [,4]       
## [1,] 1      -alpha      0           0          
## [2,] -alpha alpha^2 + 1 -alpha      0          
## [3,] 0      -alpha      alpha^2 + 1 -alpha     
## [4,] 0      0           -alpha      alpha^2 + 1

This can be converted to \(\LaTeX\):

TeXForm(K1s)
## [1] "\\left( \\begin{array}{cccc} 1 &  - \\alpha  & 0 & 0 \\\\  - \\alpha  & \\alpha  ^{2} + 1 &  - \\alpha  & 0 \\\\ 0 &  - \\alpha  & \\alpha  ^{2} + 1 &  - \\alpha  \\\\ 0 & 0 &  - \\alpha  & \\alpha  ^{2} + 1 \\end{array} \\right)"

Which look like this:

cat("\\[ K_1 = ", TeXForm(K1s), " \\]", sep = "")

\[ K_1 = \left( \begin{array}{cccc} 1 & - \alpha & 0 & 0 \\ - \alpha & \alpha ^{2} + 1 & - \alpha & 0 \\ 0 & - \alpha & \alpha ^{2} + 1 & - \alpha \\ 0 & 0 & - \alpha & \alpha ^{2} + 1 \end{array} \right) \]

Vectors

Similar can be done for vectors:

x <- paste0("x", 1:2)
xs <- as.Sym(x)
xs
## Yacas vector:
## [1] x1 x2

And matrix-vector multiplication (or matrix-matrix multiplication):

A <- matrix(paste0(paste0("a", 1:2), rep(1:2, each = 2)), 2, 2)
As <- as.Sym(A)
As
## Yacas matrix:
##      [,1] [,2]
## [1,] a11  a12 
## [2,] a21  a22
As*xs
## Yacas vector:
## [1] a11 * x1 + a12 * x2 a21 * x1 + a22 * x2
As*As
## Yacas matrix:
##      [,1]                  [,2]                 
## [1,] a11^2 + a12 * a21     a11 * a12 + a12 * a22
## [2,] a21 * a11 + a22 * a21 a21 * a12 + a22^2

Eval

xs
## Yacas vector:
## [1] x1 x2
Eval(xs, list(x1 = 2, x2 = 3))
## [1] 2 3
As
## Yacas matrix:
##      [,1] [,2]
## [1,] a11  a12 
## [2,] a21  a22
Eval(As, list(a11 = 11, a12 = 12, a21 = 21, a22 = 22))
##      [,1] [,2]
## [1,]   11   12
## [2,]   21   22

Disabling functionality

The functionality can be disabled as follows:

Ryacas_options("module_matvec_enabled")
## [1] TRUE
As
## Yacas matrix:
##      [,1] [,2]
## [1,] a11  a12 
## [2,] a21  a22
Ryacas_options(module_matvec_enabled = FALSE)
As
## yacas_expression(list(list(a11, a12), list(a21, a22)))

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.