[R] help about solving two equations

Ravi Varadhan rvaradhan at jhmi.edu
Thu Mar 11 04:03:25 CET 2010


Here is how you can solve:

fn <- function(x, s){
f <- rep(NA, length(x))
f[1] <- digamma(x[1]) - digamma(x[1]+x[2]) - s[1]
f[2] <- digamma(x[2]) - digamma(x[1]+x[2]) - s[2]
f
}

require(BB) # load this package for the nonlinear solver

s <- c(-2, -4)  # one row of s1 and s2

ans <- dfsane(par=c(1,1), fn=fn, s=s)

ans$par  # solutions for p and q

You can then loop through for each row of s1 and s2 and solve it to get corresponding p and q.

Ravi.
____________________________________________________________________

Ravi Varadhan, Ph.D.
Assistant Professor,
Division of Geriatric Medicine and Gerontology
School of Medicine
Johns Hopkins University

Ph. (410) 502-2619
email: rvaradhan at jhmi.edu


----- Original Message -----
From: Shaoqiong Zhao <zhaos at uwm.edu>
Date: Wednesday, March 10, 2010 8:19 pm
Subject: [R] help about solving two equations
To: r-help at r-project.org


> I have two matrix s1 and s2, each of them is 1000*1.
>  and I have two equations:
>  digamma(p)-digamma(p+q)=s1,
>  digamma(q)-digamma(p+q)=s2,
>  and I want to sovle these two equations to get the value of x and y, 
> which are also two 1000*1 matrices.
>  
>  I write a program like this:
>  
>  f <- function(x) {
>  p<- x[1]; q <- x[2]; 
>   ((digamma(p)-digamma(p+q)-s1[2,]) )^2 
> +((digamma(q)-digamma(p+q)-s2[2,]) )^2
>   }
>  s <- 1:10/10
>  g <- expand.grid(p = s, q = s)
>  idx <- which.min(apply(g, 1, f))
>  idx
>  g[idx,]     
>  
>  I am not sure if this is correct and also this can only solve one 
> row. How to get the whole 1000 rows of p and q?
>  
>  Thanks.
>  
>  Annie
>  
>  ______________________________________________
>  R-help at r-project.org mailing list
>  
>  PLEASE do read the posting guide 
>  and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list