[R] solving x in a polynomial function

Rui Barradas ruipbarradas at sapo.pt
Fri Mar 1 21:18:10 CET 2013


Hello,

Try the following.


a <- 1:10
b <- c(1, 2, 2.5, 3, 3.5, 4, 6, 7, 7.5, 8)

dat <- data.frame(a = a, b = b)  # for lm(), it's better to use a df
po.lm <- lm(a~b+I(b^2)+I(b^3)+I(b^4), data = dat); summary(po.lm)


realroots <- function(model, b){
	is.zero <- function(x, tol = .Machine$double.eps^0.5) abs(x) < tol
	if(names(model)[1] = "(Intercept)")
		r <- polyroot(c(coef(model)[1] - b, coef(model)[-1]))
	else
		r <- polyroot(c(-b, coef(model)))
	Re(r[is.zero(Im(r))])
}

r <- realroots(po.lm, 5.5)
predict(po.lm, newdata = data.frame(b = r))  # confirm



Hope this helps,

Rui Barradas

Em 01-03-2013 18:47, Mike Rennie escreveu:
> Hi there,
>
> Does anyone know how I solve for x from a given y in a polynomial
> function? Here's some example code:
>
> ##example file
>
> a<-1:10
>
> b<-c(1,2,2.5,3,3.5,4,6,7,7.5,8)
>
> po.lm<-lm(a~b+I(b^2)+I(b^3)+I(b^4)); summary(po.lm)
>
> (please ignore that the model is severely overfit- that's not the point).
>
> Let's say I want to solve for the value b where a = 5.5.
>
> Any thoughts? I did come across the polynom package, but I don't think
> that does it- I suspect the answer is simpler than I am making it out
> to be. Any help would be welcome.
>



More information about the R-help mailing list