Hoppa till innehåll
Varlig-guiden
Varligs startsida

Avancerad matematik: funktioner och gränser

Den här sidan sammanfattar den avancerade matematiken i Varlig Calc: listor, vektorer och matriser, komplexa tal, summor och produkter, ekvationslösning samt differential- och integralkalkyl. För varje område beskrivs vad funktionerna gör, vilka indata de godtar, hur exakta resultaten är och vilka begränsningar som gäller. Använd sidan för att kontrollera detaljerna när ett resultat överraskar dig.

För introduktioner med fler exempel, se Listor och statistik, Vektorer och matriser, Komplexa tal och Summering, ekvationslösning och analys.

Översikt

Funktion Exempel Resultat
Lista [1, 2+3, 4*2] [1, 5, 8]
Element ur en lista [10, 20, 30][1] 20
Element ur en nästlad lista [[1,2],[3,4]][1][0] 3
Summa av storheter sum([1 kg, 500 g]) 1.5 kg
Statistik average([1,2,3]), median([5,1,3]) 2, 3
Intervall med nedräkning range(5, 1, -2) [5, 3, 1]
Addera listor [1,2] + [3,4] [4, 6]
Matrisprodukt [[1,2],[3,4]] * [[1,0],[0,1]] [[1, 2], [3, 4]]
Invers inverse([[1,2],[3,4]]) [[-2, 1], [1.5, -0.5]]
Determinant det([[1,2],[3,4]]) -2
Transponering transpose([[1,2],[3,4]]) [[1, 3], [2, 4]]
Linjärt system solve_system([[2,1],[1,2]], [34,29]) [13, 8]
Komplex aritmetik (2+3i) * (2-3i) 13
Komplex kvadratrot sqrt(complex(-4,0)) 2i
Vanligaste värdet mode([1,2,2,3]) 2
Percentil percentile([1,2,3,4],25) 1.75
Populationsstandardavvikelse population_stddev([1,2,3,4]) 1.1180339887
Summering över ett intervall sum(k^2, k, 1, 10) 385
Produkt över ett intervall product(k, k, 1, 5) 120
Lös en ekvation exakt solve(x^2 - 5x + 6 = 0) [2, 3]
Lös en ekvation i intervallet solve(x^2 = 4, x, 0, 3) 2
Symbolisk derivata differentiate(sin(x), x) cos(x)
Derivata i en punkt derivative(x^3, x, 2) 12
Bestämd integral integrate(x^2, x, 0, 3) 9

Listor, matriser och komplexa tal är vanliga värden. Du kan ge dem namn och skicka dem till egna funktioner. De räknas om när du ändrar en tidigare rad.

calc
squares(n) = sum(k^2, k, 1, n)
squares(3) ger 14
first(items) = items[0]
first([10, 20]) ger 10
root(y) = solve(x^2 = y, x, 0, 10)
root(9) ger 3

Vad beräkningsmotorn garanterar

Allt på den här sidan följer en regel: en beräkning ger antingen ett resultat som Varlig kan garantera eller ett felmeddelande som förklarar varför det inte går. En exakt beräkning ersätts aldrig med ett tal som bara ser rimligt ut.

Hur exakt resultatet är

Beräknas som Vad det täcker
Exakta bråk Ekvationskoefficienter och roten till en linjär ekvation; rötterna till en andragradsekvation vars diskriminant är en perfekt kvadrat; matrisoperationerna +, -, *, multiplikation med ett tal, transpose, det, inverse, rank och solve_system; median, mode, modes, percentile, quartile och alla tre variansformerna
Kvadratrot med decimalprecision stddev, sample_stddev, population_stddev och rötterna till övriga andragradsekvationer
Binära flyttal eigenvalues, qr, lu, svd, integrate och solve med fyra argument

