2012-10-16 14 views
11

La documentazione relativa a approxfun indica che è "spesso più utile di approx". Sto lottando per ottenere la mia testa intorno allo approxfun. Quando sarebbe approxfun più utile di approx (e quando sarebbe approx essere più utile)?Quando utilizzare approxfun rispetto a

risposta

16

approx restituisce il valore della funzione approssimata in (uno) punti specificati o in un dato numero di punti. approxfun restituisce una funzione che può quindi essere valutata in alcuni punti specifici. Se hai bisogno dell'approssimazione in punti che sai al momento di fare l'approssimazione, approx lo farà per te. Se hai bisogno di una funzione (in senso matematico) che restituirà il valore dell'approssimazione per alcuni argomenti dati in seguito, approxfun è ciò di cui hai bisogno.

Ecco alcuni esempi.

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

L'uscita dal approx e approxfun utilizzando questi dati

> 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> 

ulteriori esempi di utilizzo:

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

o un altro esempio in cui è necessaria una funzione:

> 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 
Problemi correlati