[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