Exakt betyder exakt: inget avrundas mellan tolkningen av raden och visningen av resultatet. Ett exakt resultat förblir därför exakt när det får ett namn, lagras och återanvänds. Ett approximativt resultat är samma slags decimalvärde med begränsad precision som sqrt returnerar. Det är inte korrekt avrundat till den sista visade siffran, så == är inget tillförlitligt sätt att jämföra två approximativa resultat. solve(x^2 - 2 = 0) och sqrt(2) visas båda som 1.4142135624 men är inte lika.

Ett resultat blandar aldrig exakta och approximativa värden. Om en andragradsekvations diskriminant inte är en perfekt kvadrat blir båda rötterna approximativa.

Enheter

Operation Regel
Matriser Endast vanliga tal; enheter, pengar och komplexa element godtas inte
Ekvationer Endast vanliga tal i båda leden
median, mode, modes, percentile, quartile, stddev, population_stddev En gemensam dimension eller vanliga tal. Kompatibla enheter omvandlas till det första värdets enhet, som resultatet behåller
variance, sample_variance, population_variance Endast vanliga tal: variansberäkningen kvadrerar observationerna och bevarar inga enheter

Om värden med enheter blandas med värden utan enheter blir det ett fel. Enheterna ignoreras inte tyst. Det finns ett sedan tidigare gällande undantag: ett ensamt 0 räknas i de övriga värdenas enhet.

Det här godtas inte

Inget av följande ger ett tal eller en mening som resultat. Varje fall ger ett fel som anger vad som inte stöds och, när ett alternativ finns, vilken form du kan skriva i stället:

  • En polynomekvation av högre grad än 2, en ekvation som inte är ett polynom, en obekant i en nämnare eller exponent, två namn utan värden, en ekvation utan obekant eller en ekvation med enheter eller pengar. Alla dessa hänvisar till numerisk solve med fyra argument.
  • En ekvation utan reell rot ger ett fel i stället för en komplex rot. En ekvation som är sann för alla värden ger ett fel i stället för att välja ett av dem.
  • En matrisoperation med dimensioner som inte passar ihop eller kräver en kvadratisk matris, inversen av en singulär matris eller ett element som inte är ett vanligt tal.
  • mode när inget värde upprepas eller flera värden delar högsta frekvens, en percentilnivå utanför 0–100, en kvartil utanför 0–4 och all statistik utom sum, product och count för en tom lista.

Följande stöds avsiktligt inte: symbolisk omformning utöver att samla polynomkoefficienter, icke-linjära ekvationssystem, komplexa rötter till en reell ekvation, matriser med enheter eller pengar, symbolisk integration och grafritning.

Meddelandena själva listas i Fel, diagnostik och gränser.

Skriva listor och matematiska funktioner

  • Kommatecken skiljer listelement och argument åt. Ett kommatecken följt av ett mellanslag är alltid en avgränsare. Ett kommatecken följt av exakt tre siffror kan gruppera tusental, så [1,200, 1,800] innehåller två element. Utan mellanslag skiljer varje kommatecken elementen åt, som i [12,-51,4]. När båda tolkningarna är möjliga, som i [1,234], visar felmeddelandet båda sätten att skriva det. Använd decimalpunkt för decimaldelen i ett tal.
  • Matriser är listor av rader, till exempel [[1,2],[3,4]]. Det finns ingen förkortad form med semikolon som [1,2;3,4].
  • Index börjar på 0 och måste vara heltal som är minst 0. Ett index bortom listans slut ger ett fel. Det börjar aldrig om från början eller kapas till ett giltigt värde.
  • Antalet argument kontrolleras. sqrt(4,9) ger ett fel i stället för en gissning.

Listor och statistik

