Nothing
# http://stackoverflow.com/questions/29134996/solving-nonlinear-equation-in-r
# wants to know if system has closed form solution
# I want to see how nleqslv behaves
set.seed(29)
library(nleqslv)
print.result <- function(z, do.print.xf=FALSE) {
if( do.print.xf ) {
print(z$x)
print(z$fvec)
}
print(z$message)
print(all(abs(z$fvec)<=1e-8))
}
f <- function(X, a, b, c1, c2, c3) {
Y <- numeric(3)
x <- X[1]
y <- X[2]
z <- X[3]
Y[1] <- x + y - x*y - c1
Y[2] <- x + z - x*z - c2
Y[3] <- a*y + b*z - c3
return(Y)
}
Jac <- function(X, a, b, c1, c2, c3) {
J <- matrix(0,nrow=3,ncol=3)
x <- X[1]
y <- X[2]
z <- X[3]
J[1,1] <- 1-y
J[2,1] <- 1-z
J[3,1] <- 0
J[1,2] <- 1-x
J[2,2] <- 0
J[3,2] <- a
J[1,3] <- 0
J[2,3] <- 1-x
J[3,3] <- b
J
}
a <- 1
b <- 1
c1 <- 2
c2 <- 3
c3 <- 4
# exact solution
x <- (a*c1+b*c2-c3)/(a+b-c3)
y <- (b*c1-b*c2-c1*c3+c3)/(-a*c1+a-b*c2+b)
z <- (a*(c1-c2)+(c2-1)*c3)/(a*(c1-1)+b*(c2-1))
xsol <- c(x,y,z)
X.start <- c(1,2,3)
z1 <- nleqslv(X.start,f,Jac,a=a,b=b,c1=c1,c2=c2,c3=c3,
method="Newton",control=list(trace=0,allowSingular=TRUE))
z2 <- nleqslv(X.start,f,Jac,a=a,b=b,c1=c1,c2=c2,c3=c3,
method="Broyden",control=list(trace=0,allowSingular=TRUE))
all.equal(z1$x,xsol)
all.equal(z2$x,xsol)
print.result(z1)
print.result(z2)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.