如何在R语言中求解三次方程P³+4P²+6P=2?
在R语言中求解三次方程P³+4P²+6P=2的根
首先将原方程整理为标准多项式形式:P^3 + 4*P^2 + 6*P - 2 = 0
以下是两种在R中求解的方法:
方法一:使用polyroot()求解所有根(含复根)
polyroot()可以直接求解多项式的所有根,包括实根和复根。步骤如下:
- 构造多项式系数向量(按最高次到常数项的顺序):三次项系数1,二次项4,一次项6,常数项-2,即
c(1, 4, 6, -2) - 调用函数计算根并验证
# 定义多项式系数 coeffs <- c(1, 4, 6, -2) # 求解所有根 roots <- polyroot(coeffs) roots # 提取实根(筛选虚部接近0的根) real_root <- Re(roots[which(abs(Im(roots)) < 1e-10)]) real_root # 验证实根是否满足原方程 left_val <- real_root^3 + 4*real_root^2 + 6*real_root cat("实根代入左边的值:", left_val, "\n") cat("右边的值:", 2, "\n")
方法二:使用uniroot()求解实根
由于原方程对应的函数f(P) = P^3 + 4*P^2 + 6*P - 2的导数3P^2 + 8P + 6判别式为负,导数恒正,函数单调递增,因此仅有一个实根。我们可以通过uniroot()在指定区间内求解:
# 定义目标函数(Left - Right) f <- function(P) { P^3 + 4*P^2 + 6*P - 2 } # 在区间(0,1)内求解实根(f(0)=-2,f(1)=9,区间内函数值由负变正) result <- uniroot(f, interval = c(0, 1)) cat("实根为:", result$root, "\n") # 验证 cat("代入左边的值:", result$root^3 + 4*result$root^2 + 6*result$root, "\n")
内容的提问来源于stack exchange,提问作者Nick Goh
相关产品推荐
相关产品推荐

