In de oplossing van Taylorreeks1 werd de oplossing maar gecontroleerd tot 6 cijfers na de komma. In deze oefening zorgen we dat de berekening correct is tot een opgegeven aantal cijfers na de komma. Onderaan deze oefeningen vind je een aantal bedenkingen/tips.

We werken dit uit voor de sinusfunctie, met machtreeks:

\[sin(x) = \sum_{n=0}^\infty \frac{(-1)^n}{(2n+1)!}x^{2n+1} = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + ...\]

Opdracht

Schrijf een programma dat eerst een waarde inleest voor x, en daarna aantal cijfers na de komma dat exact moet zijn. Beide worden op aparte regels ingegeven. Het programma schrijft eerst de graad uit van het taylorpolynoom voor de berekening van de sinus, en op de volgende regel de waarde van het taylorpolynoom.

De uitkomst moet berekend worden tot het gevraagde aantal cijfers na de komma. Bij uitschrijven vraag je altijd 20 cijfers na de komma.

Onderaan staan een aantal bedenkingen met tips.

Voorbeeld

invoer

.52
5    

uitvoer

7
0.49688013020186005964

Bedenkingen

In de oplossing van vorige week kon je de teller en de noemer apart uitrekenen, of kon je gebruik maken van de functie math.factorial. In deze oefening mag dit niet! Dit wordt achteraf gecontroleerd!
Een oefening die ‘juist’ is op Dodona, maar toch gebruik maakt van de module math, zal niet juist gerekend worden. Het is ook fout om een speciaal geval apart te beschrijven met if, om door de testen te geraken. Dit zal ook gecontroleerd worden!

In deze oefening kan je niet op voorhand bepalen wat de graad is van het Taylorpolynoom. Vervang de for - lus door een while - lus.

Het aantal cijfers dat correct moet zijn na de komma bepaalt de nauwkeurigheid van de berekening. Omdat in deze machtreeks elke term \(\frac{x^{2n+1}}{(2n+1)!}\) kleiner is dan de vorige term, volstaat het om de lus uit te voeren tot de laatste term kleiner is dan \(10^{-k}\) met \(k\) het gewenste aantal cijfers na de komma.

In de machtreeks moet je voor elke term een breuk \(\frac{x^n}{n!}\) berekenen. De teller en de noemer van de breuk zijn allebei vrij grote getallen, terwijl het quotiënt een getal kleiner dan 1 zal zijn. Als de graad van het taylorpolynoom groter wordt, zullen de teller en de noemer heel grote getallen bevatten, die worden afgerond, en dus resulteren in een fout resultaat.

Tips

Gebruik een hulpvariabele waarin je enkel de berekening doet van \(\frac{x^n}{n!}\). In elke stap pas je de teller en de noemer van die hulpvariabele aan. Je kan namelijk \(\frac{x^n}{n!}\) berekenen uit \(\frac{x^{n-2}}{(n-2)!}\):

\[\frac{x^n}{n!} = \frac{x^{n-2}}{(n-2)!} . \frac{x*x}{n.(n-1)}\]