Sommes, équations et analyse
Cette page explique comment additionner ou multiplier une suite de termes, résoudre une équation, dériver une expression sous forme symbolique ou en un point, et calculer des intégrales définies. Ces outils sont utiles pour les notations Σ et Π, les équations difficiles à résoudre à la main, ou pour vérifier une dérivée ou une aire sous une courbe dans vos exercices.
Toutes ces fonctions prennent un nom de variable comme l'un de leurs arguments, comme le k dans sum(k^2, k, 1, 10). Ce nom n'existe qu'à l'intérieur de l'appel, il ne change donc jamais une valeur du même nom ailleurs dans votre note.
Sommes et produits finis
sum(k, k, 1, 100) donne 5,050sum(k^2, k, 1, 10) donne 385summation(2*k - 1, k, 1, 10) donne 100product(k, k, 1, 5) donne 120Les arguments sont l’expression, la variable, la première valeur et la dernière valeur. Les bornes sont incluses : sum(k, k, 1, 100) additionne 1 + 2 + … + 100. summation est un autre nom de sum. La troisième ligne montre que la somme des dix premiers nombres impairs vaut 10² ; la dernière calcule la factorielle de 5.
Les sommes acceptent les montants monétaires et les unités, ce qui convient par exemple à des versements d’épargne réguliers :
# £1,200 paid in at the start of each year for 5 years, at 5%sum(£1200 * 1.05^k, k, 1, 5) donne £6,962.30Un produit permet de combiner des probabilités. La probabilité qu’au moins deux personnes d’un groupe de 23 aient leur anniversaire le même jour est égale à 1 moins la probabilité que les 23 dates soient toutes différentes :
p = 1 - product((365 - k)/365, k, 0, 22)(p as %) to 1 dp donne 50.7%Quelques détails :
- Les premières et dernières valeurs doivent être des nombres entiers.
- Si la dernière valeur est inférieure à la première, il n'y a pas de termes : la somme est 0 et le produit est 1.
- Une seule somme ou un seul produit peut avoir au plus 10 000 termes.
- Les sommes peuvent être imbriquées, comme dans
sum(sum(j, j, 1, n), n, 1, 4), qui est20. Les appels imbriqués partagent une limite de travail globale. - Pour additionner des valeurs que vous avez déjà, utilisez plutôt une liste :
sum([4, 8, 15]). Voir Listes et statistiques.
Résoudre une équation de façon exacte
Avec une équation seule, solve lit les coefficients et calcule la solution comme vous le feriez sur papier :
solve(2x + 6 = 10) donne 2solve(x/3 + 1 = 4) donne 9solve(5x + 3 = 2x - 9) donne -4# Candles sell for 12, cost 4 each to make, on 2,000 of fixed costssolve(12n = 2000 + 4n) donne 250L’inconnue est le seul nom de l’équation sans valeur définie. Tout nom déjà défini est remplacé par sa valeur. Si vous omettez le membre droit, l’expression est considérée comme égale à zéro.
Une équation du premier degré renvoie un nombre. Une équation du second degré renvoie la liste de ses racines réelles distinctes, par ordre croissant : une racine double donne donc une liste d’un seul élément.
solve(x^2 - 5x + 6 = 0) donne [2, 3]solve(x^2 = 9) donne [-3, 3]solve(x^2 - 6x + 9 = 0) donne [3]solve(x^2 - 2 = 0) donne [-1.4142135624, 1.4142135624]Le type du résultat dépend de l’équation saisie, pas du nombre de racines trouvées : une équation du second degré renvoie toujours une liste.
Les équations du premier degré et celles du second degré dont le discriminant est un carré parfait sont résolues avec des fractions exactes : solve(x^2 - 5x + 6 = 0) donne bien 2 et 3. Sinon, les racines sont calculées à partir d’approximations décimales des racines carrées. Deux valeurs approchées peuvent sembler identiques sans être égales lors d’une comparaison : solve(x^2 - 2 = 0) et sqrt(2) affichent la valeur positive 1.4142135624, mais les valeurs calculées diffèrent.
La résolution porte sur des nombres sans unité. Les unités et les montants monétaires sont refusés pour éviter des transformations algébriques qui ne les préserveraient pas. Voir Garanties du moteur pour la règle complète.
Cas refusés
Le moteur ne devine pas. Il signale l’absence de racine réelle sans chercher de racine complexe. Les équations au-delà du second degré sont refusées, avec une invitation à utiliser la forme numérique :
solve(x^2 + 1 = 0) donne Error: no real solutionsolve(x^3 - 1 = 0) donne 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) donne Unsupported: solve reads a polynomial in x of degree 1 or 2; write solve(expression,x,lower,upper) to search for one root numericallyL’inconnue ne peut pas non plus apparaître au dénominateur ou dans un exposant. Si l’équation contient deux noms non définis, le message indique celui qui n’a pas pu être interprété :
solve(1/x = 2) donne Unsupported: The unknown cannot be a divisor; write solve(expression,x,lower,upper) to search for one root numericallysolve(2^x = 8) donne Unsupported: The unknown cannot be an exponent; write solve(expression,x,lower,upper) to search for one root numericallysolve(x + y = 10) donne 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 numericallyUne équation que chaque valeur satisfait le dit aussi, plutôt que d'en choisir une :
solve(x - x = 0) donne Unsupported: every value of x solves this equation, so it has no single answerTous ces refus renvoient à la forme de solve à quatre arguments décrite ci-dessous. Elle recherche numériquement une racine sans imposer la forme de l’expression. Pour plusieurs équations linéaires à plusieurs inconnues, utilisez solve_system, présenté dans Vecteurs et matrices.
Trouver une racine par calcul numérique
Avec quatre arguments, solve fonctionne autrement : il cherche, entre deux bornes fournies, une valeur de la variable qui vérifie l’équation. Utilisez cette forme lorsque la résolution exacte ci-dessus refuse l’équation.
solve(x^2 = 2, x, 0, 2) donne 1.4142135624solve(x^2 - 4, x, -3, 0) donne -2solve(cos(x) = x, x, 0, 1) donne 0.7390851332# How long does a stone take to fall 44.1 m?solve(4.9*t^2 = 44.1, t, 0, 10) donne 3# Candles sell for £12, cost £4 each to make, plus £2,000 of fixed costssolve(12*n = 2000 + 4*n, n, 0, 1000) donne 250Les arguments sont l'équation, la variable, la limite inférieure et la limite supérieure. Vous pouvez donner une équation avec =, ou une expression en soi, que solve traite comme expression = 0.
Choisir les bornes
solve exige un changement de signe entre les bornes : left - right doit être positif à une borne et négatif à l’autre, ou exactement nul à une borne. Il réduit ensuite l’intervalle jusqu’à trouver le point où les deux membres sont égaux.
Cela a quelques conséquences :
- S'il y a deux racines entre les limites, le signe peut ne pas changer dans l'ensemble.
solve(x^2 - 4, x, -3, 3)échoue, parce quex^2 - 4est positif aux deux extrémités. Utilisez des limites qui entourent une racine, telles que0et3. - Une racine où la courbe touche zéro sans changer de signe, comme pour
x^2 = 0, ne peut pas être trouvée de cette manière. - L’expression doit être définie sur tout l’intervalle.
solve(sqrt(x) = 2, x, -1, 10)échoue, carsqrtappliqué à un nombre négatif produit une erreur. Faites plutôt commencer l’intervalle à0. - Un changement de signe par discontinuité, comme pour
1/xau voisinage de0, n’est pas une racine :solverenvoie alors une erreur. - La borne inférieure doit être strictement inférieure à la borne supérieure. Les deux doivent être des nombres sans unité.
solve renvoie une seule racine, jamais la liste de toutes les racines. Il travaille uniquement avec des nombres sans unité : n’ajoutez donc pas d’unités dans l’équation.
Arrondi et réutilisation
Le résultat est une approximation numérique précise, dont le dernier chiffre affiché peut être inexact. Ajoutez to 4 dp, ou le nombre de décimales souhaité, sur la même ligne pour arrondir l’affichage. Vous pouvez aussi nommer d’abord le résultat pour le réutiliser :
solve(sqrt(x) = 2, x, 0, 10) donne 4.0000000001solve(sqrt(x) = 2, x, 0, 10) to 4 dp donne 4side = solve(sqrt(x) = 2, x, 0, 10) donne 4.0000000001side * 3 to 2 dp donne 12Vous pouvez intégrer solve à une fonction personnalisée pour le réutiliser avec différentes valeurs :
root(y) = solve(x^2 = y, x, 0, 10)root(9) donne 3Pour plusieurs équations linéaires à plusieurs inconnues, utilisez solve_system, présenté dans Vecteurs et matrices.
Dérivation symbolique
Avec deux arguments, differentiate, ou derivative, donne la dérivée sous forme de formule :
differentiate(sin(x), x) donne cos(x)derivative(x^3, x) donne (3*(x^(3-1)))derivative(x * sin(x), x) donne (sin(x)+(x*cos(x)))derivative(exp(2*x), x) donne (exp((2*x))*2)Le résultat n'est pas simplifié, et chaque étape est entre parenthèses : (3*(x^(3-1))) est 3x². Les décimales de votre expression reviendront sous forme de fractions, donc 19.6 apparaît comme (98/5).
Le résultat est du texte, pas une expression directement réutilisable dans un calcul. Pour l’utiliser, saisissez la formule dans une fonction personnalisée :
slope(x) = 3*x^2slope(2) donne 12La dérivation symbolique prend en charge :
+,-,*,/et les puissances, avec les règles de dérivation d’une somme, d’un produit, d’un quotient, d’une puissance et d’une fonction composée ;- Les fonctions
sin,cos,tan,sinh,cosh,exp,lnetsqrt - D'autres noms, qui sont traités comme des constantes et restent comme des noms dans le résultat
Un nom n’a pas besoin d’avoir une valeur définie dans la note. Vous pouvez donc dériver une formule contenant des symboles :
derivative(a*x^2, x) donne (a*(2*(x^(2-1))))Les autres fonctions, comme abs, log ou une fonction personnalisée, produisent une erreur. Utilisez alors la forme numérique ci-dessous. La formule obtenue ne reprend pas non plus les restrictions de l’expression d’origine : la dérivée de sqrt(x) ne peut être valide que là où sqrt(x) est définie, même si (1/(2*sqrt(x))) ressemble à une formule indépendante.
Dérivation numérique
Avec un troisième argument, derivative donne la pente à ce point comme une valeur numérique :
derivative(x^3, x, 2) donne 12differentiate(sin(x), x, 0) donne 1derivative(sqrt(x), x, 4) donne 0.25height(t) = 20*t - 4.9*t^2derivative(height(t), t, 1) donne 10.2Cette forme accepte les fonctions définies dans la note, comme height ci-dessus, contrairement à la forme symbolique. Comme elle calcule un nombre, tous les autres noms de l’expression doivent avoir une valeur. Il en va de même pour sum, product, solve et integrate :
derivative(a*x^2, x, 2) donne Unsupported: Unknown name: aa = 3derivative(a*x^2, x, 2) donne 12Le résultat est estimé à partir de valeurs proches, de part et d’autre du point. Lorsque la pente exacte est un nombre simple, Varlig conserve ce nombre, permettant une comparaison exacte. Les pentes irrationnelles, comme celle de exp(x), conservent leurs décimales : comparez-les avec une tolérance.
derivative(x^3, x, 2) == 12 donne trueabs(derivative(exp(x), x, 1) - e) < 1e-6 donne trueL’expression doit être régulière au voisinage du point, sans angle ni discontinuité. derivative(abs(x), x, 0) produit une erreur, car abs présente un point anguleux en zéro. derivative(sqrt(x), x, 0) produit aussi une erreur, car sqrt n’est pas définie à gauche de zéro.
Calcul d’une intégrale définie
integrate(x^2, x, 0, 3) donne 9integrate(sin(x), x, 0, pi) donne 2integrate(x^2, x, 3, 0) donne -9integrate(4/(1 + x^2), x, 0, 1) donne 3.1415926536# Distance fallen in 3 s: integrate the speed, 9.8t m/sintegrate(9.8*t, t, 0, 3) donne 44.1Les arguments sont l’expression, la variable, la borne inférieure et la borne supérieure, dans le même ordre que pour sum. Le résultat est l’aire algébrique sous la courbe entre les bornes. Inverser les bornes change le signe ; deux bornes égales donnent zéro. Vous pouvez intégrer une fonction définie dans la note, par exemple integrate(power(t), t, 0, 4).
integrate effectue un calcul numérique, avec certaines limites :
- Il ne calcule pas de primitive : le résultat est toujours un nombre, jamais une formule.
- Les deux bornes doivent être des nombres finis ; l’intégration jusqu’à l’infini n’est pas prise en charge.
- L’expression doit être définie sur tout l’intervalle.
integrate(1/sqrt(x), x, 0, 1)produit une erreur, car1/sqrt(0)divise par zéro, même si l’aire elle-même est finie. - Les expressions présentant des discontinuités, des pics ou des oscillations très rapides peuvent donner un résultat inexact ou une erreur.
- Les unités ne sont pas acceptées, alors laissez-les dans un commentaire, comme dans le dernier exemple.
Algorithmes et convergence
Vous n'avez pas besoin de ces détails pour un usage quotidien, mais ils aident lorsqu'un résultat semble faux ou qu'une ligne donne une erreur.
solve utilise la dichotomie : il divise successivement l’intervalle par deux et conserve la moitié où le signe change. Il s’arrête lorsque left - right est à moins de 10⁻¹⁰ de zéro et que l’intervalle est assez étroit. Après 128 divisions sans convergence, il renvoie une erreur.
La forme symbolique de derivative applique les règles usuelles étape par étape, sans simplifier. Le résultat est limité à 8 192 caractères. Il ne s’agit pas d’un système complet de calcul formel.
La forme numérique de derivative compare des différences centrées avec des pas de plus en plus petits et vérifie séparément la pente de chaque côté. Si les résultats divergent, ou si une valeur proche du point n’est pas définie, elle renvoie une erreur.
integrate utilise des règles adaptatives de Gauss–Kronrod à 7 et 15 points. Il compare les deux estimations sur chaque portion de l’intervalle, puis subdivise celle dont l’erreur estimée est la plus grande, jusqu’à ce que l’erreur totale estimée soit inférieure à 10⁻⁹ × max(1, |résultat|). Les limites sont de 2 048 subdivisions, 20 niveaux de subdivision et un budget partagé de 100 000 étapes. Les points d’échantillonnage ne sont pas régulièrement espacés : une oscillation rapide comme cos(128*pi*x) entre 0 et 1 donne ainsi une intégrale proche de zéro au lieu d’être prise pour une constante. L’estimation de l’erreur reste heuristique : interprétez avec prudence les résultats d’expressions présentant des singularités ou des discontinuités.
Les règles complètes figurent dans la référence des mathématiques avancées.
Combiner les opérations
Voici comment vérifier un exercice de physique : une balle est lancée verticalement vers le haut à 19,6 m/s, avec une accélération de la pesanteur de 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) donne 4# Speed after 1 second, from the slope of the heightderivative(height(t), t, 1) donne 9.8# Highest point, where the velocity is zeropeak = solve(velocity(t) = 0, t, 0, landing) donne 2height(peak) donne 19.6# Check: integrating the velocity up to the peak gives the same heightintegrate(velocity(t), t, 0, peak) donne 19.6La balle retombe après 4 secondes et atteint 19,6 m après 2 secondes. La borne inférieure de 1 dans la ligne landing évite que solve trouve l’autre racine, à t = 0. La dernière ligne vérifie la hauteur par une autre méthode, en intégrant la vitesse.