[R] How to get solution of following polynomial?

Ravi Varadhan RVaradhan at jhmi.edu
Mon Jan 12 15:34:37 CET 2009


Hi Hans,

I actaually meant the "polynom" package (not "polynomial", which was a
typo).  I am curious as to the main differences between "polynom" and
"PolynomF".  

Ron - by vectorizing, I mean that the function fn() can take a vector as an
input and return the function values at all the points in the vector.
"sapply" is an easy way to do this.  

Ravi.


----------------------------------------------------------------------------
-------

Ravi Varadhan, Ph.D.

Assistant Professor, The Center on Aging and Health

Division of Geriatric Medicine and Gerontology 

Johns Hopkins University

Ph: (410) 502-2619

Fax: (410) 614-9625

Email: rvaradhan at jhmi.edu

Webpage:  http://www.jhsph.edu/agingandhealth/People/Faculty/Varadhan.html

 

----------------------------------------------------------------------------
--------


-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
Behalf Of Hans W. Borchers
Sent: Monday, January 12, 2009 4:30 AM
To: r-help at stat.math.ethz.ch
Subject: Re: [R] How to get solution of following polynomial?

RON70 <ron_michael70 <at> yahoo.com> writes:

> 
> 
> 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 means 'PolynomF' which is an improved version of the old polynomial
package.

You do not need to recreate the polynomial from points. Instead, calculate
the exact polynomial:

    library(PolynomF)
    z <- polynom()

    p11 <- 1 - A1[1,1]*z - A2[1,1]*z^2 - A3[1,1]*z^3 - A4[1,1]*z^4
    # ...
    p <- p11*p22 - p12*p21

There is probably a shorter way to generate these four polynoms p11, ...,
p22.
Anyway, the result is

    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

    solve(p)
    # [1] -1.365976+0.000000i -0.737852-1.639581i -0.737852+1.639581i
    # [4] -0.012071-1.287727i -0.012071+1.287727i  1.000000+0.000000i
    # [7]  1.388794-0.281841i  1.388794+0.281841i

and the real solutions are 1.0 and -1.365976 !

Regards,  Hans Werner


> 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
> >

______________________________________________
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.




More information about the R-help mailing list