Dessa funktioner godtar en lista: length eller count, sum, product, average eller mean, median, min, max, mode och modes, percentile och quartile, samt spridningsfunktionerna variance, sample_variance, population_variance, stddev, sample_stddev och population_stddev.

  • mode ger bara ett resultat när ett värde är entydigt vanligast. Om flera värden delar högsta frekvens eller inget värde upprepas blir det ett fel som hänvisar till modes, median eller average. modes returnerar alla värden som delar högsta frekvens.
  • percentile(list, rank) tar en percentilnivå från 0 till 100 och interpolerar linjärt mellan de två närmaste nivåerna enligt den inkluderande definitionen: den 50:e percentilen är medianen, och den 0:e och 100:e är minsta respektive största värdet. quartile(list, k) tar ett heltal k från 0 till 4 och motsvarar percentile(list, 25k).
  • variance och stddev är stickprovsvarianterna. De dividerar med n - 1 och kräver två värden. population_variance och population_stddev dividerar med n och kräver ett värde. sample_variance och sample_stddev är längre namn för de korta varianterna.
  • En tom lista ger sum 0, product 1 och count 0. Övriga statistiska funktioner ger fel för en tom lista.
  • Två lika långa listor adderas och subtraheras element för element. Du kan multiplicera eller dividera en lista med ett tal och jämföra två listor med ==.
  • range(start, end, step) inkluderar båda ändarna. Steget är valfritt.
  • dot(a, b) beräknar skalärprodukten av två reella vektorer.
calc
spend = [420, 385, 510, 460] ger [420, 385, 510, 460]
sum(spend) ger 1,775
average(spend) ger 443.75
median(spend) ger 440
spend[0] ger 420
spend * 1.1 ger [462, 423.5, 561, 506]
range(0, 1, 0.25) ger [0, 0.25, 0.5, 0.75, 1]

Listomvandlingar

Anrop Resultat Vad det gör
sort([3,1,2]) [1, 2, 3] Sorterar tal utan enheter i stigande ordning; lika element behåller sin ordning
reverse([1,2,3]) [3, 2, 1] Vänder ordningen i valfri lista
unique([3,1,3,2]) [3, 1, 2] Behåller första förekomsten av varje värde; elementen måste matcha exakt, inklusive enheter
slice([10,20,30,40], 1, 3) [20, 30] Tar elementen från startindex fram till, men inte inklusive, slutindex
map(x^2, x, [1,2,3]) [1, 4, 9] Beräknar uttrycket för varje element
filter(x > 1, x, [1,2,3]) [2, 3] Behåller de element där villkoret är sant
variance([1,2,3]) 1 Exakt stickprovsvarians, med division med antalet minus ett
  • slice kräver heltal där 0 ≤ start ≤ end ≤ listans längd. Andra gränser ger fel.
  • variance behöver minst två tal utan enheter.
  • map och filter tar först uttrycket, sedan namnet som representerar varje element och sist listan. Namnet gäller bara inom anropet och ändrar alltså inte något namn som definierats på annat håll. Uttrycket i filter måste ge true eller false.

Vektorer och matriser

Vektorer är platta listor och matriser är listor med rader. Matriser måste vara rektangulära, innehålla reella tal utan enheter och ha 1 till 32 rader och kolumner.

Funktion Vad det gör
A * B Matrisprodukt; A:s kolumnantal måste vara lika med B:s radantal
transpose(A) Byter rader och kolumner
shape(A) [rows, columns]
identity(n) En enhetsmatris med n rader och n kolumner
trace(A) Summan av diagonalelementen i en kvadratisk matris
det(A) Determinant för en kvadratisk matris
inverse(A) Inversen av en kvadratisk matris; en singulär matris ger fel
rank(A) Rang genom exakt elimination, för valfri rektangulär matris
dot(a, b) Skalärprodukt av två lika långa vektorer
cross(a, b) Kryssprodukt av två vektorer med tre element
solve_system(A, b) Löser A*x = b för en kvadratisk matris A och en platt vektor b
eigenvalues(A) Egenvärden för en reell kvadratisk matris, inklusive komplexa par, utan bestämd ordning
qr(A) [Q, R] där Q*R är ungefär A
lu(A) [P, L, U] där P*A är ungefär L*U; endast kvadratiska matriser
svd(A) [U, s, Vt] där s är en platt lista med singularvärden och A är ungefär U*diag(s)*Vt

