Werken met R bij wiskunde: Functies
De standaardvorm van een functiedefinitie
Net als andere objecten moeten functies worden gedefinieerd voordat ze kunnen worden gebruikt. Een eenvoudig voorbeeld hiervan is de definitie van de veeltermfunctie \(f(x)=x^3 + x - 1\) .
Voorbeeldsessie in R In de 'console' van RStudio kun je de functie als volgt definiëren:
> f <- function(x) { x^3 + x - 1 } > f(-2:2) # pas de functie f toe op -2, -1, 0, 1, 2 [1] -11 -3 -1 1 9
In een script verdelen we de code meestal over verschillende regels voor leesbaarheid, en dan ziet de definitie er als volgt uit:
f <- function(x) {
value <- x^3 + x -1
return(value)
}
We voegen nog één voorbeeld toe: bekijk het voorbeeld en lees dan de uitleg
De functie \(e^x\) heeft de volgende machtreeksontwikkeling: \[\begin{aligned}e^x &= 1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+\frac{x^4}{4!}+\cdots\\ &= \sum_{k=0}^{\infty}\frac{x^k}{k!}\end{aligned}\] Stel nu dat we veeltermfuncties \(F_n(x)\) ) het functievoorschrift geven dat het de veelterm is die je zou krijgen als je de machtreeks na \(n\) termen afkapt. Dus: \[F_n(x)=\sum_{k=0}^{n}\frac{x^k}{k!}\] Op deze manier krijgen we een reeks functies \(F_1, F_2, \cdots\) Omdat we niet elke functie afzonderlijk willen definiëren, construeren we een R-functie F
met twee argumenten, namelijk \(x\) en \(n\), in het volgende script:
F <- function(x, n) {
som <- 0
for (k in 0:n) {
som <- som + x^k/factorial(k)
}
return(som)
}
print(F(1, 3)) # ruwe benadering van het getal e
print(F(1, 5)) # goede benadering van het getal e
print(F(1, 10)) # betere benadering van het getal e
Je krijgt drie getallen als uitvoer, namelijk 2.66667, 2.716667, en 2.718282, wanneer je het script uitvoert. De laatste instructie laat zien dat de functie voor \(n=10\) en \(x=1\) een numeriek resultaat oplevert dat de exacte waarde van \(e\), de basis van de natuurlijke logaritme, benadert met een nauwkeurigheid van 6 decimalen. De afwijking van de reeksbenadering van de exacte waarde wordt de afbreekfout van de benadering genoemd.