Last data update: 2014.03.03
R: SemiSmooth Reformulation
SemiSmooth Reformulation
Description
functions of the SemiSmooth Reformulation of the GNEP
Usage
funSSR(z, dimx, dimlam, grobj, arggrobj, constr, argconstr, grconstr, arggrconstr,
compl, argcompl, dimmu, joint, argjoint, grjoint, arggrjoint, echo=FALSE)
jacSSR(z, dimx, dimlam, heobj, argheobj, constr, argconstr, grconstr, arggrconstr,
heconstr, argheconstr, gcompla, gcomplb, argcompl, dimmu, joint, argjoint,
grjoint, arggrjoint, hejoint, arghejoint, echo=FALSE)
Arguments
z
a numeric vector z
containing (x, lambda, mu) values.
dimx
a vector of dimension for x .
dimlam
a vector of dimension for lambda .
grobj
gradient of the objective function, see details.
arggrobj
a list of additional arguments of the objective gradient.
constr
constraint function, see details.
argconstr
a list of additional arguments of the constraint function.
grconstr
gradient of the constraint function, see details.
arggrconstr
a list of additional arguments of the constraint gradient.
compl
the complementarity function with (at least) two arguments: compl(a,b)
.
argcompl
list of possible additional arguments for compl
.
dimmu
a vector of dimension for mu .
joint
joint function, see details.
argjoint
a list of additional arguments of the joint function.
grjoint
gradient of the joint function, see details.
arggrjoint
a list of additional arguments of the joint gradient.
heobj
Hessian of the objective function, see details.
argheobj
a list of additional arguments of the objective Hessian.
heconstr
Hessian of the constraint function, see details.
argheconstr
a list of additional arguments of the constraint Hessian.
gcompla
derivative of the complementarity function w.r.t. the first argument.
gcomplb
derivative of the complementarity function w.r.t. the second argument.
hejoint
Hessian of the joint function, see details.
arghejoint
a list of additional arguments of the joint Hessian.
echo
a logical to show some traces.
Details
Compute the SemiSmooth Reformulation of the GNEP: the Generalized Nash equilibrium problem is defined
by objective functions Obj with player variables x defined in dimx
and
may have player-dependent constraint functions g of dimension dimlam
and/or a common shared joint function h of dimension dimmu
,
where the Lagrange multiplier are lambda and mu , respectively,
see F. Facchinei et al.(2009) where there is no joint function.
Arguments of the Phi function
The arguments which are functions must respect the following features
grobj
The gradient Grad Obj of an objective function Obj (to be minimized) must have 3 arguments for Grad Obj(z, playnum, ideriv) : vector z
, player number, derivative index
, and optionnally additional arguments in arggrobj
.
constr
The constraint function g must have 2 arguments: vector z
, player number,
such that g(z, playnum) <= 0 . Optionnally, g may have additional arguments in argconstr
.
grconstr
The gradient of the constraint function g must have 3 arguments: vector z
, player number, derivative index,
and optionnally additional arguments in arggrconstr
.
compl
It must have two arguments and optionnally additional arguments in argcompl
.
A typical example is the minimum function.
joint
The constraint function h must have 1 argument: vector z
,
such that h(z) <= 0 . Optionnally, h may have additional arguments in argjoint
.
grjoint
The gradient of the constraint function h must have 2 arguments: vector z
, derivative index,
and optionnally additional arguments in arggrjoint
.
Arguments of the Jacobian of Phi
The arguments which are functions must respect the following features
heobj
It must have 4 arguments: vector z
, player number, two derivative indexes and optionnally additional arguments in argheobj
.
heconstr
It must have 4 arguments: vector z
, player number, two derivative indexes and optionnally additional arguments in argheconstr
.
gcompla
,gcomplb
It must have two arguments and optionnally additional arguments in argcompl
.
hejoint
It must have 3 arguments: vector z
, two derivative indexes and optionnally additional arguments in arghejoint
.
See the example below.
Value
A vector for funSSR
or a matrix for jacSSR
.
Author(s)
Christophe Dutang
References
F. Facchinei, A. Fischer and V. Piccialli (2009),
Generalized Nash equilibrium problems and Newton methods ,
Math. Program.
See Also
See also GNE.nseq
.
Examples
# (1) associated objective functions
#
dimx <- c(2, 2, 3)
#Gr_x_j O_i(x)
grfullob <- function(x, i, j)
{
x <- x[1:7]
if(i == 1)
{
grad <- 3*(x - 1:7)^2
}
if(i == 2)
{
grad <- 1:7*(x - 1:7)^(0:6)
}
if(i == 3)
{
s <- x[5]^2 + x[6]^2 + x[7]^2 - 5
grad <- c(1, 0, 1, 0, 4*x[5]*s, 4*x[6]*s, 4*x[7]*s)
}
grad[j]
}
#Gr_x_k Gr_x_j O_i(x)
hefullob <- function(x, i, j, k)
{
x <- x[1:7]
if(i == 1)
{
he <- diag( 6*(x - 1:7) )
}
if(i == 2)
{
he <- diag( c(0, 2, 6, 12, 20, 30, 42)*(x - 1:7)^c(0, 0:5) )
}
if(i == 3)
{
s <- x[5]^2 + x[6]^2 + x[7]^2
he <- rbind(rep(0, 7), rep(0, 7), rep(0, 7), rep(0, 7),
c(0, 0, 0, 0, 4*s+8*x[5]^2, 8*x[5]*x[6], 8*x[5]*x[7]),
c(0, 0, 0, 0, 8*x[5]*x[6], 4*s+8*x[6]^2, 8*x[6]*x[7]),
c(0, 0, 0, 0, 8*x[5]*x[7], 8*x[6]*x[7], 4*s+8*x[7]^2) )
}
he[j,k]
}
# (2) constraint linked functions
#
dimlam <- c(1, 2, 2)
#constraint function g_i(x)
g <- function(x, i)
{
x <- x[1:7]
if(i == 1)
res <- sum( x^(1:7) ) -7
if(i == 2)
res <- c(sum(x) + prod(x) - 14, 20 - sum(x))
if(i == 3)
res <- c(sum(x^2) + 1, 100 - sum(x))
res
}
#Gr_x_j g_i(x)
grfullg <- function(x, i, j)
{
x <- x[1:7]
if(i == 1)
{
grad <- (1:7) * x ^ (0:6)
}
if(i == 2)
{
grad <- 1 + sapply(1:7, function(i) prod(x[-i]))
grad <- cbind(grad, -1)
}
if(i == 3)
{
grad <- cbind(2*x, -1)
}
if(i == 1)
res <- grad[j]
if(i != 1)
res <- grad[j,]
as.numeric(res)
}
#Gr_x_k Gr_x_j g_i(x)
hefullg <- function(x, i, j, k)
{
x <- x[1:7]
if(i == 1)
{
he1 <- diag( c(0, 2, 6, 12, 20, 30, 42) * x ^ c(0, 0, 1:5) )
}
if(i == 2)
{
he1 <- matrix(0, 7, 7)
he1[1, -1] <- sapply(2:7, function(i) prod(x[-c(1, i)]))
he1[2, -2] <- sapply(c(1, 3:7), function(i) prod(x[-c(2, i)]))
he1[3, -3] <- sapply(c(1:2, 4:7), function(i) prod(x[-c(3, i)]))
he1[4, -4] <- sapply(c(1:3, 5:7), function(i) prod(x[-c(4, i)]))
he1[5, -5] <- sapply(c(1:4, 6:7), function(i) prod(x[-c(5, i)]))
he1[6, -6] <- sapply(c(1:5, 7:7), function(i) prod(x[-c(6, i)]))
he1[7, -7] <- sapply(1:6, function(i) prod(x[-c(7, i)]))
he2 <- matrix(0, 7, 7)
}
if(i == 3)
{
he1 <- diag(rep(2, 7))
he2 <- matrix(0, 7, 7)
}
if(i != 1)
return( c(he1[j, k], he2[j, k]) )
else
return( he1[j, k] )
}
# (3) compute Phi
#
z <- rexp(sum(dimx) + sum(dimlam))
n <- sum(dimx)
m <- sum(dimlam)
x <- z[1:n]
lam <- z[(n+1):(n+m)]
resphi <- funSSR(z, dimx, dimlam, grobj=grfullob, constr=g, grconstr=grfullg, compl=phiFB)
check <- c(grfullob(x, 1, 1) + lam[1] * grfullg(x, 1, 1),
grfullob(x, 1, 2) + lam[1] * grfullg(x, 1, 2),
grfullob(x, 2, 3) + lam[2:3] %*% grfullg(x, 2, 3),
grfullob(x, 2, 4) + lam[2:3] %*% grfullg(x, 2, 4),
grfullob(x, 3, 5) + lam[4:5] %*% grfullg(x, 3, 5),
grfullob(x, 3, 6) + lam[4:5] %*% grfullg(x, 3, 6),
grfullob(x, 3, 7) + lam[4:5] %*% grfullg(x, 3, 7),
phiFB( -g(x, 1), lam[1]),
phiFB( -g(x, 2)[1], lam[2]),
phiFB( -g(x, 2)[2], lam[3]),
phiFB( -g(x, 3)[1], lam[4]),
phiFB( -g(x, 3)[2], lam[5]))
#check
cat("\n\n________________________________________\n\n")
#part A
print(cbind(check, res=as.numeric(resphi))[1:n, ])
#part B
print(cbind(check, res=as.numeric(resphi))[(n+1):(n+m), ])
# (4) compute Jac Phi
#
resjacphi <- jacSSR(z, dimx, dimlam, heobj=hefullob, constr=g, grconstr=grfullg,
heconstr=hefullg, gcompla=GrAphiFB, gcomplb=GrBphiFB)
#check
cat("\n\n________________________________________\n\n")
cat("\n\npart A\n\n")
checkA <-
rbind(
c(hefullob(x, 1, 1, 1) + lam[1]*hefullg(x, 1, 1, 1),
hefullob(x, 1, 1, 2) + lam[1]*hefullg(x, 1, 1, 2),
hefullob(x, 1, 1, 3) + lam[1]*hefullg(x, 1, 1, 3),
hefullob(x, 1, 1, 4) + lam[1]*hefullg(x, 1, 1, 4),
hefullob(x, 1, 1, 5) + lam[1]*hefullg(x, 1, 1, 5),
hefullob(x, 1, 1, 6) + lam[1]*hefullg(x, 1, 1, 6),
hefullob(x, 1, 1, 7) + lam[1]*hefullg(x, 1, 1, 7)
),
c(hefullob(x, 1, 2, 1) + lam[1]*hefullg(x, 1, 2, 1),
hefullob(x, 1, 2, 2) + lam[1]*hefullg(x, 1, 2, 2),
hefullob(x, 1, 2, 3) + lam[1]*hefullg(x, 1, 2, 3),
hefullob(x, 1, 2, 4) + lam[1]*hefullg(x, 1, 2, 4),
hefullob(x, 1, 2, 5) + lam[1]*hefullg(x, 1, 2, 5),
hefullob(x, 1, 2, 6) + lam[1]*hefullg(x, 1, 2, 6),
hefullob(x, 1, 2, 7) + lam[1]*hefullg(x, 1, 2, 7)
),
c(hefullob(x, 2, 3, 1) + lam[2:3] %*% hefullg(x, 2, 3, 1),
hefullob(x, 2, 3, 2) + lam[2:3] %*% hefullg(x, 2, 3, 2),
hefullob(x, 2, 3, 3) + lam[2:3] %*% hefullg(x, 2, 3, 3),
hefullob(x, 2, 3, 4) + lam[2:3] %*% hefullg(x, 2, 3, 4),
hefullob(x, 2, 3, 5) + lam[2:3] %*% hefullg(x, 2, 3, 5),
hefullob(x, 2, 3, 6) + lam[2:3] %*% hefullg(x, 2, 3, 6),
hefullob(x, 2, 3, 7) + lam[2:3] %*% hefullg(x, 2, 3, 7)
),
c(hefullob(x, 2, 4, 1) + lam[2:3] %*% hefullg(x, 2, 4, 1),
hefullob(x, 2, 4, 2) + lam[2:3] %*% hefullg(x, 2, 4, 2),
hefullob(x, 2, 4, 3) + lam[2:3] %*% hefullg(x, 2, 4, 3),
hefullob(x, 2, 4, 4) + lam[2:3] %*% hefullg(x, 2, 4, 4),
hefullob(x, 2, 4, 5) + lam[2:3] %*% hefullg(x, 2, 4, 5),
hefullob(x, 2, 4, 6) + lam[2:3] %*% hefullg(x, 2, 4, 6),
hefullob(x, 2, 4, 7) + lam[2:3] %*% hefullg(x, 2, 4, 7)
),
c(hefullob(x, 3, 5, 1) + lam[4:5] %*% hefullg(x, 3, 5, 1),
hefullob(x, 3, 5, 2) + lam[4:5] %*% hefullg(x, 3, 5, 2),
hefullob(x, 3, 5, 3) + lam[4:5] %*% hefullg(x, 3, 5, 3),
hefullob(x, 3, 5, 4) + lam[4:5] %*% hefullg(x, 3, 5, 4),
hefullob(x, 3, 5, 5) + lam[4:5] %*% hefullg(x, 3, 5, 5),
hefullob(x, 3, 5, 6) + lam[4:5] %*% hefullg(x, 3, 5, 6),
hefullob(x, 3, 5, 7) + lam[4:5] %*% hefullg(x, 3, 5, 7)
),
c(hefullob(x, 3, 6, 1) + lam[4:5] %*% hefullg(x, 3, 6, 1),
hefullob(x, 3, 6, 2) + lam[4:5] %*% hefullg(x, 3, 6, 2),
hefullob(x, 3, 6, 3) + lam[4:5] %*% hefullg(x, 3, 6, 3),
hefullob(x, 3, 6, 4) + lam[4:5] %*% hefullg(x, 3, 6, 4),
hefullob(x, 3, 6, 5) + lam[4:5] %*% hefullg(x, 3, 6, 5),
hefullob(x, 3, 6, 6) + lam[4:5] %*% hefullg(x, 3, 6, 6),
hefullob(x, 3, 6, 7) + lam[4:5] %*% hefullg(x, 3, 6, 7)
),
c(hefullob(x, 3, 7, 1) + lam[4:5] %*% hefullg(x, 3, 7, 1),
hefullob(x, 3, 7, 2) + lam[4:5] %*% hefullg(x, 3, 7, 2),
hefullob(x, 3, 7, 3) + lam[4:5] %*% hefullg(x, 3, 7, 3),
hefullob(x, 3, 7, 4) + lam[4:5] %*% hefullg(x, 3, 7, 4),
hefullob(x, 3, 7, 5) + lam[4:5] %*% hefullg(x, 3, 7, 5),
hefullob(x, 3, 7, 6) + lam[4:5] %*% hefullg(x, 3, 7, 6),
hefullob(x, 3, 7, 7) + lam[4:5] %*% hefullg(x, 3, 7, 7)
)
)
print(resjacphi[1:n, 1:n] - checkA)
cat("\n\n________________________________________\n\n")
cat("\n\npart B\n\n")
checkB <-
rbind(
cbind(c(grfullg(x, 1, 1), grfullg(x, 1, 2)), c(0, 0), c(0, 0), c(0, 0), c(0, 0)),
cbind(c(0, 0), rbind(grfullg(x, 2, 3), grfullg(x, 2, 4)), c(0, 0), c(0, 0)),
cbind(c(0, 0, 0), c(0, 0, 0), c(0, 0, 0),
rbind(grfullg(x, 3, 5), grfullg(x, 3, 6), grfullg(x, 3, 7)))
)
print(resjacphi[1:n, (n+1):(n+m)] - checkB)
cat("\n\n________________________________________\n\n")
cat("\n\npart C\n\n")
gx <- c(g(x,1), g(x,2), g(x,3))
checkC <-
- t(
cbind(
rbind(
grfullg(x, 1, 1) * GrAphiFB(-gx, lam)[1],
grfullg(x, 1, 2) * GrAphiFB(-gx, lam)[1],
grfullg(x, 1, 3) * GrAphiFB(-gx, lam)[1],
grfullg(x, 1, 4) * GrAphiFB(-gx, lam)[1],
grfullg(x, 1, 5) * GrAphiFB(-gx, lam)[1],
grfullg(x, 1, 6) * GrAphiFB(-gx, lam)[1],
grfullg(x, 1, 7) * GrAphiFB(-gx, lam)[1]
),
rbind(
grfullg(x, 2, 1) * GrAphiFB(-gx, lam)[2:3],
grfullg(x, 2, 2) * GrAphiFB(-gx, lam)[2:3],
grfullg(x, 2, 3) * GrAphiFB(-gx, lam)[2:3],
grfullg(x, 2, 4) * GrAphiFB(-gx, lam)[2:3],
grfullg(x, 2, 5) * GrAphiFB(-gx, lam)[2:3],
grfullg(x, 2, 6) * GrAphiFB(-gx, lam)[2:3],
grfullg(x, 2, 7) * GrAphiFB(-gx, lam)[2:3]
),
rbind(
grfullg(x, 3, 1) * GrAphiFB(-gx, lam)[4:5],
grfullg(x, 3, 2) * GrAphiFB(-gx, lam)[4:5],
grfullg(x, 3, 3) * GrAphiFB(-gx, lam)[4:5],
grfullg(x, 3, 4) * GrAphiFB(-gx, lam)[4:5],
grfullg(x, 3, 5) * GrAphiFB(-gx, lam)[4:5],
grfullg(x, 3, 6) * GrAphiFB(-gx, lam)[4:5],
grfullg(x, 3, 7) * GrAphiFB(-gx, lam)[4:5]
)
)
)
print(resjacphi[(n+1):(n+m), 1:n] - checkC)
cat("\n\n________________________________________\n\n")
cat("\n\npart D\n\n")
checkD <- diag(GrBphiFB(-gx, lam))
print(resjacphi[(n+1):(n+m), (n+1):(n+m)] - checkD)
Results
R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(GNE)
Loading required package: alabama
Loading required package: numDeriv
Loading required package: nleqslv
Loading required package: BB
Loading required package: SQUAREM
> png(filename="/home/ddbj/snapshot/RGM3/R_CC/result/GNE/util-SSR.Rd_%03d_medium.png", width=480, height=480)
> ### Name: SSR
> ### Title: SemiSmooth Reformulation
> ### Aliases: SSR funSSR jacSSR
> ### Keywords: math optimize
>
> ### ** Examples
>
>
> # (1) associated objective functions
> #
>
> dimx <- c(2, 2, 3)
>
> #Gr_x_j O_i(x)
> grfullob <- function(x, i, j)
+ {
+ x <- x[1:7]
+ if(i == 1)
+ {
+ grad <- 3*(x - 1:7)^2
+ }
+ if(i == 2)
+ {
+ grad <- 1:7*(x - 1:7)^(0:6)
+ }
+ if(i == 3)
+ {
+ s <- x[5]^2 + x[6]^2 + x[7]^2 - 5
+ grad <- c(1, 0, 1, 0, 4*x[5]*s, 4*x[6]*s, 4*x[7]*s)
+
+ }
+ grad[j]
+ }
>
>
> #Gr_x_k Gr_x_j O_i(x)
> hefullob <- function(x, i, j, k)
+ {
+ x <- x[1:7]
+ if(i == 1)
+ {
+ he <- diag( 6*(x - 1:7) )
+ }
+ if(i == 2)
+ {
+ he <- diag( c(0, 2, 6, 12, 20, 30, 42)*(x - 1:7)^c(0, 0:5) )
+ }
+ if(i == 3)
+ {
+ s <- x[5]^2 + x[6]^2 + x[7]^2
+
+ he <- rbind(rep(0, 7), rep(0, 7), rep(0, 7), rep(0, 7),
+ c(0, 0, 0, 0, 4*s+8*x[5]^2, 8*x[5]*x[6], 8*x[5]*x[7]),
+ c(0, 0, 0, 0, 8*x[5]*x[6], 4*s+8*x[6]^2, 8*x[6]*x[7]),
+ c(0, 0, 0, 0, 8*x[5]*x[7], 8*x[6]*x[7], 4*s+8*x[7]^2) )
+ }
+ he[j,k]
+ }
>
>
>
> # (2) constraint linked functions
> #
>
> dimlam <- c(1, 2, 2)
>
> #constraint function g_i(x)
> g <- function(x, i)
+ {
+ x <- x[1:7]
+ if(i == 1)
+ res <- sum( x^(1:7) ) -7
+ if(i == 2)
+ res <- c(sum(x) + prod(x) - 14, 20 - sum(x))
+ if(i == 3)
+ res <- c(sum(x^2) + 1, 100 - sum(x))
+ res
+ }
>
>
> #Gr_x_j g_i(x)
> grfullg <- function(x, i, j)
+ {
+ x <- x[1:7]
+ if(i == 1)
+ {
+ grad <- (1:7) * x ^ (0:6)
+ }
+ if(i == 2)
+ {
+ grad <- 1 + sapply(1:7, function(i) prod(x[-i]))
+ grad <- cbind(grad, -1)
+ }
+ if(i == 3)
+ {
+ grad <- cbind(2*x, -1)
+ }
+
+
+ if(i == 1)
+ res <- grad[j]
+ if(i != 1)
+ res <- grad[j,]
+ as.numeric(res)
+ }
>
>
>
> #Gr_x_k Gr_x_j g_i(x)
> hefullg <- function(x, i, j, k)
+ {
+ x <- x[1:7]
+ if(i == 1)
+ {
+ he1 <- diag( c(0, 2, 6, 12, 20, 30, 42) * x ^ c(0, 0, 1:5) )
+ }
+ if(i == 2)
+ {
+ he1 <- matrix(0, 7, 7)
+ he1[1, -1] <- sapply(2:7, function(i) prod(x[-c(1, i)]))
+ he1[2, -2] <- sapply(c(1, 3:7), function(i) prod(x[-c(2, i)]))
+ he1[3, -3] <- sapply(c(1:2, 4:7), function(i) prod(x[-c(3, i)]))
+ he1[4, -4] <- sapply(c(1:3, 5:7), function(i) prod(x[-c(4, i)]))
+ he1[5, -5] <- sapply(c(1:4, 6:7), function(i) prod(x[-c(5, i)]))
+ he1[6, -6] <- sapply(c(1:5, 7:7), function(i) prod(x[-c(6, i)]))
+ he1[7, -7] <- sapply(1:6, function(i) prod(x[-c(7, i)]))
+
+
+ he2 <- matrix(0, 7, 7)
+
+ }
+ if(i == 3)
+ {
+ he1 <- diag(rep(2, 7))
+ he2 <- matrix(0, 7, 7)
+ }
+ if(i != 1)
+ return( c(he1[j, k], he2[j, k]) )
+ else
+ return( he1[j, k] )
+ }
>
>
> # (3) compute Phi
> #
>
> z <- rexp(sum(dimx) + sum(dimlam))
>
> n <- sum(dimx)
> m <- sum(dimlam)
> x <- z[1:n]
> lam <- z[(n+1):(n+m)]
>
> resphi <- funSSR(z, dimx, dimlam, grobj=grfullob, constr=g, grconstr=grfullg, compl=phiFB)
>
>
> check <- c(grfullob(x, 1, 1) + lam[1] * grfullg(x, 1, 1),
+ grfullob(x, 1, 2) + lam[1] * grfullg(x, 1, 2),
+ grfullob(x, 2, 3) + lam[2:3] %*% grfullg(x, 2, 3),
+ grfullob(x, 2, 4) + lam[2:3] %*% grfullg(x, 2, 4),
+ grfullob(x, 3, 5) + lam[4:5] %*% grfullg(x, 3, 5),
+ grfullob(x, 3, 6) + lam[4:5] %*% grfullg(x, 3, 6),
+ grfullob(x, 3, 7) + lam[4:5] %*% grfullg(x, 3, 7),
+ phiFB( -g(x, 1), lam[1]),
+ phiFB( -g(x, 2)[1], lam[2]),
+ phiFB( -g(x, 2)[2], lam[3]),
+ phiFB( -g(x, 3)[1], lam[4]),
+ phiFB( -g(x, 3)[2], lam[5]))
>
>
>
> #check
> cat("\n\n________________________________________\n\n")
________________________________________
>
> #part A
> print(cbind(check, res=as.numeric(resphi))[1:n, ])
check res
[1,] 4.7335070 4.7335070
[2,] 8.9324574 8.9324574
[3,] 12.9928537 12.9928537
[4,] -257.1265856 -257.1265856
[5,] -0.1500646 -0.1500646
[6,] 18.9785509 18.9785509
[7,] -2.5117080 -2.5117080
> #part B
> print(cbind(check, res=as.numeric(resphi))[(n+1):(n+m), ])
check res
[1,] 649.4925817 649.4925817
[2,] -0.5154893 -0.5154893
[3,] 27.6247860 27.6247860
[4,] 18.0286559 18.0286559
[5,] 187.6865607 187.6865607
>
> # (4) compute Jac Phi
> #
>
> resjacphi <- jacSSR(z, dimx, dimlam, heobj=hefullob, constr=g, grconstr=grfullg,
+ heconstr=hefullg, gcompla=GrAphiFB, gcomplb=GrBphiFB)
>
>
> #check
> cat("\n\n________________________________________\n\n")
________________________________________
>
>
> cat("\n\npart A\n\n")
part A
>
>
> checkA <-
+ rbind(
+ c(hefullob(x, 1, 1, 1) + lam[1]*hefullg(x, 1, 1, 1),
+ hefullob(x, 1, 1, 2) + lam[1]*hefullg(x, 1, 1, 2),
+ hefullob(x, 1, 1, 3) + lam[1]*hefullg(x, 1, 1, 3),
+ hefullob(x, 1, 1, 4) + lam[1]*hefullg(x, 1, 1, 4),
+ hefullob(x, 1, 1, 5) + lam[1]*hefullg(x, 1, 1, 5),
+ hefullob(x, 1, 1, 6) + lam[1]*hefullg(x, 1, 1, 6),
+ hefullob(x, 1, 1, 7) + lam[1]*hefullg(x, 1, 1, 7)
+ ),
+ c(hefullob(x, 1, 2, 1) + lam[1]*hefullg(x, 1, 2, 1),
+ hefullob(x, 1, 2, 2) + lam[1]*hefullg(x, 1, 2, 2),
+ hefullob(x, 1, 2, 3) + lam[1]*hefullg(x, 1, 2, 3),
+ hefullob(x, 1, 2, 4) + lam[1]*hefullg(x, 1, 2, 4),
+ hefullob(x, 1, 2, 5) + lam[1]*hefullg(x, 1, 2, 5),
+ hefullob(x, 1, 2, 6) + lam[1]*hefullg(x, 1, 2, 6),
+ hefullob(x, 1, 2, 7) + lam[1]*hefullg(x, 1, 2, 7)
+ ),
+ c(hefullob(x, 2, 3, 1) + lam[2:3] %*% hefullg(x, 2, 3, 1),
+ hefullob(x, 2, 3, 2) + lam[2:3] %*% hefullg(x, 2, 3, 2),
+ hefullob(x, 2, 3, 3) + lam[2:3] %*% hefullg(x, 2, 3, 3),
+ hefullob(x, 2, 3, 4) + lam[2:3] %*% hefullg(x, 2, 3, 4),
+ hefullob(x, 2, 3, 5) + lam[2:3] %*% hefullg(x, 2, 3, 5),
+ hefullob(x, 2, 3, 6) + lam[2:3] %*% hefullg(x, 2, 3, 6),
+ hefullob(x, 2, 3, 7) + lam[2:3] %*% hefullg(x, 2, 3, 7)
+ ),
+ c(hefullob(x, 2, 4, 1) + lam[2:3] %*% hefullg(x, 2, 4, 1),
+ hefullob(x, 2, 4, 2) + lam[2:3] %*% hefullg(x, 2, 4, 2),
+ hefullob(x, 2, 4, 3) + lam[2:3] %*% hefullg(x, 2, 4, 3),
+ hefullob(x, 2, 4, 4) + lam[2:3] %*% hefullg(x, 2, 4, 4),
+ hefullob(x, 2, 4, 5) + lam[2:3] %*% hefullg(x, 2, 4, 5),
+ hefullob(x, 2, 4, 6) + lam[2:3] %*% hefullg(x, 2, 4, 6),
+ hefullob(x, 2, 4, 7) + lam[2:3] %*% hefullg(x, 2, 4, 7)
+ ),
+ c(hefullob(x, 3, 5, 1) + lam[4:5] %*% hefullg(x, 3, 5, 1),
+ hefullob(x, 3, 5, 2) + lam[4:5] %*% hefullg(x, 3, 5, 2),
+ hefullob(x, 3, 5, 3) + lam[4:5] %*% hefullg(x, 3, 5, 3),
+ hefullob(x, 3, 5, 4) + lam[4:5] %*% hefullg(x, 3, 5, 4),
+ hefullob(x, 3, 5, 5) + lam[4:5] %*% hefullg(x, 3, 5, 5),
+ hefullob(x, 3, 5, 6) + lam[4:5] %*% hefullg(x, 3, 5, 6),
+ hefullob(x, 3, 5, 7) + lam[4:5] %*% hefullg(x, 3, 5, 7)
+ ),
+ c(hefullob(x, 3, 6, 1) + lam[4:5] %*% hefullg(x, 3, 6, 1),
+ hefullob(x, 3, 6, 2) + lam[4:5] %*% hefullg(x, 3, 6, 2),
+ hefullob(x, 3, 6, 3) + lam[4:5] %*% hefullg(x, 3, 6, 3),
+ hefullob(x, 3, 6, 4) + lam[4:5] %*% hefullg(x, 3, 6, 4),
+ hefullob(x, 3, 6, 5) + lam[4:5] %*% hefullg(x, 3, 6, 5),
+ hefullob(x, 3, 6, 6) + lam[4:5] %*% hefullg(x, 3, 6, 6),
+ hefullob(x, 3, 6, 7) + lam[4:5] %*% hefullg(x, 3, 6, 7)
+ ),
+ c(hefullob(x, 3, 7, 1) + lam[4:5] %*% hefullg(x, 3, 7, 1),
+ hefullob(x, 3, 7, 2) + lam[4:5] %*% hefullg(x, 3, 7, 2),
+ hefullob(x, 3, 7, 3) + lam[4:5] %*% hefullg(x, 3, 7, 3),
+ hefullob(x, 3, 7, 4) + lam[4:5] %*% hefullg(x, 3, 7, 4),
+ hefullob(x, 3, 7, 5) + lam[4:5] %*% hefullg(x, 3, 7, 5),
+ hefullob(x, 3, 7, 6) + lam[4:5] %*% hefullg(x, 3, 7, 6),
+ hefullob(x, 3, 7, 7) + lam[4:5] %*% hefullg(x, 3, 7, 7)
+ )
+ )
>
>
> print(resjacphi[1:n, 1:n] - checkA)
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0 0 0 0 0 0 0
[2,] 0 0 0 0 0 0 0
[3,] 0 0 0 0 0 0 0
[4,] 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 0
[6,] 0 0 0 0 0 0 0
[7,] 0 0 0 0 0 0 0
>
>
> cat("\n\n________________________________________\n\n")
________________________________________
>
>
> cat("\n\npart B\n\n")
part B
>
>
> checkB <-
+ rbind(
+ cbind(c(grfullg(x, 1, 1), grfullg(x, 1, 2)), c(0, 0), c(0, 0), c(0, 0), c(0, 0)),
+ cbind(c(0, 0), rbind(grfullg(x, 2, 3), grfullg(x, 2, 4)), c(0, 0), c(0, 0)),
+ cbind(c(0, 0, 0), c(0, 0, 0), c(0, 0, 0),
+ rbind(grfullg(x, 3, 5), grfullg(x, 3, 6), grfullg(x, 3, 7)))
+ )
>
>
> print(resjacphi[1:n, (n+1):(n+m)] - checkB)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
[6,] 0 0 0 0 0
[7,] 0 0 0 0 0
>
>
> cat("\n\n________________________________________\n\n")
________________________________________
> cat("\n\npart C\n\n")
part C
>
>
> gx <- c(g(x,1), g(x,2), g(x,3))
>
> checkC <-
+ - t(
+ cbind(
+ rbind(
+ grfullg(x, 1, 1) * GrAphiFB(-gx, lam)[1],
+ grfullg(x, 1, 2) * GrAphiFB(-gx, lam)[1],
+ grfullg(x, 1, 3) * GrAphiFB(-gx, lam)[1],
+ grfullg(x, 1, 4) * GrAphiFB(-gx, lam)[1],
+ grfullg(x, 1, 5) * GrAphiFB(-gx, lam)[1],
+ grfullg(x, 1, 6) * GrAphiFB(-gx, lam)[1],
+ grfullg(x, 1, 7) * GrAphiFB(-gx, lam)[1]
+ ),
+ rbind(
+ grfullg(x, 2, 1) * GrAphiFB(-gx, lam)[2:3],
+ grfullg(x, 2, 2) * GrAphiFB(-gx, lam)[2:3],
+ grfullg(x, 2, 3) * GrAphiFB(-gx, lam)[2:3],
+ grfullg(x, 2, 4) * GrAphiFB(-gx, lam)[2:3],
+ grfullg(x, 2, 5) * GrAphiFB(-gx, lam)[2:3],
+ grfullg(x, 2, 6) * GrAphiFB(-gx, lam)[2:3],
+ grfullg(x, 2, 7) * GrAphiFB(-gx, lam)[2:3]
+ ),
+ rbind(
+ grfullg(x, 3, 1) * GrAphiFB(-gx, lam)[4:5],
+ grfullg(x, 3, 2) * GrAphiFB(-gx, lam)[4:5],
+ grfullg(x, 3, 3) * GrAphiFB(-gx, lam)[4:5],
+ grfullg(x, 3, 4) * GrAphiFB(-gx, lam)[4:5],
+ grfullg(x, 3, 5) * GrAphiFB(-gx, lam)[4:5],
+ grfullg(x, 3, 6) * GrAphiFB(-gx, lam)[4:5],
+ grfullg(x, 3, 7) * GrAphiFB(-gx, lam)[4:5]
+ )
+ )
+ )
>
>
>
> print(resjacphi[(n+1):(n+m), 1:n] - checkC)
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0 0 0 0 0 0 0
[2,] 0 0 0 0 0 0 0
[3,] 0 0 0 0 0 0 0
[4,] 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 0
>
>
> cat("\n\n________________________________________\n\n")
________________________________________
>
> cat("\n\npart D\n\n")
part D
>
>
> checkD <- diag(GrBphiFB(-gx, lam))
>
> print(resjacphi[(n+1):(n+m), (n+1):(n+m)] - checkD)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
>
>
>
>
>
>
> dev.off()
null device
1
>