# Example SPlus script
to determine contrained least squares regression
# using nlregb
function. The underlying non-linear model is the Campbell
# model for modelling
the moisture release curve:
# Theta(Psi) <-
Theta_sat * (Psi/Psi_air)^(-1/b)
#
Campbell <-
function(x, y, p) {
p[1] *
(x/p[2])^(-1/p[3]) - y
}
#
# define the Jacobian
ie the first derivatives wrt p[]
#
Campbell.jac <-
function(x, y, p) {
dydp <- matrix(0,
nrow=length(x), ncol=length(p))
tmp <-
(x/p[2])^-(1/p[3])
dydp[,1] <-
tmp
dydp[,2] <-
p[1]*tmp/(p[2]*p[3])
dydp[,3] <-
p[1]*tmp*log(x/p[2])/p[3]^2
}
#
# try unbounded
first
#
x <- Psi
y <-
Soil01
p <- c(0.5, 1.0,
3.0)
n <-
length(x)
np <-
length(p)
nlregb(nres=n,
npar=np, start=p, res=Campbell,
jac=Campbell.jac,
y=y,x=x,p=p)