[R] Solving a equation

Berend Hasselman bhh at xs4all.nl
Sun Aug 14 22:34:34 CEST 2011


Berend Hasselman wrote:
> 
> 
> B. Jonathan B. Jonathan wrote:
>> 
>> Hi there, I have following equations to be solved for a and b:
>> 
>> a/(a+b) = x1
>> ab/((a+b)^2 (a+b+1)) = x2
>> 
>> Is there any direct function available to solve them without
>> disentangling them manually? Thanks for your help.
>> 
> 
> There is a package nleqslv that will solve a system of equations with
> either a Newton or Broyden method.
> 
> You can do this
> 
> library(nleqslv)
> 
> # trial values
> 
> x1 <- .6
> x2 <- .2
> 
> eqn <- function(par) {
>     a <- par[1]
>     b <- par[2]
>     f <- numeric(2)
>     
>     f[1] <- a/(a+b) - x1 
>     f[2] <- a*b/((a+b)^2 * (a+b+1)) - x2 
>                                  
>     f
> } 
> 
> pstart <- c(1,1)
> 
> nleqslv(pstart,eqn,control=list(trace=1))
> 
> #or this if you don't need the trace
> 
> nleqslv(pstart,eqn)
> 
> There is also a package BB that uses different methods and is especially
> geared towards very large systems.
> 
> Berend
> 

You can also pass values for x1 and x2 to your function like this
(you can replace the NA's with your default values).

eqn <- function(par,x1=NA,x2=NA) {
    a <- par[1]
    b <- par[2]
    f <- numeric(2)

    f[1] <- a/(a+b) - x1
    f[2] <- a*b/((a+b)^2 * (a+b+1)) - x2

    f
}

pstart <- c(1,1)
nleqslv(pstart,eqn, x1=.6, x2=.2)

Berend

--
View this message in context: http://r.789695.n4.nabble.com/Solving-a-equation-tp3743338p3743461.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list