用R来求解一元二次方程

39 篇文章 9 订阅

在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(xintercept=0)
g <- g+ggtitle(paste("y=","x^2+",b,"*x+",c))
g

    效果如下:

图(1)该方程有2个根,分别为:-2,-3

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sanqima

一键三连,多多益善

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值