[R] How to solve following equation?

Hans W. Borchers hwborchers at gmail.com
Tue Dec 2 10:02:45 CET 2008


> I need to solve a equation like this :
>
> a = b/(1+x) + c/(1+x)^2 + d/(1+x)^3
>
> where a,b,c,d are known constant. Is there any R-way to do that?

Multiplying this expression with (1+x)^3 leads to a polynomial equation.
I would certainly recommend the 'PolynomF' package here:

----
    # install.packages("PolynomF")
    library("PolynomF")

    options(digits=16)

    x <- polynom()

    a <- b <- c <- d <- 1
    p <- a*(1+x)^3 - b*(1+x)^2 - c*(1+x) - d
    p
    # -2 + 2*x^2 + x^3

    solve(p)

    # [1] -1.419643377607080-0.6062907292072i
    #     -1.419643377607080+0.6062907292072i
    # [3]  0.839286755214161+0.0000000000000i
----

The solution x0 = 0.839286755214161 is correct up to the last digit, as can be
verified by using a computer algebra system. This also shows that Ryacas is
quite exact in this task.

Hans Werner

Gabor Grothendieck <ggrothendieck <at> gmail.com> writes:
> 
> Assume a = 1.  If not set b = b/a, etc.
> Now use (1) uniroot
> 
> > f <- function(x) b + c/(1+x) + d/(1+x)^2 - 1 - x
> > uniroot(f, 0:1)
> $root
> [1] 0.8392679
> 
> $f.root
> [1] 3.049818e-05
> 
> $iter
> [1] 3
> 
> $estim.prec
> [1] 6.103516e-05
> 
> or multiply through by 1+x
> and subtract 1 from both sides giving
> x = b + c/(1+x) + d/(1+x)^2 - 1
> and iterate that.
> 
> > a <- b <- c <- d <- 1
> > x <- 0
> > for(i in 1:25) {
> + x <- b + c/(1+x) + d/(1+x)^2 - 1
> + print(x)
> + }
> [1] 2
> [1] 0.4444444
> [1] 1.171598
> [1] 0.6725419
> [1] 0.9553676
> [1] 0.7729558
> [1] 0.8821595
> [1] 0.8135892
> [1] 0.8554268
> [1] 0.829437
> [1] 0.8454056
> [1] 0.835527
> [1] 0.8416126
> [1] 0.837854
> [1] 0.8401717
> [1] 0.838741
> [1] 0.8396236
> [1] 0.839079
> [1] 0.839415
> [1] 0.8392076
> [1] 0.8393356
> [1] 0.8392566
> [1] 0.8393053
> [1] 0.8392753
> [1] 0.8392938
> 
> On Mon, Dec 1, 2008 at 9:47 PM, RON70 <ron_michael70 <at> yahoo.com> wrote:
> >
> > I need to solve a equation like this :
> >
> > a = b/(1+x) + c/(1+x)^2 + d/(1+x)^3
> >
> > where a,b,c,d are known constant. Is there any R-way to do that?
> >
> > Thanks in advance
> > --
> > View this message in context:
http://www.nabble.com/How-to-solve-following-equation--tp20785063p20785063.html
> > Sent from the R help mailing list archive at Nabble.com.
> >
> > ______________________________________________
> > 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.
> >
> 
> ______________________________________________
> 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