何时使用近似与约

时间:2012-10-16 21:47:03

标签: r

approxfun的文档指出它“通常比approx更有用”。我正在努力探索approxfun。什么时候approxfunapprox更有用(什么时候approx更有用)?

1 个答案:

答案 0 :(得分:20)

approx返回(任一)指定点或给定点数处的近似函数的值。 approxfun返回一个函数,然后可以在某些特定点进行评估。如果您需要在进行近似时知道的点处进行近似,approx将为您做到这一点。如果你需要一个函数(在数学意义上),它将返回稍后给出的某个参数的近似值,approxfun就是你需要的。

以下是一些例子。

dat <- data.frame(x=1:10, y=(1:10)^2)

使用此数据的approxapproxfun的输出

> approx(dat$x, dat$y)
$x
 [1]  1.000000  1.183673  1.367347  1.551020  1.734694  1.918367  2.102041
 [8]  2.285714  2.469388  2.653061  2.836735  3.020408  3.204082  3.387755
[15]  3.571429  3.755102  3.938776  4.122449  4.306122  4.489796  4.673469
[22]  4.857143  5.040816  5.224490  5.408163  5.591837  5.775510  5.959184
[29]  6.142857  6.326531  6.510204  6.693878  6.877551  7.061224  7.244898
[36]  7.428571  7.612245  7.795918  7.979592  8.163265  8.346939  8.530612
[43]  8.714286  8.897959  9.081633  9.265306  9.448980  9.632653  9.816327
[50] 10.000000

$y
 [1]   1.000000   1.551020   2.102041   2.653061   3.204082   3.755102
 [7]   4.510204   5.428571   6.346939   7.265306   8.183673   9.142857
[13]  10.428571  11.714286  13.000000  14.285714  15.571429  17.102041
[19]  18.755102  20.408163  22.061224  23.714286  25.448980  27.469388
[25]  29.489796  31.510204  33.530612  35.551020  37.857143  40.244898
[31]  42.632653  45.020408  47.408163  49.918367  52.673469  55.428571
[37]  58.183673  60.938776  63.693878  66.775510  69.897959  73.020408
[43]  76.142857  79.265306  82.551020  86.040816  89.530612  93.020408
[49]  96.510204 100.000000

> approxfun(dat$x, dat$y)
function (v) 
.C(C_R_approxfun, as.double(x), as.double(y), as.integer(n), 
    xout = as.double(v), as.integer(length(v)), as.integer(method), 
    as.double(yleft), as.double(yright), as.double(f), NAOK = TRUE, 
    PACKAGE = "stats")$xout
<bytecode: 0x05244854>
<environment: 0x030632fc>

更多使用示例:

a <- approx(dat$x, dat$y)
af <- approxfun(dat$x, dat$y)

plot(dat)
points(a, pch=2)

enter image description here

plot(dat)
curve(af, add=TRUE)

enter image description here

或其他需要功能的例子:

> uniroot(function(x) {af(x)-4}, interval=c(1,10))
$root
[1] 1.999994

$f.root
[1] -1.736297e-05

$iter
[1] 24

$estim.prec
[1] 6.103516e-05