Good day to all!
I have a following cubic equation.
Left <- P^3 4*P^2 6*P
Right <- 2
How do I get R to solve for P
to get Left = Right
?
Thanks in advance.
CodePudding user response:
1. uniroot()
You could use uniroot()
to search for a root of a function with respect to its first argument.
uniroot(\(x, y) x^3 4*x^2 6*x - y, c(0, 1), y = 2, extendInt = "yes")
$root
[1] 0.278161
$f.root
[1] -1.779565e-05
$iter
[1] 6
$init.it
[1] NA
$estim.prec
[1] 6.103516e-05
2. polyroot()
If the function is a real or complex polynomial, you could specifically use polyroot(z)
, where z
is the vector of polynomial coefficients in increasing order.
y <- 2
polyroot(c(-y, 6, 4, 1))
# [1] 0.2781631-0.000000i -2.1390815 1.616897i -2.1390815-1.616897i
Both approaches solve the equation with the root 0.278161
. (Besides a real root, polyroot
also gives two imaginary roots)
CodePudding user response:
If you want symbolic solutions, I guess you can try Ryacas
like below
> library(Ryacas)
> yac_str("Solve(P^3 4*P^2 6*P==2,P)")
[1] "{P==(71/27 Sqrt(187/27))^(1/3)-(Sqrt(187/27)-71/27)^(1/3)-4/3,P==Complex(-(4/3 ((71/27 Sqrt(187/27))^(1/3)-(Sqrt(187/27)-71/27)^(1/3))/2),Sqrt(3/4)*((71/27 Sqrt(187/27))^(1/3) (Sqrt(187/27)-71/27)^(1/3))),P==Complex(-(4/3 ((71/27 Sqrt(187/27))^(1/3)-(Sqrt(187/27)-71/27)^(1/3))/2),-Sqrt(3/4)*((71/27 Sqrt(187/27))^(1/3) (Sqrt(187/27)-71/27)^(1/3)))}"