Werken met R bij wiskunde: Functies
Meerdere returns en opgeleverde waarden
Voorbeeldsessie in R met meerdere return instructies
> teken <- function(x) { + if (x<0) { + return(-1) + } else if (x>0) { + return(1) + } else { + return(0) + } + } > teken(-3) [1] -1 > teken(3) [1] 1 > sapply(-2:2, teken) # pas de functie toe op elk van de vectorelementen [1] -1 -1 0 1 1
We passen het eerdere voorbeeld van de benadering van \(e^x)\) met veeltermfuncties aan door zowel de functiewaarden als de afbreekfout op te leveren. Tevens gebruiken we de functie F
binnen een tweede functie, tabelleer
genaamd, die een tabel afdrukt met de resultaten van een systematische inspectie van de afbreekfouten voor een gegeven \(x\)
Oplevering van meerdere waarden
Onderstaand R script
F <- function(n, x) {
som <- 0
for (k in 0:n) {
som <- som + x^k/factorial(k)
}
afbreekfout <- abs(som - exp(x))
return(list(waarde=som, fout=afbreekfout))
}
resultaat <- F(10,1)
cat("waarde =", resultaat$waarde, "\n")
cat("afbreekfout =", resultaat$fout, "\n")
tabelleer <- function(x) {
tabel <- ""
tabel <- cat(tabel,
sprintf("\nx = %g, exp(x) = %g\n", x, exp(x)))
tabel <- cat(tabel, sprintf("n F(x) afbreekfout\n"))
for (n in c(2, 4, 6, 8, 10)) {
resultaat <- F(n,x)
tabel <- cat(tabel, sprintf("%-7g %-7f %.8f",
n, resultaat$waarde, resultaat$fout), "\n")
}
cat(tabel)
}
tabelleer(1)
levert de volgende uitvoer op:
waarde = 2.718282
afbreekfout = 2.731266e-08
x = 1, exp(x) = 2.71828
n F(x) afbreekfout
2 2.500000 0.21828183
4 2.708333 0.00994850
6 2.718056 0.00022627
8 2.718279 0.00000306
10 2.718282 0.00000003
Ontgrendel volledige toegang