Exakta resultat. det, inverse, rank och solve_system använder exakta bråk. rank har ingen avrundningstolerans. solve_system rapporterar ett fel för ett singulärt system och hanterar inte icke‑linjära system eller system med oändligt många lösningar.

Approximativa resultat. eigenvalues, qr, lu och svd använder flyttal och kontrollerar att utdata är ändliga. qr och svd godtar rektangulära matriser och returnerar de kompakta (”tunna”) faktorerna. Beräkningar av egenvärden och SVD avbryts efter 10 000 iterationer. I det visade resultatet skrivs ett element som bara motsvarar avrundningsfel i förhållande till det största elementet som 0. Vid indexering returneras däremot det lagrade värdet. Illakonditionerade matriser kan ge sämre noggrannhet, så testa inte dessa resultat med ==.

calc
# Two adult tickets and one child ticket cost 34; one adult and two children cost 29
solve_system([[2,1],[1,2]], [34,29]) ger [13, 8]
det([[2,1],[1,2]]) ger 3
rank([[1,2],[2,4]]) ger 1

Komplexa tal

i är den imaginära enheten, såvida du inte har definierat ett namn eller en anpassad enhet som kallas i.

  • Funktioner: complex(real, imaginary), real, imag, conj, abs, arg (i radianer) och sqrt (huvudroten) godtar alla komplexa tal.
  • Exakthet: delarna, aritmetiken och potenser med heltalsexponent förblir exakta. Övriga rötter och arg är approximativa.
  • Reella resultat: när imaginärdelarna tar ut varandra, som i (2+3i) * (2-3i), blir resultatet ett vanligt reellt tal. Ett värde som skrivs som komplext, till exempel -4 + 0i eller complex(-4,0), förblir komplext genom beräkningar och namngivning även om det visas som -4.
  • Kvadratrötter och logaritmer av negativa tal: sqrt(-4), ln(-1) och log(-100) stannar inom de reella talen och visar ett fel om imaginära tal. Felmeddelandet anger den komplexa form du kan skriva i stället, till exempel sqrt(-4 + 0i). Det uttrycket, eller sqrt(complex(-4,0)), ger 2i.
  • Visning: en del som enbart är ett avrundningsfel från flyttalsberäkning visas som 0, så exp(i*pi) visas som -1. Det lagrade värdet behåller sina siffror.
  • Jämförelser: < och > fungerar endast när båda de imaginära delarna är noll.
  • Andra funktioner: sin, cos, tan och deras inverser, de hyperboliska funktionerna och deras inverser, exp, ln, log eller log10, log2, cbrt samt potenser med bråktal eller komplexa tal som exponent godtar alla komplexa tal. De använder flyttal och huvudgrenar. Logaritmen av noll och alla icke-ändliga resultat ger fel.
calc
(2+3i) * (2-3i) ger 13
abs(3+4i) ger 5
sqrt(-4 + 0i) ger 2i
sqrt(complex(-4,0)) ger 2i
sqrt(-4) ger Error: imaginary number. For a complex answer, write sqrt(-4 + 0i)
exp(i*pi) ger -1

Summor och produkter

sum(expression, name, from, to) adderar uttrycket för varje heltal från from till to, inklusive båda ändarna. summation är ett annat namn för det, och product multiplicerar istället.

  • Namnet är lokalt för anropet. Det ändrar inget namn som du redan har definierat och gör inte heller raden beroende av ett sådant namn.
  • Du kan lägga en summa eller produkt inuti en annan.
  • Om to är mindre än from är intervallet tomt: summan är 0 och produkten är 1.
  • Ett enskilt anrop får ha högst 10 000 termer.
calc
sum(k^2, k, 1, 10) ger 385
product(k, k, 1, 5) ger 120
k = 7 ger 7
sum(k, k, 1, 3) ger 6
k ger 7

