您的位置:首页 > 其它

用R来求解一元二次方程

2015-12-23 15:41 3439 查看
  在R语言中,可以用uniroot()函数来求解方程的某个单根,并且uniroot()的解区间x∈[a,b],要满足a*b<0。对于一元一次方程,需要调用uniroot()一次。对于一元二次方程,由于二次方程一般有2个根,所以需要调用uniroot()两次。

  问题:一元二次方程ax^2+bx+c=0, 设a=1, b=5, c=6, 求x?

  代码如下:

  //fang.R  

##求一元二次方程ax^2+bx+c=0,设a=1,b=5,c=6,求x?
f3 <- function(x,a,b,c) a*x^2+b*x+c
a <- 1; b <- 5; c <- 6
result1 <- uniroot(f3,c(0,-2),a=a,b=b,c=c,tol=0.0001)

##用uniroot求解单个根
result2 <- uniroot(f3,c(-4,-3),a=a,b=b,c=c,tol=0.0001)
result1$root
result2$root

##绘制曲线 y = x^2+5x+6
##创建数据点
x <- seq(-5,1,by=0.01)
y <- f3(x,a,b,c)
df <- data.frame(x,y)

##用ggplot2来绘图
library(ggplot2)
g <- ggplot(df,aes(x,y))
g <- g+geom_line(col='red')   #红色曲线
g <- g+geom_hline(yintercept=0)+geom_vline(yintercept=0)
g <- g+ggtitle(paste("y=","x^2+",b,"*x+",c))
g


  效果如下:


图(1)该方程有2个根,分别为:-2,-3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  R语言 方程 ggplot2