4

我对 R 非常陌生,所以解决这个问题可能相对简单。我有以下函数来计算普通汽车的停车距离:

distance <- function(mph){(2.0*(mph/60))+(0.062673*(mph^1.9862))}

我正在绘制从 1 mph 到 60 mph 的所有停车距离:

range = distance(1:60)

但我需要标记停止距离等于 120 英尺的位置。我不知道这是如何在 R 中完成的,但我想编写一个函数,对于停止距离(x),我得到汽车的最大速度,以 MPH 为单位。我应该使用什么函数,有没有一种简单的方法来检查距离(x)的值(如上面所写)是否等于某个值?

4

2 回答 2

5

一种方法是查找函数 -120 何时等于 0:

distance <- function(mph, dist=0){(2.0*(mph/60))+(0.062673*(mph^1.9862))-dist}
uniroot(distance, c(1, 60), dist=120)
## $root
## [1] 44.63998
##
## $f.root
## [1] -5.088982e-06
##
## $iter
## [1] 6
##
## $estim.prec
## [1] 6.103516e-05

看看它是否有效:

distance(44.63998)
## [1] 120
于 2013-02-13T06:24:19.373 回答
2

我知道这是一个老问题并且有一个公认的答案,但我想指出另一种方法来实现这一点 - 创建反函数。由于您拥有该功能,因此很容易在合理范围内生成许多 xy 点。然后通过使 y 成为 x 的函数来简单地创建反函数。在你的例子中,

x = seq(0,150,0.05)
y = distance(x)
speed = approxfun(y,x)

现在让我们确认它给出了很好的答案:

speed(120)
[1] 44.63998
distance(speed(120))
[1] 120
于 2021-01-13T22:42:54.493 回答