Passer au contenu
Guide Varlig
Accueil Varlig

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

calc
sum(k, k, 1, 100) donne 5,050
sum(k^2, k, 1, 10) donne 385
summation(2*k - 1, k, 1, 10) donne 100
product(k, k, 1, 5) donne 120

Les 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 :

calc
# £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.30

Un 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 :

calc
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 est 20. 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 :

calc
solve(2x + 6 = 10) donne 2
solve(x/3 + 1 = 4) donne 9
solve(5x + 3 = 2x - 9) donne -4
# Candles sell for 12, cost 4 each to make, on 2,000 of fixed costs
solve(12n = 2000 + 4n) donne 250

L’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.

calc
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 :

calc
solve(x^2 + 1 = 0) donne Error: no real solution
solve(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 numerically
solve(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 numerically

L’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é :

calc
solve(1/x = 2) donne Unsupported: The unknown cannot be a divisor; write solve(expression,x,lower,upper) to search for one root numerically
solve(2^x = 8) donne Unsupported: The unknown cannot be an exponent; write solve(expression,x,lower,upper) to search for one root numerically
solve(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 numerically

Une équation que chaque valeur satisfait le dit aussi, plutôt que d'en choisir une :

calc
solve(x - x = 0) donne Unsupported: every value of x solves this equation, so it has no single answer

Tous 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.

calc
solve(x^2 = 2, x, 0, 2) donne 1.4142135624
solve(x^2 - 4, x, -3, 0) donne -2
solve(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 costs
solve(12*n = 2000 + 4*n, n, 0, 1000) donne 250

Les 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 que x^2 - 4 est positif aux deux extrémités. Utilisez des limites qui entourent une racine, telles que 0 et 3.
  • 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, car sqrt appliqué à un nombre négatif produit une erreur. Faites plutôt commencer l’intervalle à 0.
  • Un changement de signe par discontinuité, comme pour 1/x au voisinage de 0, n’est pas une racine : solve renvoie 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 :

calc
solve(sqrt(x) = 2, x, 0, 10) donne 4.0000000001
solve(sqrt(x) = 2, x, 0, 10) to 4 dp donne 4
side = solve(sqrt(x) = 2, x, 0, 10) donne 4.0000000001
side * 3 to 2 dp donne 12

Vous pouvez intégrer solve à une fonction personnalisée pour le réutiliser avec différentes valeurs :

calc
root(y) = solve(x^2 = y, x, 0, 10)
root(9) donne 3

Pour 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 :

calc
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 :

calc
slope(x) = 3*x^2
slope(2) donne 12

La 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, ln et sqrt
  • 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 :

calc
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 :

calc
derivative(x^3, x, 2) donne 12
differentiate(sin(x), x, 0) donne 1
derivative(sqrt(x), x, 4) donne 0.25
height(t) = 20*t - 4.9*t^2
derivative(height(t), t, 1) donne 10.2

Cette 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 :

calc
derivative(a*x^2, x, 2) donne Unsupported: Unknown name: a
a = 3
derivative(a*x^2, x, 2) donne 12

Le 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.

calc
derivative(x^3, x, 2) == 12 donne true
abs(derivative(exp(x), x, 1) - e) < 1e-6 donne true

L’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

calc
integrate(x^2, x, 0, 3) donne 9
integrate(sin(x), x, 0, pi) donne 2
integrate(x^2, x, 3, 0) donne -9
integrate(4/(1 + x^2), x, 0, 1) donne 3.1415926536
# Distance fallen in 3 s: integrate the speed, 9.8t m/s
integrate(9.8*t, t, 0, 3) donne 44.1

Les 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, car 1/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² :

calc
# Height in metres after t seconds
height(t) = 19.6*t - 4.9*t^2
velocity(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 height
derivative(height(t), t, 1) donne 9.8
# Highest point, where the velocity is zero
peak = solve(velocity(t) = 0, t, 0, landing) donne 2
height(peak) donne 19.6
# Check: integrating the velocity up to the peak gives the same height
integrate(velocity(t), t, 0, peak) donne 19.6

La 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.