Sommen, vergelijkingen en analyse
Deze pagina behandelt sommen en producten van reeksen termen, vergelijkingen oplossen, een uitdrukking als formule of op één punt differentiëren en bepaalde integralen berekenen. Gebruik dit voor Σ- of Π-notatie, wanneer een vergelijking lastig met de hand te herleiden is, of om een afgeleide of oppervlakte onder een curve uit je studie te controleren.
Al deze functies krijgen een variabelenaam als argument, zoals k in sum(k^2, k, 1, 10). Die naam bestaat alleen binnen de functieaanroep en verandert nooit een gelijknamige waarde elders in je notitie.
Eindige sommen en producten
sum(k, k, 1, 100) geeft 5,050sum(k^2, k, 1, 10) geeft 385summation(2*k - 1, k, 1, 10) geeft 100product(k, k, 1, 5) geeft 120De argumenten zijn de uitdrukking, de variabele, de beginwaarde en de eindwaarde. Beide grenzen tellen mee: sum(k, k, 1, 100) telt 1 + 2 + … + 100 op. summation is een andere naam voor sum. De derde regel toont dat de eerste tien oneven getallen samen 10² zijn; de laatste is 5-faculteit.
Sommen werken met geld en eenheden, handig voor regelmatig sparen:
# £1,200 paid in at the start of each year for 5 years, at 5%sum(£1200 * 1.05^k, k, 1, 5) geeft £6,962.30Een product is nuttig voor opeenvolgende kansen. De kans dat minstens twee mensen in een groep van 23 dezelfde verjaardag hebben, is één min de kans dat alle 23 verjaardagen verschillend zijn:
p = 1 - product((365 - k)/365, k, 0, 22)(p as %) to 1 dp geeft 50.7%Enkele details:
- Begin- en eindwaarden moeten gehele getallen zijn.
- Ligt de eindwaarde onder de beginwaarde, dan zijn er geen termen: de som is 0 en het product 1.
- Eén som of product mag maximaal 10.000 termen hebben.
- Sommen kunnen genest worden, zoals
sum(sum(j, j, 1, n), n, 1, 4), met als resultaat20. Geneste aanroepen delen één totale werklimiet. - Gebruik een lijst om bestaande waarden op te tellen:
sum([4, 8, 15]). Zie Lijsten en statistiek.
Een vergelijking exact oplossen
Met alleen een vergelijking leest solve de coëfficiënten en berekent het resultaat zoals je dat op papier zou doen:
solve(2x + 6 = 10) geeft 2solve(x/3 + 1 = 4) geeft 9solve(5x + 3 = 2x - 9) geeft -4# Candles sell for 12, cost 4 each to make, on 2,000 of fixed costssolve(12n = 2000 + 4n) geeft 250De onbekende is de enige naam in de vergelijking zonder eigen waarde. Eerder gedefinieerde namen worden als hun waarde gelezen. Laat je het rechterlid weg, dan wordt de uitdrukking gelijk aan nul gesteld.
Een lineaire vergelijking geeft één getal als resultaat. Een kwadratische geeft een lijst van de verschillende reële wortels, van klein naar groot. Een dubbele wortel wordt dus een lijst met één element:
solve(x^2 - 5x + 6 = 0) geeft [2, 3]solve(x^2 = 9) geeft [-3, 3]solve(x^2 - 6x + 9 = 0) geeft [3]solve(x^2 - 2 = 0) geeft [-1.4142135624, 1.4142135624]De vorm van het resultaat volgt de vergelijking, niet de gevonden wortels: een kwadratische vergelijking geeft altijd een lijst.
Lineaire vergelijkingen en kwadratische vergelijkingen waarvan de discriminant een volkomen kwadraat is, worden met exacte breuken opgelost. solve(x^2 - 5x + 6 = 0) geeft dus exact 2 en 3. Anders worden beide wortels als decimale vierkantswortels berekend. Twee benaderingen zijn niet noodzakelijk gelijk, ook als ze er zo uitzien: solve(x^2 - 2 = 0) en sqrt(2) tonen beide 1.4142135624, maar vergelijken als verschillend.
Vergelijkingen worden met gewone getallen opgelost. Eenheden en geld worden geweigerd, omdat herleiden ze anders mogelijk niet behoudt. Zie Wat de rekenengine garandeert voor de volledige regel.
Wanneer het niet kan
Er wordt niet gegokt. Zonder reële wortel verschijnt een melding in plaats van een complexe wortel. Alles boven de tweede graad wordt geweigerd, met de numerieke vorm als alternatief:
solve(x^2 + 1 = 0) geeft Error: no real solutionsolve(x^3 - 1 = 0) geeft Unsupported: solve reads equations of degree 1 and 2; this one has degree 3: write solve(expression,x,lower,upper) to search for one root numericallysolve(sin(x) = 0) geeft Unsupported: solve reads a polynomial in x of degree 1 or 2; write solve(expression,x,lower,upper) to search for one root numericallyDe onbekende mag ook niet in een deler of exponent staan. Bij twee ongedefinieerde namen vermeldt de fout welke niet kon worden gelezen:
solve(1/x = 2) geeft Unsupported: The unknown cannot be a divisor; write solve(expression,x,lower,upper) to search for one root numericallysolve(2^x = 8) geeft Unsupported: The unknown cannot be an exponent; write solve(expression,x,lower,upper) to search for one root numericallysolve(x + y = 10) geeft Unsupported: solve reads one unknown, and y holds no value either; give y a value, or write solve(expression,x,lower,upper) to search for one root numericallyEen vergelijking die voor elke waarde waar is meldt dat ook, in plaats van één waarde te kiezen:
solve(x - x = 0) geeft Unsupported: every value of x solves this equation, so it has no single answerAl deze weigeringen verwijzen naar solve met vier argumenten hieronder, dat numeriek één wortel zoekt ongeacht de vorm van de uitdrukking. Gebruik voor meerdere lineaire vergelijkingen met meerdere onbekenden solve_system uit Vectoren en matrices.
Eén numerieke wortel vinden
Met vier argumenten werkt solve anders: het zoekt tussen twee opgegeven grenzen een variabelenwaarde die de vergelijking waar maakt. Gebruik dit wanneer de exacte vorm hierboven een vergelijking weigert.
solve(x^2 = 2, x, 0, 2) geeft 1.4142135624solve(x^2 - 4, x, -3, 0) geeft -2solve(cos(x) = x, x, 0, 1) geeft 0.7390851332# How long does a stone take to fall 44.1 m?solve(4.9*t^2 = 44.1, t, 0, 10) geeft 3# Candles sell for £12, cost £4 each to make, plus £2,000 of fixed costssolve(12*n = 2000 + 4*n, n, 0, 1000) geeft 250De argumenten zijn de vergelijking, de variabele, de ondergrens en de bovengrens. Je kunt een vergelijking met = geven of alleen een uitdrukking, die solve leest als expression = 0.
De grenzen kiezen
Voor solve moet tussen de grenzen wisselen welk lid het grootst is. Anders gezegd: left - right moet bij de ene grens positief en bij de andere negatief zijn, of bij een grens exact nul. De functie verkleint het interval totdat ze het kruispunt vindt.
Dat heeft enkele gevolgen:
- Bij twee wortels binnen de grenzen hoeft het teken over het hele interval niet te wisselen.
solve(x^2 - 4, x, -3, 3)mislukt omdatx^2 - 4aan beide uiteinden positief is. Kies grenzen rond één wortel, zoals0en3. - Een wortel waar de curve nul alleen raakt, zoals bij
x^2 = 0, is zo niet te vinden: het teken wisselt daar niet. - De uitdrukking moet over het hele interval gedefinieerd zijn.
solve(sqrt(x) = 2, x, -1, 10)mislukt omdatsqrtvan een negatief getal een fout geeft. Begin het interval bij0. - Een sprong over nul, zoals bij
1/xrond0, is geen wortel.solvegeeft daar dus een fout in plaats van een resultaat. - De ondergrens moet kleiner zijn dan de bovengrens en beide moeten gewone getallen zijn.
solve geeft één wortel, nooit een lijst van alle wortels. Het werkt alleen met gewone getallen; laat eenheden dus weg uit de vergelijking.
Afronden en opnieuw gebruiken
Het resultaat is een nauwkeurige numerieke benadering; het laatste getoonde cijfer kan afwijken. Voeg op dezelfde regel to 4 dp toe, of een ander aantal decimalen, voor een overzichtelijk getal. Geef het resultaat eerst een naam als je het wilt hergebruiken:
solve(sqrt(x) = 2, x, 0, 10) geeft 4.0000000001solve(sqrt(x) = 2, x, 0, 10) to 4 dp geeft 4side = solve(sqrt(x) = 2, x, 0, 10) geeft 4.0000000001side * 3 to 2 dp geeft 12Je kunt solve in een eigen functie opnemen om het met andere waarden te hergebruiken:
root(y) = solve(x^2 = y, x, 0, 10)root(9) geeft 3Gebruik voor meerdere lineaire vergelijkingen met meerdere onbekenden solve_system uit Vectoren en matrices.
Symbolisch differentiëren
Met twee argumenten geeft differentiate (of derivative) de afgeleide als formule:
differentiate(sin(x), x) geeft cos(x)derivative(x^3, x) geeft (3*(x^(3-1)))derivative(x * sin(x), x) geeft (sin(x)+(x*cos(x)))derivative(exp(2*x), x) geeft (exp((2*x))*2)Het resultaat wordt niet vereenvoudigd en elke stap krijgt haakjes: (3*(x^(3-1))) is 3x². Decimale getallen komen terug als breuken: 19.6 verschijnt als (98/5).
Het resultaat is tekst, geen waarde waarmee Varlig verder kan rekenen. Typ de formule in een eigen functie om haar te gebruiken:
slope(x) = 3*x^2slope(2) geeft 12Symbolisch differentiëren ondersteunt:
+,-,*,/en machten, met de som-, product-, quotiënt-, machts- en kettingregel- de functies
sin,cos,tan,sinh,cosh,exp,lnensqrt - andere namen, die als constanten worden behandeld en als namen in het resultaat blijven
Een naam hoeft geen waarde in je notitie te hebben; je kunt dus een formule met symbolen differentiëren:
derivative(a*x^2, x) geeft (a*(2*(x^(2-1))))Andere functies, zoals abs, log en zelfgedefinieerde functies, geven een fout. Gebruik daarvoor de numerieke vorm hieronder. De formule neemt ook de domeinbeperkingen van de oorspronkelijke uitdrukking niet over: de afgeleide van sqrt(x) is alleen geldig waar sqrt(x) geldig is, ook al lijkt (1/(2*sqrt(x))) een zelfstandige formule.
Numeriek differentiëren
Met een derde argument geeft derivative de helling op dat punt als getal:
derivative(x^3, x, 2) geeft 12differentiate(sin(x), x, 0) geeft 1derivative(sqrt(x), x, 4) geeft 0.25height(t) = 20*t - 4.9*t^2derivative(height(t), t, 1) geeft 10.2Deze vorm werkt met functies uit je notitie, zoals height hierboven, wat de symbolische vorm niet kan. Omdat ze een getal berekent, moet elke andere naam in de uitdrukking een waarde hebben. Hetzelfde geldt voor sum, product, solve en integrate:
derivative(a*x^2, x, 2) geeft Unsupported: Unknown name: aa = 3derivative(a*x^2, x, 2) geeft 12Het resultaat wordt geschat uit nabijgelegen waarden aan beide kanten van het punt. Is de werkelijke helling een eenvoudig getal, dan bewaart Varlig dat getal en werkt exact vergelijken. Irrationale hellingen, zoals die van exp(x), behouden alle cijfers; vergelijk ze daarom met een tolerantie:
derivative(x^3, x, 2) == 12 geeft trueabs(derivative(exp(x), x, 1) - e) < 1e-6 geeft trueDe uitdrukking moet rond het punt glad zijn, zonder knikken of gaten. derivative(abs(x), x, 0) geeft een fout omdat abs een knik bij nul heeft. derivative(sqrt(x), x, 0) geeft een fout omdat sqrt links van nul niet gedefinieerd is.
Bepaalde integralen
integrate(x^2, x, 0, 3) geeft 9integrate(sin(x), x, 0, pi) geeft 2integrate(x^2, x, 3, 0) geeft -9integrate(4/(1 + x^2), x, 0, 1) geeft 3.1415926536# Distance fallen in 3 s: integrate the speed, 9.8t m/sintegrate(9.8*t, t, 0, 3) geeft 44.1De argumenten zijn de uitdrukking, de variabele, de ondergrens en de bovengrens, in dezelfde volgorde als bij sum. Het resultaat is de getekende oppervlakte onder de curve tussen de grenzen. Grenzen omwisselen keert het teken om; gelijke grenzen geven nul. Functies uit je notitie werken ook, zoals integrate(power(t), t, 0, 4).
integrate werkt numeriek en heeft daarom enkele beperkingen:
- Onbepaald integreren kan niet: je krijgt altijd een getal, nooit een formule.
- Beide grenzen moeten eindige getallen zijn; integreren tot oneindig kan niet.
- De uitdrukking moet over het hele interval gedefinieerd zijn.
integrate(1/sqrt(x), x, 0, 1)geeft een fout omdat1/sqrt(0)door nul deelt, ook al is de oppervlakte zelf eindig. - Uitdrukkingen met sprongen, pieken of zeer snelle oscillaties kunnen onnauwkeurige resultaten of een fout geven.
- Eenheden worden niet geaccepteerd; zet ze in een opmerking, zoals in het laatste voorbeeld.
Algoritmen en convergentie
Voor dagelijks gebruik heb je deze details niet nodig, maar ze helpen als een resultaat vreemd lijkt of een regel een fout geeft.
solve gebruikt bisectie: het halveert het interval telkens en behoudt de helft waarin het teken wisselt. Het stopt als left - right binnen 10⁻¹⁰ van nul ligt en het interval smal genoeg is. Na 128 halveringen volgt anders een fout.
Symbolische derivative past de standaardregels stap voor stap toe zonder vereenvoudiging. Het resultaat mag maximaal 8.192 tekens lang zijn. Dit is geen volledig computeralgebrasysteem.
Numerieke derivative vergelijkt centrale differenties met steeds kleinere stappen en controleert de helling aan beide kanten afzonderlijk. Komen die niet overeen of is een waarde nabij het punt ongedefinieerd, dan volgt een fout in plaats van een gok.
integrate gebruikt adaptieve Gauss–Kronrod-regels met 7 en 15 punten. Het vergelijkt beide schattingen per deelinterval en splitst het deel met de grootste geschatte fout totdat de totale geschatte fout onder 10⁻⁹ × max(1, |answer|) ligt. Het staat maximaal 2.048 splitsingen, 20 niveaus en een gedeeld budget van 100.000 stappen toe. De meetpunten liggen niet gelijkmatig verspreid, zodat een snelle oscillatie als cos(128*pi*x) van 0 tot 1 terecht ongeveer nul oplevert en niet voor een constante wordt aangezien. De foutschatting blijft een heuristiek; wees dus voorzichtig met resultaten bij singulariteiten of discontinuïteiten.
De volledige regels staan in de referentie voor geavanceerde wiskunde.
Alles combineren
Hier controleren we een natuurkundeopgave: een bal wordt recht omhoog gegooid met 19,6 m/s, bij een zwaartekrachtsversnelling van 9,8 m/s²:
# Height in metres after t secondsheight(t) = 19.6*t - 4.9*t^2velocity(t) = 19.6 - 9.8*t# Lands when the height is back to zero (skip t = 0)landing = solve(height(t) = 0, t, 1, 10) geeft 4# Speed after 1 second, from the slope of the heightderivative(height(t), t, 1) geeft 9.8# Highest point, where the velocity is zeropeak = solve(velocity(t) = 0, t, 0, landing) geeft 2height(peak) geeft 19.6# Check: integrating the velocity up to the peak gives the same heightintegrate(velocity(t), t, 0, peak) geeft 19.6De bal landt na 4 seconden en bereikt na 2 seconden een hoogte van 19,6 m. De ondergrens 1 in de regel landing houdt solve weg van de andere wortel bij t = 0. De laatste regel controleert de hoogte op een tweede manier, door de snelheid te integreren.