mat2sum {lazy.symbolic}R Documentation

Express the i-j element of an Matrix Expression using Summation Operators

Description

Express the i-j element of an Matrix Expression using Summation Operators

Usage

mat2sum(
  exp,
  row = "i",
  col = "j",
  root = "s",
  sublist = NA,
  simple = 1,
  expand = 1,
  print = 0,
  debug = 0
)

Arguments

exp

An full symbplic matrix expression

row

row subscript name

col

column subscript name

root

root of the intermediate subscripts

sublist

a character vector containing the intermediate subscript names

simple

= 0 to use full spec: subscript, from , to

expand

= 0 not to expand (A+B) or (A*B) etc.

print

= 1 to print the result

debug

= 1 to print the intermediate result

Details

The summation of an expression over subscript k is expressed as
s( exp, {k} )
or
s( exp, {k, from, to} )

The lowercase object is treated as a column vector. (See examples below.)

When row="i" and col="j":

 mat2sum( "A %*% B" ) -> s(A[i,s1]*B[s1,j], {s1})
 mat2sum( "A %*% B", root="z" ) -> s(A[ij,z1]*B[z1,j], {z1})
 mat2sum( "A %*% B", simple=0 ) -> s(A[i,s1]*B[s1,j], {s1,1,ncol(A)})
 mat2sum( "t(A) %*% B" ) -> s(A[s1,i]*B[s1,j], {s1})
 mat2sum( "A %*% t(B)" ) -> s(A[i,s1]*B[j,s1], {s1})
 mat2sum( "A %*%Diag(B)%*%C" ) -> s(A[i,s1]*B[s1,s1]*C[s1,j],{s1})
 mat2sum( "A %*% b" ) -> s(A[i,s1]*b[s1],{s1})
 mat2sum( "t(a) %*% B" ) -> s(a[s1]*B[s1,j],{s1})
 


Identity matrix, I, and vec function are not recognized.

Diag or diag function will be recognized.

Use parentheses to mark Hadamar and Kronecker products.

The resulting summation expression can be expanded and evaluated by sumEval function. (lazy.symbolic2 package is required.)

Examples

mat2sum( "A %*% B" )
mat2sum( "A %*% B", root="z" )
mat2sum( "A %*% B", simple=0 )
mat2sum( "t(A) %*% B" )
mat2sum( "A %*% t(B)" )
mat2sum( "A %*%Diag(B)%*%C" )
mat2sum( "A %*% b" )
mat2sum( "t(a) %*% B" )
mat2sum( "a %*% t(b)" )
mat2sum( "A%*%(B+C)" )
mat2sum( "A%*%(B+C)", expand=0 )

exp="t(A)%*%t(B)%*%C - D%*%t(E)"
mat2sum( exp )
mat2sum( exp, root="k" )
mat2sum( exp, sublist=letters[11:20] )
exp="A%*%diag(B)%*%C - diag(D)%*%E%*%diag(F)%*%G + diag(H)"
mat2sum( exp )


sexp0=mat2sum( "A%*%(B+C)", expand=0 )
sexp=mat2sum( "A%*%(B+C)" )
sexpe=Expand(c(sexp0,sexp))
Print(sexp0,sexp,sexpe)


[Package lazy.symbolic version 0.1.4 ]