Sommatorie, equazioni e analisi
Questa pagina spiega come sommare o moltiplicare una successione di termini, risolvere equazioni, calcolare derivate come formule o in un punto e valutare integrali definiti. È utile quando un problema richiede la notazione Σ o Π, quando è difficile risolvere un’equazione a mano o quando vuoi verificare una derivata o l’area sotto una curva in un esercizio.
Tutte queste funzioni prendono un nome variabile come uno dei loro argomenti, come il k in sum(k^2, k, 1, 10). Quel nome esiste solo all'interno della chiamata, quindi non cambia mai un valore dello stesso nome altrove nella tua nota.
Somme e prodotti finiti
sum(k, k, 1, 100) dà 5,050sum(k^2, k, 1, 10) dà 385summation(2*k - 1, k, 1, 10) dà 100product(k, k, 1, 5) dà 120Gli argomenti sono l’espressione, la variabile, il valore iniziale e quello finale. Entrambi gli estremi sono inclusi: sum(k, k, 1, 100) calcola 1 + 2 + … + 100. summation è un altro nome per sum. La terza riga mostra che la somma dei primi dieci numeri dispari è 10²; l’ultima calcola il fattoriale di 5.
Le somme supportano importi monetari e unità di misura, quindi si prestano ai versamenti periodici:
# £1,200 paid in at the start of each year for 5 years, at 5%sum(£1200 * 1.05^k, k, 1, 5) dà £6,962.30Un prodotto è utile per concatenare probabilità. La probabilità che almeno due persone in un gruppo di 23 compiano gli anni lo stesso giorno è uno meno la probabilità che tutti e 23 i compleanni siano diversi:
p = 1 - product((365 - k)/365, k, 0, 22)(p as %) to 1 dp dà 50.7%Alcuni dettagli:
- Il primo e l'ultimo valore devono essere numeri interi.
- Se l'ultimo valore è inferiore al primo, non ci sono termini: la somma è 0 e il prodotto è 1.
- Una singola somma o un singolo prodotto può contenere al massimo 10.000 termini.
- Le somme possono essere annidate:
sum(sum(j, j, 1, n), n, 1, 4)restituisce20. Le chiamate annidate condividono un unico limite complessivo di elaborazione. - Per sommare i valori che hai già, usa invece una lista:
sum([4, 8, 15]). Vedi Elenchi e statistiche.
Risolvi esattamente un'equazione
Se riceve soltanto un’equazione, solve ne legge i coefficienti e calcola la soluzione come faresti su carta:
solve(2x + 6 = 10) dà 2solve(x/3 + 1 = 4) dà 9solve(5x + 3 = 2x - 9) dà -4# Candles sell for 12, cost 4 each to make, on 2,000 of fixed costssolve(12n = 2000 + 4n) dà 250L’incognita è l’unico nome nell’equazione a cui non è già assegnato un valore; i nomi già definiti vengono sostituiti con i rispettivi valori. Se ometti il secondo membro, l’espressione viene posta uguale a zero.
Un’equazione lineare restituisce un numero. Un’equazione di secondo grado restituisce una lista delle radici reali distinte in ordine crescente; una radice doppia produce quindi una lista con un solo elemento:
solve(x^2 - 5x + 6 = 0) dà [2, 3]solve(x^2 = 9) dà [-3, 3]solve(x^2 - 6x + 9 = 0) dà [3]solve(x^2 - 2 = 0) dà [-1.4142135624, 1.4142135624]Il formato del risultato dipende dall’equazione scritta, non dalle radici trovate: un’equazione di secondo grado restituisce sempre una lista.
Le equazioni lineari e quelle di secondo grado con discriminante quadrato perfetto vengono risolte con frazioni esatte: solve(x^2 - 5x + 6 = 0) restituisce davvero 2 e 3. Se il discriminante non è un quadrato perfetto, le radici si ottengono invece da radici quadrate decimali. Due valori approssimati possono risultare diversi al confronto anche se sembrano uguali: solve(x^2 - 2 = 0) e sqrt(2) visualizzano entrambi 1.4142135624, ma il confronto li considera diversi.
Le equazioni vengono risolte su numeri senza unità. Unità di misura e importi monetari vengono rifiutati, perché le trasformazioni algebriche non ne garantirebbero la conservazione. Per la regola completa, vedi Garanzie del motore di calcolo.
Quando dice di no
Il risultato non viene stimato per tentativi. Se un’equazione non ha radici reali, viene segnalato, senza cercare radici complesse. Le equazioni di grado superiore al secondo vengono rifiutate, indicando la forma numerica come alternativa:
solve(x^2 + 1 = 0) dà Error: no real solutionsolve(x^3 - 1 = 0) dà 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) dà Unsupported: solve reads a polynomial in x of degree 1 or 2; write solve(expression,x,lower,upper) to search for one root numericallyL’incognita non può comparire neppure al denominatore o nell’esponente. Se un’equazione contiene due nomi non definiti, viene indicato quale non è stato possibile interpretare:
solve(1/x = 2) dà Unsupported: The unknown cannot be a divisor; write solve(expression,x,lower,upper) to search for one root numericallysolve(2^x = 8) dà Unsupported: The unknown cannot be an exponent; write solve(expression,x,lower,upper) to search for one root numericallysolve(x + y = 10) dà 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 numericallySe l’equazione è soddisfatta da qualsiasi valore, viene segnalato anche questo, senza scegliere arbitrariamente una soluzione:
solve(x - x = 0) dà Unsupported: every value of x solves this equation, so it has no single answerTutti questi messaggi rimandano alla versione di solve con quattro argomenti descritta sotto, che cerca numericamente una radice senza richiedere una particolare forma dell’espressione. Per un sistema di equazioni lineari con più incognite, usa solve_system, descritto in Vettori e matrici.
Trova una radice numerica
Con quattro argomenti, solve svolge un’altra funzione: cerca, tra due estremi specificati, un valore della variabile che soddisfi l’equazione. Usala quando la forma esatta descritta sopra rifiuta l’equazione.
solve(x^2 = 2, x, 0, 2) dà 1.4142135624solve(x^2 - 4, x, -3, 0) dà -2solve(cos(x) = x, x, 0, 1) dà 0.7390851332# How long does a stone take to fall 44.1 m?solve(4.9*t^2 = 44.1, t, 0, 10) dà 3# Candles sell for £12, cost £4 each to make, plus £2,000 of fixed costssolve(12*n = 2000 + 4*n, n, 0, 1000) dà 250Gli argomenti sono l’equazione, la variabile, l’estremo inferiore e quello superiore. Puoi fornire un’equazione con = oppure un’espressione senza uguaglianza, che solve interpreta come expression = 0.
Scegliere i limiti
Per usare solve, la differenza fra i due membri deve cambiare segno tra gli estremi indicati. In altre parole, left - right deve essere positiva a un estremo e negativa all’altro, oppure esattamente zero a un estremo. La funzione restringe quindi l’intervallo fino a trovare il punto in cui i due membri coincidono.
Questo ha alcune conseguenze:
- Se ci sono due radici tra i limiti, il segno potrebbe non cambiare nel complesso.
solve(x^2 - 4, x, -3, 3)fallisce, perchéx^2 - 4è positivo ad entrambe le estremità. Usa dei limiti che circondano una radice, come0e3. - Una radice in cui la curva tocca solo zero, come
x^2 = 0, non può essere trovata in questo modo, perché il segno non cambia mai. - L’espressione deve essere definita in tutto l’intervallo.
solve(sqrt(x) = 2, x, -1, 10)fallisce perchésqrtdi un numero negativo genera un errore. Usa invece0come estremo iniziale. - Una discontinuità che passa da un lato all’altro dello zero, come
1/xvicino a0, non è una radice: in quel casosolverestituisce un errore. - L’estremo inferiore deve essere minore di quello superiore, ed entrambi devono essere numeri senza unità.
solve restituisce una sola radice, mai la lista di tutte le radici. Funziona soltanto con numeri senza unità, quindi ometti le unità dall’equazione.
Arrotondamento e riutilizzo
Il risultato è una buona approssimazione numerica, ma l’ultima cifra visualizzata può essere inesatta. Aggiungi to 4 dp, o il numero di decimali desiderato, sulla stessa riga per arrotondare la visualizzazione, oppure assegna prima un nome al risultato per riutilizzarlo:
solve(sqrt(x) = 2, x, 0, 10) dà 4.0000000001solve(sqrt(x) = 2, x, 0, 10) to 4 dp dà 4side = solve(sqrt(x) = 2, x, 0, 10) dà 4.0000000001side * 3 to 2 dp dà 12Puoi inserire solve in una funzione personalizzata per riutilizzarla con valori diversi:
root(y) = solve(x^2 = y, x, 0, 10)root(9) dà 3Per diverse equazioni lineari in diverse incognite, usa solve_system da Vettori e matrici.
Derivazione simbolica
Con due argomenti, differentiate (o derivative ) dà la derivata come formula:
differentiate(sin(x), x) dà cos(x)derivative(x^3, x) dà (3*(x^(3-1)))derivative(x * sin(x), x) dà (sin(x)+(x*cos(x)))derivative(exp(2*x), x) dà (exp((2*x))*2)Il risultato non è semplificato e ogni passaggio è racchiuso tra parentesi: (3*(x^(3-1))) è 3x². I decimali nella tua espressione tornano come frazioni, quindi 19.6 appare come (98/5).
Il risultato è testo, non qualcosa con cui Varlig può calcolare. Per usarlo, digita la formula in una tua funzione:
slope(x) = 3*x^2slope(2) dà 12La derivazione simbolica supporta:
+,-,*,/e potenze, usando le regole della somma, del prodotto, del quoziente, della potenza e della catena- Le funzioni
sin,cos,tan,sinh,cosh,exp,lnesqrt - Altri nomi, che sono trattati come costanti e rimangono come nomi nel risultato
Un nome non deve necessariamente avere un valore nella nota: puoi quindi derivare una formula che contiene simboli:
derivative(a*x^2, x) dà (a*(2*(x^(2-1))))Altre funzioni, come abs, log o una funzione personalizzata, generano un errore. Per queste usa la forma numerica descritta sotto. La formula risultante non riporta inoltre le restrizioni dell’espressione originale: la derivata di sqrt(x) è valida solo dove lo è sqrt(x), anche se (1/(2*sqrt(x))) sembra una formula autonoma.
Derivazione numerica
Con un terzo argomento, derivative dà la pendenza in quel punto come valore numerico:
derivative(x^3, x, 2) dà 12differentiate(sin(x), x, 0) dà 1derivative(sqrt(x), x, 4) dà 0.25height(t) = 20*t - 4.9*t^2derivative(height(t), t, 1) dà 10.2Questa forma funziona anche con le funzioni definite nella nota, come height sopra, a differenza della forma simbolica. Poiché calcola un numero, tutti gli altri nomi nell’espressione devono avere un valore. Lo stesso vale per sum, product, solve e integrate:
derivative(a*x^2, x, 2) dà Unsupported: Unknown name: aa = 3derivative(a*x^2, x, 2) dà 12Il risultato è una stima ottenuta da valori vicini al punto, da entrambi i lati. Quando la pendenza esatta è un numero semplice, Varlig memorizza quel numero e permette quindi un confronto esatto. Le pendenze irrazionali, come quella di exp(x), conservano tutte le cifre disponibili: confrontale usando una tolleranza.
derivative(x^3, x, 2) == 12 dà trueabs(derivative(exp(x), x, 1) - e) < 1e-6 dà trueL’espressione deve essere regolare nell’intorno del punto, senza punti angolosi o discontinuità. derivative(abs(x), x, 0) genera un errore perché abs ha un punto angoloso in zero; derivative(sqrt(x), x, 0) genera un errore perché sqrt non è definita a sinistra di zero.
Integrazione definita
integrate(x^2, x, 0, 3) dà 9integrate(sin(x), x, 0, pi) dà 2integrate(x^2, x, 3, 0) dà -9integrate(4/(1 + x^2), x, 0, 1) dà 3.1415926536# Distance fallen in 3 s: integrate the speed, 9.8t m/sintegrate(9.8*t, t, 0, 3) dà 44.1Gli argomenti sono l’espressione, la variabile, l’estremo inferiore e quello superiore, nello stesso ordine di sum. Il risultato è l’area con segno sotto la curva tra i due estremi. Scambiando gli estremi cambia il segno; estremi uguali danno zero. Puoi integrare funzioni definite nella nota, come integrate(power(t), t, 0, 4).
integrate esegue un calcolo numerico, quindi presenta alcune limitazioni:
- Non c'è integrazione indefinita: si ottiene sempre un valore numerico, mai una formula.
- Entrambi gli estremi devono essere numeri finiti: non sono supportati integrali estesi all’infinito.
- L’espressione deve essere definita in tutto l’intervallo.
integrate(1/sqrt(x), x, 0, 1)genera un errore perché1/sqrt(0)comporta una divisione per zero, anche se l’area è finita. - Espressioni con salti, picchi o oscillazioni molto rapide possono produrre risultati imprecisi o un errore.
- Le unità non sono accettate, quindi lasciale in un commento, come nell'ultimo esempio.
Algoritmi e convergenza
Questi dettagli non sono necessari nell’uso quotidiano, ma aiutano a capire un risultato inatteso o un errore su una riga.
solve usa il metodo di bisezione: dimezza ripetutamente l’intervallo, conservando la metà in cui cambia il segno. Si ferma quando il valore assoluto di left - right non supera 10⁻¹⁰ e l’intervallo è abbastanza stretto; dopo 128 dimezzamenti senza successo restituisce un errore.
La forma simbolica di derivative applica le regole standard passo dopo passo, senza semplificare. Il risultato può contenere al massimo 8.192 caratteri. Non si tratta di un sistema completo di algebra simbolica.
La forma numerica di derivative confronta differenze centrate con passi progressivamente più piccoli e verifica separatamente la pendenza da ciascun lato. Se le due stime non concordano, oppure un valore vicino al punto non è definito, restituisce un errore invece di una stima inaffidabile.
integrate usa formule adattive di Gauss–Kronrod a 7 e 15 punti. Confronta le due stime su ogni sottointervallo e suddivide quello con l’errore stimato maggiore, finché l’errore stimato totale è inferiore a 10⁻⁹ × max(1, |risultato|). Ammette fino a 2.048 suddivisioni, 20 livelli di suddivisione e un limite condiviso di 100.000 passaggi. I punti di campionamento non sono equidistanti: un’oscillazione rapida come cos(128*pi*x) tra 0 e 1 viene quindi integrata correttamente ottenendo circa zero, senza scambiarla per una costante. La stima dell’errore rimane euristica: valuta con cautela i risultati per espressioni con singolarità o discontinuità.
Le regole complete sono nella documentazione di riferimento sulla matematica avanzata.
Un esempio completo
Ecco come verificare un esercizio di fisica: una palla lanciata verticalmente verso l’alto a 19,6 m/s, con accelerazione di gravità di 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) dà 4# Speed after 1 second, from the slope of the heightderivative(height(t), t, 1) dà 9.8# Highest point, where the velocity is zeropeak = solve(velocity(t) = 0, t, 0, landing) dà 2height(peak) dà 19.6# Check: integrating the velocity up to the peak gives the same heightintegrate(velocity(t), t, 0, peak) dà 19.6La palla torna a terra dopo 4 secondi e raggiunge 19,6 m dopo 2 secondi. L’estremo inferiore 1 nella riga landing evita che solve trovi l’altra radice, t = 0. L’ultima riga verifica l’altezza in un altro modo, integrando la velocità.