[R] How to get solution of following polynomial?

RON70 ron_michael70 at yahoo.com
Mon Jan 12 01:14:22 CET 2009


Hi Ravi, Thanks for this reply. However I could not understand meaning of
"vectorizing the function". Can you please be little bit elaborate on that?
Secondly the package "polynomial" is not available in CRAN it seems. What is
the alternate package?

Thanks,


Ravi Varadhan wrote:
> 
> Hi,
> 
> You can use the "polynomial" package to solve your problem.
> 
> The key step is to find the exact polynomial representation of fn(). 
> Noting that it is a 8-th degree polynomial, we can get its exact form
> using the poly.calc() function.  Once we have that, it is a simple matter
> of finding the roots using the solve() function.
> 
> require(polynomial)
> 
> a <- c(-0.07, 0.17)
> b <- c(1, -4)
> cc <- matrix(c(0.24, 0.00, -0.08, -0.31), 2)
> d <- matrix(c(0, 0, -0.13, -0.37), 2)
> e <- matrix(c(0.2, 0, -0.06, -0.34), 2)
> A1 <- diag(2) + a %*% t(b) + cc
> A2 <- -cc + d
> A3 <- -d + e
> A4 <- -e
> 
> # I am vectorizing your function
> fn <- function(z)
>    {
>     sapply(z, function(z) {
> 	y <- diag(2) - A1*z - A2*z^2 - A3*z^3 - A4*z^4
>     	det(y)
> 	})
>    }
> 
> 
> x <- seq(-5, 5, length=9) # note we need 9 points to exactly determine a
> 8-th degree polynomial
> y <- fn(x)
> 
> p <- poly.calc(x, y)  # uses Lagrange interpolation to determine
> polynomial form
> p
>> 1 - 1.18*x + 0.2777*x^2 - 0.2941*x^3 - 0.1004*x^4 + 0.3664*x^5 -
>> 0.0636*x^6 + 0.062*x^7 - 0.068*x^8 
> 
> # plot showing that p is the exact polynomial representation of fn(z)
> pfunc <- as.function(p)
> x1 <-seq(-5, 5, length=100)
> plot(x1, fn(x1),type="l")
> lines(x1, pfunc(x1), col=2, lty=2)   
> 
> solve(p)  # gives you the roots (some are, of course, complex)
> 
> 
> Hope this helps,
> 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: RON70 <ron_michael70 at yahoo.com>
> Date: Sunday, January 11, 2009 1:05 am
> Subject: [R]  How to get solution of following polynomial?
> To: r-help at r-project.org
> 
> 
>>  Hi, I want find all roots for the following polynomial :
>>  
>>  a <- c(-0.07, 0.17); b <- c(1, -4); cc <- matrix(c(0.24, 0.00, -0.08,
>>  -0.31), 2); d <- matrix(c(0, 0, -0.13, -0.37), 2); e <- matrix(c(0.2, 
>> 0,
>>  -0.06, -0.34), 2)
>>  A1 <- diag(2) + a %*% t(b) + cc; A2 <- -cc + d; A3 <- -d + e; A4 <- -e
>>  fn <- function(z)
>>     {
>>      y <- diag(2) - A1*z - A2*z^2 - A3*z^3 - A4*z^4
>>      return(det(y))
>>     }; uniroot(fn, c(-10, 1))
>>  
>>  Using uniroot function, I got only one solution of that. Is there any
>>  function to get all four solutions? I looked at polyroot() function, 
>> but I
>>  do not think it will work for my problem, because, my coef. are 
>> matrix, nor
>>  number
>>  
>>  Thanks
>>     
>>  
>>  
>>  -- 
>>  View this message in context: 
>>  Sent from the R help mailing list archive at Nabble.com.
>>  
>>  ______________________________________________
>>  R-help at r-project.org mailing list
>>  
>>  PLEASE do read the posting guide 
>>  and provide commented, minimal, self-contained, reproducible code.
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
> 
> 

-- 
View this message in context: http://www.nabble.com/How-to-get-solution-of-following-polynomial--tp21396441p21406350.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list