gradma {lazy.symbolic}R Documentation

numeric value of the analytic first derivative of a function

Description

numeric value of the analytic first derivative of a function

Usage

gradma(
  expr,
  ...,
  values = NULL,
  dexpr = NULL,
  sym = 0,
  ntogoback = 1,
  print = 0,
  debug = 0
)

Arguments

expr

a function to be differentiated

...

assignment of numeric values of the form name=value

values

assignment of numeric values as string The differentiating variable must be the first of ... or values.

dexpr

analytic first derivative of expr w.r.t X

sym

= 1 if X is symmetric

ntogoback

istance to the environment where the matrices are defined

print

= 1 to print the result

debug

= 1 to print internediate result

Examples

## Not run: 
# functions to be differentiated
func1="tr(A%*%X)"

# numerical values of the variables
Xn=demomat(3,2)
An=demomat(2,3)

Gradmn1 <- gradmn( func1, X=Xn, A=An, print=1, debug=0 )
Gradma1 <- gradma( func1, X=Xn, A=An, print=1, debug=0 )
printm(Gradmn1,Gradma1, fmt="9.5")
printm(max(abs(Gradmn1-Gradma1)))

# symmetric X
Xn=demomat(3,3, shape="sym")
An=demomat(3,3)
Gradmn1s <- gradmn( func1, X=Xn, A=An, sym=1, print=1, debug=0 )
Gradma1s <- gradma( func1, X=Xn, A=An, sym=1, print=1, debug=0 )
printm(Gradmn1s,Gradma1s, fmt="9.5")
printm(max(abs(Gradmn1s-Gradma1s)))


# functions to be differentiated
func5="tr(A%*%t(X)%*%B%*%X%*%C)"

# analytic derivative w.r.t. X
dexpr5="B%*%X%*%C%*%A+t(B)%*%X%*%t(A)%*%t(C)"

# numerical values of the variables
set.seed(1701)
Xn=matrix(rnorm(3*2),3,2)
An=matrix(rnorm(3*2),3,2)
Bn=matrix(rnorm(3*3),3,3)
Cn=matrix(rnorm(3*2),2,3)

Gradmn5 <- gradmn( func5, X=Xn, A=An, B=Bn, C=Cn, print=1, debug=0 )
Gradma5 <- gradma( func5, dexpr=dexpr5, X=Xn, A=An, B=Bn, C=Cn
                   , print=1, debug=0 )
printm(Gradmn5,Gradma5, fmt="9.5")
printm(max(abs(Gradmn5-Gradma5)))

# symmetric X
# numerical values of the variables
set.seed(1701)
Xn=matrix(rnorm(3*3),3,3)
Xn=Xn+t(Xn)
An=matrix(rnorm(3*3),3,3)
Bn=matrix(rnorm(3*3),3,3)
Cn=matrix(rnorm(3*3),3,3)

Gradmn5s <- gradmn( func5, X=Xn, A=An, B=Bn, C=Cn, sym=1, print=1, debug=0 )
Gradma5s <- gradma( func5, dexpr=dexpr5, X=Xn, A=An, B=Bn, C=Cn, sym=1
                   , print=1, debug=0 )
printm(Gradmn5s,Gradma5s, fmt="9.5")
printm(max(abs(Gradmn5s-Gradma5s)))

## End(Not run)



[Package lazy.symbolic version 1.0.0.20250803 ]