Lösa ekvationer

solve(equation) läser en polynomekvation av grad 1 eller 2 med en okänd och beräknar dess rötter. Den okända är det enda namnet i ekvationen som inte har något värde; ett namn som har ett läses som dess mängd, och högerledet kan utelämnas, i vilket fall uttrycket sätts till noll.

  • En linjär ekvation returnerar ett tal. En andragradsekvation returnerar en lista med sina distinkta reella rötter i stigande ordning. En dubbelrot ger alltså en lista med ett element. Resultatets form bestäms av den skrivna graden, inte av antalet hittade rötter.
  • Koefficienterna och omformningen av dem är exakta. Detsamma gäller rötterna när diskriminanten är en perfekt kvadrat. Övriga andragradsekvationer ger två rötter beräknade med decimala kvadratrötter.
  • Båda leden måste bestå av vanliga tal. Enheter, pengar och komplexa värden godtas inte.
  • En ekvation utan reell rot ger Error: no real solution i stället för en komplex rot. En ekvation som är sann för alla värden meddelar detta i stället för att välja ett värde.
  • Allt annat, som grad 3 och högre, en ekvation som inte är ett polynom, en obekant i en nämnare eller exponent, eller ytterligare ett namn utan värde, avvisas med ett meddelande som hänvisar till formen med fyra argument nedan.
calc
solve(2x + 6 = 10) ger 2
solve(x^2 - 5x + 6 = 0) ger [2, 3]
solve(x^2 - 2 = 0) ger [-1.4142135624, 1.4142135624]
solve(x^2 + 1 = 0) ger Error: no real solution

solve(expression, name, lower, upper) är en annan funktion: den hittar ett reellt värde på name mellan lower och upper där uttrycket är noll. solve(left = right, name, lower, upper) hittar ett värde där leden är lika.

  • Gränserna måste vara ändliga tal, och lower måste vara mindre än upper.
  • En rot exakt vid en gräns accepteras. Annars måste uttrycket vara positivt vid en gräns och negativt vid den andra, och det ska vara kontinuerligt däremellan.
  • Sökningen halverar intervallet i varje steg. Den lyckas när uttryckets avstånd från noll är högst 1e-10 och intervallet är tillräckligt smalt, inom 128 steg. Om uttrycket är odefinierat vid en kontrollerad punkt eller om sökningen inte konvergerar visas ett fel på raden.
  • Det hittar en rot, inte alla. För system av linjära ekvationer, använd solve_system.
calc
solve(1500 + 12*x = 20*x, x, 0, 1000) ger 187.5
solve(x^2 = 2, x, 0, 2) ger 1.4142135624

Differential- och integralkalkyl

Symboliska derivator

differentiate(expression, name), som också kan skrivas derivative(expression, name), returnerar derivatan som text.

  • Den använder reglerna för summa, produkt, kvot, potens och sammansatta funktioner på reell aritmetik utan enheter, samt sin, cos, tan, sinh, cosh, exp, ln och sqrt.
  • Andra namn i uttrycket behandlas som konstanter, oavsett om de har ett värde i anteckningen: differentiate(a*x^2, x) ger (a*(2*(x^(2-1)))).
  • Resultatet är inte förenklat och är begränsat till 8 192 tecken.
  • Andra funktioner, som abs, ger fel. Använd numerisk derivering i en punkt för dem. Detta är inte ett fullständigt datoralgebrasystem.
  • Derivatan har samma begränsningar av definitionsmängden som ursprungsuttrycket.
calc
differentiate(sin(x), x) ger cos(x)
differentiate(x^3, x) ger (3*(x^(3-1)))

Derivator i en punkt

derivative(expression, name, point), eller differentiate med tre argument, beräknar lutningen numeriskt i en punkt. Funktionen använder förfinade centrala differenser och jämför dem med ensidiga uppskattningar. Uttrycket kan använda egna funktioner, men måste vara glatt nära punkten och använda reella tal utan enheter. Om uppskattningen inte konvergerar eller ett beräknat provvärde är odefinierat visas ett fel på raden.

