Summor, ekvationer och analys
Den här sidan beskriver summor och produkter av termföljder, ekvationslösning, derivering som formel eller i en viss punkt samt bestämda integraler. Använd funktionerna när ett problem kräver Σ- eller Π-notation, när en ekvation är svår att lösa för hand eller när du vill kontrollera en derivata eller arean under en kurva i dina studier.
Alla dessa funktioner tar ett variabelnamn som ett av argumenten, till exempel k i sum(k^2, k, 1, 10). Namnet gäller bara i anropet och ändrar aldrig ett värde med samma namn någon annanstans i anteckningen.
Ändliga summor och produkter
sum(k, k, 1, 100) ger 5,050sum(k^2, k, 1, 10) ger 385summation(2*k - 1, k, 1, 10) ger 100product(k, k, 1, 5) ger 120Argumenten är uttrycket, variabeln, startvärdet och slutvärdet. Båda gränserna ingår, så sum(k, k, 1, 100) summerar 1 + 2 + … + 100. summation är ett annat namn för sum. Den tredje raden visar att de tio första udda talen har summan 10². Den sista ger 5 fakultet.
Summering fungerar med pengar och enheter och passar därför bra för regelbundet sparande:
# £1,200 paid in at the start of each year for 5 years, at 5%sum(£1200 * 1.05^k, k, 1, 5) ger £6,962.30En produkt är användbar för sannolikhetskedjor. Chansen att minst två personer i en grupp på 23 delar en födelsedag är en minus chansen att alla 23 födelsedagar är olika:
p = 1 - product((365 - k)/365, k, 0, 22)(p as %) to 1 dp ger 50.7%Några detaljer:
- De första och sista värdena måste vara heltal.
- Om det sista värdet är under det första finns inga termer: summan är 0 och produkten är 1.
- En enda summa eller produkt kan ha högst 10 000 termer.
- Summor kan nästlas, som i
sum(sum(j, j, 1, n), n, 1, 4), vilket ger20. Nästlade anrop delar på en gemensam gräns för beräkningsarbetet. - För att summera befintliga värden använder du i stället en lista:
sum([4, 8, 15]). Se Listor och statistik.
Lös en ekvation exakt
När solve får enbart en ekvation läser funktionen av koefficienterna och löser den på samma sätt som du skulle göra på papper:
solve(2x + 6 = 10) ger 2solve(x/3 + 1 = 4) ger 9solve(5x + 3 = 2x - 9) ger -4# Candles sell for 12, cost 4 each to make, on 2,000 of fixed costssolve(12n = 2000 + 4n) ger 250Den obekanta är det enda namnet i ekvationen som saknar ett eget värde. Namn som du redan har definierat ersätts med sina värden. Om högerledet utelämnas sätts uttrycket lika med noll.
En linjär ekvation ger lösningen som ett tal. En andragradsekvation ger en lista med sina olika reella rötter, minsta först. En dubbelrot blir därför en lista med ett enda värde:
solve(x^2 - 5x + 6 = 0) ger [2, 3]solve(x^2 = 9) ger [-3, 3]solve(x^2 - 6x + 9 = 0) ger [3]solve(x^2 - 2 = 0) ger [-1.4142135624, 1.4142135624]Resultatets form bestäms av ekvationen du skrev, inte av vilka rötter som hittades. En andragradsekvation ger alltid en lista.
Linjära ekvationer och kvadratiska ekvationer vars diskriminant är en perfekt kvadrat beräknas som exakta bråk, så att solve(x^2 - 5x + 6 = 0) verkligen är 2 och 3. När diskriminanten inte är en perfekt kvadrat är båda rötterna istället decimala kvadratrötter, och två ungefärliga värden är inte pålitligt lika även när de ser ut så här: solve(x^2 - 2 = 0) och sqrt(2) visar båda 1.4142135624 och jämförs som olika.
Ekvationer löses med tal utan enheter. Enheter och belopp avvisas eftersom de inte kan bevaras korrekt vid omformningen. Se hela regeln i Vad beräkningsmotorn garanterar.
När beräkningen inte går att utföra
Funktionen gissar inte. Om ekvationen saknar reella rötter visas ett meddelande, inte en komplex rot. Ekvationer av högre grad än två avvisas med hänvisning till den numeriska formen:
solve(x^2 + 1 = 0) ger Error: no real solutionsolve(x^3 - 1 = 0) ger 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) ger Unsupported: solve reads a polynomial in x of degree 1 or 2; write solve(expression,x,lower,upper) to search for one root numericallyDen obekanta får inte heller finnas i en nämnare eller exponent. Om ekvationen innehåller två odefinierade namn anges vilket som inte kunde tolkas:
solve(1/x = 2) ger Unsupported: The unknown cannot be a divisor; write solve(expression,x,lower,upper) to search for one root numericallysolve(2^x = 8) ger Unsupported: The unknown cannot be an exponent; write solve(expression,x,lower,upper) to search for one root numericallysolve(x + y = 10) ger 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 numericallyOm alla värden uppfyller ekvationen anges det i stället för att en godtycklig lösning väljs:
solve(x - x = 0) ger Unsupported: every value of x solves this equation, so it has no single answerAlla dessa fel hänvisar till solve med fyra argument nedan. Den formen söker numeriskt efter en rot och kräver inte en viss form på uttrycket. För flera linjära ekvationer med flera obekanta använder du solve_system, som beskrivs i Vektorer och matriser.
Hitta en numerisk rot
Med fyra argument fungerar solve annorlunda: funktionen söker inom två angivna gränser efter ett variabelvärde som uppfyller ekvationen. Använd den när den exakta formen ovan inte kan hantera ekvationen.
solve(x^2 = 2, x, 0, 2) ger 1.4142135624solve(x^2 - 4, x, -3, 0) ger -2solve(cos(x) = x, x, 0, 1) ger 0.7390851332# How long does a stone take to fall 44.1 m?solve(4.9*t^2 = 44.1, t, 0, 10) ger 3# Candles sell for £12, cost £4 each to make, plus £2,000 of fixed costssolve(12*n = 2000 + 4*n, n, 0, 1000) ger 250Argumenten är ekvationen, variabeln, den nedre gränsen och den övre gränsen. Du kan ange en ekvation med = eller ett ensamt uttryck, som solve tolkar som expression = 0.
Att välja gränserna
solve kräver att ekvationens vänster- och högerled byter vilket som är störst mellan gränserna. Med andra ord måste left - right vara positivt vid den ena gränsen och negativt vid den andra, eller exakt noll vid en gräns. Funktionen minskar sedan intervallet tills skärningspunkten hittas.
Detta har några konsekvenser:
- Om intervallet innehåller två rötter kan uttrycket ha samma tecken vid båda gränserna.
solve(x^2 - 4, x, -3, 3)misslyckas eftersomx^2 - 4är positivt i båda ändarna. Välj gränser som omsluter en enda rot, till exempel0och3. - En rot där kurvan endast tangerar noll, till exempel
x^2 = 0, kan inte hittas på detta sätt, eftersom tecknet aldrig ändras. - Uttrycket måste vara definierat i hela intervallet.
solve(sqrt(x) = 2, x, -1, 10)misslyckas eftersomsqrtav ett negativt tal ger ett fel. Börja intervallet vid0i stället. - Ett hopp över noll, som i
1/xnära0, är inte en rot, såsolveger ett fel där istället för ett svar. - Den nedre gränsen måste vara mindre än den övre. Båda ska vara tal utan enheter.
solve returnerar en rot, aldrig en lista med samtliga rötter. Funktionen fungerar bara med tal utan enheter, så utelämna enheter i ekvationen.
Avrundning och återanvändning
Resultatet är ett noggrant numeriskt närmevärde, men den sista visade siffran kan vara felaktig. Lägg till to 4 dp, eller ett annat antal decimaler, på samma rad för en tydlig avrundning. Du kan också först ge resultatet ett namn om du vill återanvända det:
solve(sqrt(x) = 2, x, 0, 10) ger 4.0000000001solve(sqrt(x) = 2, x, 0, 10) to 4 dp ger 4side = solve(sqrt(x) = 2, x, 0, 10) ger 4.0000000001side * 3 to 2 dp ger 12Du kan omsluta solve i en egen funktion för att återanvända den med olika värden:
root(y) = solve(x^2 = y, x, 0, 10)root(9) ger 3För flera linjära ekvationer med flera obekanta använder du solve_system, som beskrivs i Vektorer och matriser.
Symbolisk derivering
Med två argument ger differentiate (eller derivative) derivatan som en formel:
differentiate(sin(x), x) ger cos(x)derivative(x^3, x) ger (3*(x^(3-1)))derivative(x * sin(x), x) ger (sin(x)+(x*cos(x)))derivative(exp(2*x), x) ger (exp((2*x))*2)Resultatet förenklas inte och varje steg omges av parenteser: (3*(x^(3-1))) motsvarar 3x². Decimaltal i uttrycket återges som bråk, så 19.6 blir (98/5).
Resultatet är text, inte något Varlig kan beräkna med. För att använda det, skriv in formeln i en egen funktion:
slope(x) = 3*x^2slope(2) ger 12Den symboliska deriveringen hanterar:
+,-,*,/och potenser, med summaregeln, produktregeln, kvotregeln, potensregeln och kedjeregeln- funktionerna
sin,cos,tan,sinh,cosh,exp,lnochsqrt - andra namn, som behandlas som konstanter och förblir som namn i resultatet
Ett namn behöver inte ha ett värde i anteckningen, så du kan derivera en formel som innehåller symboler:
derivative(a*x^2, x) ger (a*(2*(x^(2-1))))Andra funktioner, såsom abs, log eller en funktion du har definierat själv, ger ett fel. För dessa, använd den numeriska formen nedan. Formeln överför inte heller begränsningarna för det ursprungliga uttrycket: derivatan av sqrt(x) är endast giltig där sqrt(x) är, även om (1/(2*sqrt(x))) ser ut som en egen formel.
Numerisk derivering
Med ett tredje argument ger derivative lutningen vid den punkten som ett numeriskt värde:
derivative(x^3, x, 2) ger 12differentiate(sin(x), x, 0) ger 1derivative(sqrt(x), x, 4) ger 0.25height(t) = 20*t - 4.9*t^2derivative(height(t), t, 1) ger 10.2Den här formen fungerar även med funktioner som du har definierat i anteckningen, till exempel height ovan, vilket den symboliska formen inte gör. Eftersom resultatet är ett tal måste alla andra namn i uttrycket ha värden. Samma sak gäller för sum, product, solve och integrate:
derivative(a*x^2, x, 2) ger Unsupported: Unknown name: aa = 3derivative(a*x^2, x, 2) ger 12Resultatet uppskattas utifrån närliggande värden på båda sidor om punkten. Om den verkliga lutningen är ett enkelt tal sparar Varlig det talet, så exakt jämförelse fungerar. Irrationella lutningar, till exempel för exp(x), behåller alla beräknade siffror. Jämför därför sådana resultat med en tolerans:
derivative(x^3, x, 2) == 12 ger trueabs(derivative(exp(x), x, 1) - e) < 1e-6 ger trueUttrycket måste vara glatt, utan hörn eller avbrott, i punktens omgivning. derivative(abs(x), x, 0) ger ett fel eftersom abs har ett hörn vid noll. derivative(sqrt(x), x, 0) ger ett fel eftersom sqrt inte är definierad till vänster om noll.
Bestämda integraler
integrate(x^2, x, 0, 3) ger 9integrate(sin(x), x, 0, pi) ger 2integrate(x^2, x, 3, 0) ger -9integrate(4/(1 + x^2), x, 0, 1) ger 3.1415926536# Distance fallen in 3 s: integrate the speed, 9.8t m/sintegrate(9.8*t, t, 0, 3) ger 44.1Argumenten är uttrycket, variabeln, den nedre gränsen och den övre gränsen, i samma ordning som för sum. Resultatet är arean med tecken under kurvan mellan gränserna. Om du byter plats på gränserna byter resultatet tecken; lika gränser ger noll. Du kan integrera egna funktioner, till exempel integrate(power(t), t, 0, 4).
integrate fungerar numeriskt, så några saker är utom räckhåll:
- Obestämd integrering stöds inte. Resultatet är alltid ett tal, aldrig en formel.
- Båda gränserna måste vara ändliga tal; det finns inget sätt att integrera ut till oändligheten.
- Uttrycket måste vara definierat i hela intervallet.
integrate(1/sqrt(x), x, 0, 1)ger ett fel eftersom1/sqrt(0)innebär division med noll, trots att själva arean är ändlig. - Uttryck med hopp, skarpa toppar eller mycket snabba svängningar kan ge inexakta resultat eller ett fel.
- Enheter accepteras inte, så lämna dem i en kommentar, precis som i det sista exemplet.
Algoritmer och konvergens
Du behöver inte dessa detaljer för vardaglig användning, men de hjälper när ett resultat ser fel ut eller en rad ger ett fel.
solve använder bisektion: intervallet halveras upprepade gånger och den halva där tecknet ändras behålls. Funktionen stannar när left - right avviker från noll med högst 10⁻¹⁰ och intervallet är tillräckligt smalt. Efter 128 halveringar avbryts sökningen med ett fel om villkoren inte har uppfyllts.
Symbolisk derivative tillämpar de vanliga deriveringsreglerna steg för steg utan förenkling. Resultatet får vara högst 8 192 tecken långt. Detta är inget fullständigt datoralgebrasystem.
Numerisk derivative jämför centrala differenser med allt mindre steglängd och kontrollerar lutningen från vardera sidan separat. Om de inte stämmer överens, eller ett närliggande värde är odefinierat, visas ett fel i stället för en gissning.
integrate använder adaptiva Gauss–Kronrod-regler med 7 och 15 punkter. De två uppskattningarna jämförs på varje delintervall. Delintervallet med störst uppskattat fel delas tills det totala uppskattade felet är mindre än 10⁻⁹ × max(1, |answer|). Högst 2 048 delningar, 20 delningsnivåer och sammanlagt 100 000 steg tillåts. Utvärderingspunkterna är inte jämnt fördelade, så ett snabbt svängande uttryck som cos(128*pi*x) från 0 till 1 integreras korrekt till ungefär noll i stället för att misstas för en konstant. Feluppskattningen är ändå heuristisk. Tolka därför resultat för uttryck med singulariteter eller diskontinuiteter med försiktighet.
De fullständiga reglerna finns i referensboken för avancerad matematik.
Samlat exempel
Här kontrolleras en fysikuppgift: en boll kastas rakt upp med 19,6 m/s och tyngdaccelerationen antas vara 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) ger 4# Speed after 1 second, from the slope of the heightderivative(height(t), t, 1) ger 9.8# Highest point, where the velocity is zeropeak = solve(velocity(t) = 0, t, 0, landing) ger 2height(peak) ger 19.6# Check: integrating the velocity up to the peak gives the same heightintegrate(velocity(t), t, 0, peak) ger 19.6Bollen landar efter 4 sekunder och når höjden 19,6 m efter 2 sekunder. Den nedre gränsen 1 på raden landing hindrar solve från att hitta den andra roten vid t = 0. Den sista raden bekräftar höjden på ett annat sätt genom att integrera hastigheten.