Eftersom de numeriska formerna beräknar ett tal måste alla namn utom variabeln ha ett värde. Det gäller derivator i en punkt, sum, product, solve och integrate. Ett namn utan värde ger Unsupported: Unknown name: följt av namnet.

calc
derivative(x^3, x, 2) ger 12
f(x) = x^2
derivative(f(x), x, 3) ger 6
differentiate(a*x^2, x) ger (a*(2*(x^(2-1))))
derivative(a*x^2, x, 3) ger Unsupported: Unknown name: a

Bestämda integraler

integrate(expression, name, lower, upper) beräknar arean under uttrycket mellan två ändliga gränser.

  • Att byta gränser ändrar svarets tecken, och lika gränser ger noll.
  • Funktionen använder adaptiva Gauss–Kronrod-regler med 7 och 15 punkter som inte är jämnt fördelade. Det hindrar en regelbunden våg som cos(128*pi*x) från att lura metoden: integrate(cos(128*pi*x), x, 0, 1) ger ungefär -1.3e-15, vilket är noll inom avrundningsfelet.
  • Målet är ett uppskattat totalfel på högst 1e-9 gånger resultatets belopp, eller 1e-9 när beloppet är mindre än 1. Minst två förfiningsnivåer jämförs, avrundningsfel beaktas och delen med störst uppskattat fel förfinas först.
  • Beräkningen stannar efter 2 048 förfiningar, 20 underindelningsnivåer eller de 100 000 steg som delas med andra avancerade beräkningar på raden. Om en gräns nås eller ett provvärde är odefinierat blir det ett fel.
  • Feluppskattningen är en vägledning, ingen garanti. Använd glatta uttryck med ändliga värden. Resultat för uttryck med toppar, språng eller snabba svängningar kan vara felaktiga.
  • Obestämda integraler och oändliga gränser stöds inte.
calc
integrate(x^2, x, 0, 3) ger 9
integrate(x^2, x, 3, 0) ger -9

Argument och enheter i matematiska funktioner

  • factorial är ett annat namn för fact, och trunc för int.
  • sign returnerar -1, 0 eller 1. atan2(y, x) returnerar en vinkel i radianer som ett vanligt tal.
  • Det valfria andra argumentet för round, floor och ceil är ett steg, inte ett antal decimaler: round(17, 5) avrundar till närmaste 5. För att avrunda till decimaler, se Avrundning.
  • Logaritmer, exponentialfunktioner och hyperboliska funktioner godtar inte enheter eller pengar. Vanliga trigonometriska funktioner godtar vinklar som 30°.
  • Kvadrat- och kubikrötter behåller enheterna när enhetens exponent är jämnt delbar med rotens grad. Potenser av storheter behåller också enheterna. Temperaturer i Celsius och Fahrenheit kan inte kvadreras eller rotutdras.
calc
gcd(12, 18) ger 6
round(17, 5) ger 15
sin(30°) ger 0.5
sqrt(9 m²) ger 3 m
(2 kg)^2 ger 4 kg²

Begränsningar

Gränserna kontrolleras innan ett resultat visas:

  • 1 024 poster i en lista eller range
  • matriser upp till 32 × 32
  • 10 000 termer i en sum eller product
  • 16 nivåer av nästlade listor och funktionsanrop
  • 100 000 steg som delas av alla avancerade beräkningar på en rad, inklusive nästlade anrop
  • 4 096 bitar i ett bråks täljare eller nämnare, som på andra ställen i Varlig Calc

Om en gräns nås visas ett fel på den raden. Resten av anteckningen fortsätter fungera. En ofullständig summa, en ofullständig invers eller en rot som inte har konvergerat presenteras aldrig som ett resultat. Alla gränser och uppgifter om exakthet finns i Läsa resultat: visning och precision.