Dérivée d’une fonction univariée

Objectifs
  • Comprendre la dérivée d’une fonction univariée
  • Savoir calculer et interpréter une dérivée
  • Étudier le sens de variation d’une fonction
  • Comprendre et calculer l’élasticité

Introduction

Pourquoi apprendre les dérivées ?

Imaginez que vous gérez une boulangerie. Votre chiffre d’affaires quotidien est \(R(p) = 200p - 5p^2\), ou \(p\) est le prix d’une baguette en euros.

Si vous augmentez \(p\) de 1 centime, votre chiffre d’affaires augmente-t-il ou diminue-t-il ? De combien exactement ?

C’est précisément ce que mesure la dérivée : la variation instantanée d’une grandeur par rapport à une autre. Dans cet exemple, \(R'(p)\) indique le gain (ou la perte) de chiffre d’affaires pour une hausse de prix infinitésimale.

Ce module présente les notions fondamentales de dérivation des fonctions univariées et leur interprétation économique.

Exemple économique

Le graphique ci-dessous illustre le cas de la boulangerie : à gauche le chiffre d’affaires \(R(p)\), à droite sa dérivée \(R'(p)\) qui mesure le gain marginal.

Figure 1: Chiffre d’affaires R(p) = 200p − 5p² : la dérivée indique le gain marginal par euro de hausse de prix.

Définition de la dérivée

Une fonction \(f\) est dite dérivable en \(x\) si le taux d’accroissement \(\frac{f(x+h)-f(x)}{h}\) admet une limite quand \(h \to 0\).

On définit alors :

\[ f'(x) = \lim_{h \to 0} \frac{f(x+h)-f(x)}{h} \]

Intuition : du taux moyen au taux instantané

Le quotient

\[ \frac{f(x+h)-f(x)}{h} \]

mesure une variation moyenne de \(f\) entre \(x\) et \(x+h\). Quand \(h\) devient très petit, on “zoome” autour de \(x\) : cette variation moyenne tend vers une variation instantanée.

C’est exactement ce que représente la dérivée \(f'(x)\) :

  • en géométrie : la pente de la tangente ;
  • en économie : un effet marginal (coût marginal, recette marginale, etc.).

Mini-lecture numérique

Pour \(f(x)=x^2\) au point \(x=3\) :

\[ \frac{f(3+h)-f(3)}{h}=\frac{(3+h)^2-9}{h}=6+h \]

Si \(h=1\), on obtient \(7\) ; si \(h=0.1\), on obtient \(6.1\) ; si \(h=0.01\), on obtient \(6.01\). La valeur se rapproche de \(6\), donc \(f'(3)=6\).

Figure 2: Droites sécantes pour h = 2, 1 et 0.1 : quand h tend vers 0, la sécante converge vers la tangente (pente = 6).

À retenir

  1. On calcule d’abord un taux moyen.
  2. On fait tendre \(h\) vers 0.
  3. La limite obtenue est la dérivée (taux instantané).

Exercice interactif — Convergence de h → 0

Utilisez le curseur pour faire varier \(h\) et observez comment la pente de la sécante se rapproche de \(f'(3) = 6\).

#| '!! shinylive warning !!': |
#|   shinylive does not work in self-contained HTML documents.
#|   Please set `embed-resources: false` in your metadata.
#| standalone: true
#| components: [viewer]
#| viewerHeight: 510

from shiny import App, render, ui
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

BG = '#1C2E22'
FG = '#D2CCC0'

app_ui = ui.page_fluid(
    ui.tags.style(f"""
        body {{ background-color: {BG}; color: {FG}; padding: 12px; font-family: sans-serif; margin:0; }}
        .form-label {{ color: {FG} !important; }}
        .form-range {{ accent-color: steelblue; width: 100%; }}
        .info-box {{
            background: #152119; border-radius: 6px; padding: 10px 14px;
            margin: 8px 0; border-left: 3px solid steelblue;
            font-family: monospace; font-size: 0.9em;
        }}
    """),
    ui.h5("🎯 De la sécante à la tangente", style=f"color:{FG}"),
    ui.p(
        "Faites varier h pour voir comment la pente de la sécante se rapproche de f'(3) = 6 quand h → 0.",
        style=f"color:{FG}; font-size:0.88em; margin-bottom:6px;",
    ),
    ui.input_slider("h", "Valeur de h :", min=0.05, max=3.0, value=2.0, step=0.05),
    ui.output_ui("info"),
    ui.output_plot("plot", height="340px"),
)

def server(input, output, session):
    @output
    @render.ui
    def info():
        h = input.h()
        slope = ((3 + h) ** 2 - 9) / h
        error = abs(slope - 6)
        tick = "  ✅ Tres proche !" if error < 0.15 else ""
        color = "steelblue" if error < 0.15 else "#e07a5f"
        return ui.HTML(f"""
            <div class='info-box'>
                Pente = (f(3 + {h:.2f}) − f(3)) / {h:.2f}
                = <strong style='color:darkorange'>{slope:.4f}</strong><br>
                Ecart avec 6 : <strong style='color:{color}'>{error:.4f}</strong>{tick}
            </div>
        """)

    @output
    @render.plot
    def plot():
        h  = input.h()
        x0, y0 = 3, 9
        slope   = ((x0 + h) ** 2 - y0) / h
        x = np.linspace(0.5, 6.5, 300)

        fig, ax = plt.subplots(figsize=(7, 3.8))
        fig.patch.set_facecolor(BG)
        ax.set_facecolor(BG)
        for spine in ax.spines.values():
            spine.set_edgecolor(FG)
        ax.tick_params(colors=FG)

        ax.plot(x, x ** 2, color='steelblue', lw=2.2, label=r'$f(x)=x^2$')
        ax.plot(x, y0 + slope * (x - x0), color='darkorange', lw=1.8,
                linestyle='--', label=f'Sécante  h={h:.2f}  (pente={slope:.3f})')
        ax.plot(x, y0 + 6 * (x - x0), color=FG, lw=2.0,
                label=r"Tangente $h\to0$  (pente = 6)")
        ax.scatter([x0, x0 + h], [y0, (x0 + h) ** 2],
                   color='crimson', zorder=6, s=70)
        ax.set_xlim(0.5, 6.5); ax.set_ylim(-5, 45)
        ax.set_xlabel("$x$", color=FG); ax.set_ylabel("$f(x)$", color=FG)
        ax.set_title(r"Sécante vs tangente en $x_0 = 3$", color=FG)
        ax.legend(fontsize=8.5, facecolor=BG, edgecolor='none', labelcolor=FG)
        ax.grid(alpha=0.15, color=FG)
        plt.tight_layout()
        return fig

app = App(app_ui, server)

Exemple détaillé : \(f(x)=x^2\)

\[ \begin{aligned} \frac{f(x+h)-f(x)}{h} &= \frac{(x+h)^2-x^2}{h} \\ &= \frac{x^2+2xh+h^2-x^2}{h} \\ &= 2x+h \end{aligned} \]

Donc :

\[ f'(x) = \lim_{h \to 0}(2x+h)=2x \]

Exemples rapides

  • \(f(x)=\frac{1}{x} \Rightarrow f'(x)=-\frac{1}{x^2}\)
  • \(f(x)=\sqrt{x} \Rightarrow f'(x)=\frac{1}{2\sqrt{x}}, \; x>0\)

Dérivées des fonctions usuelles

Fonction \(f(x)\) Dérivée \(f'(x)\) Condition
\(k\) \(0\) \(k\) constante réelle
\(kx\) \(k\) \(k\) constante réelle
\(x^n\) \(nx^{n-1}\) \(n \in \mathbb{N}\)
\(\frac{1}{x^n}\) \(\frac{-n}{x^{n+1}}\) \(x \neq 0\)
\(\sqrt{x}\) \(\frac{1}{2\sqrt{x}}\) \(x > 0\)
\(e^x\) \(e^x\)
\(\ln(x)\) \(\frac{1}{x}\) \(x>0\)
Comment lire ce tableau
  • La constante ne varie jamais : \(f(x)=5 \Rightarrow f'(x)=0\).
  • La dérivée de \(kx\) est la pente \(k\) : une augmentation de 1 de \(x\) fait varier \(f\) de \(k\) unités.
  • La dérivée de \(x^n\) “abaisse l’exposant d’un cran” : \(x^4 \to 4x^3\).
  • \(e^x\) est sa propre dérivée : son taux de croissance instantané est égal à sa valeur — propriété remarquable exploitée en finance (actualisation).
Domaine de définition

La dérivée n’est définie que là où la fonction est définie. Par exemple, \(\ln(x)\) impose \(x > 0\), donc \((\ln(x))' = \frac{1}{x}\) est également valable uniquement pour \(x > 0\).

Toujours préciser le domaine de définition avant de dériver.

Partie 2 - Fonctions composées

Règles de dérivation

Règle Formule
Somme \((u+v)' = u' + v'\)
Produit \((uv)' = u'v + uv'\)
Quotient \(\left(\dfrac{u}{v}\right)' = \dfrac{u'v - uv'}{v^2}\)
Exponentielle composée \((e^{u(x)})' = u'(x)\,e^{u(x)}\)
Logarithme compose \((\ln(u(x)))' = \dfrac{u'(x)}{u(x)}\)
Puissance composée \((u(x)^n)' = n\,u'(x)\,u(x)^{n-1}\)
La règle du produit en detail

La règle \((uv)' = u'v + uv'\) est souvent source d’erreurs. Pensez-y ainsi : quand le produit de deux quantités varie, chaque terme contribue tour à tour pendant que l’autre reste fixe. On additionne les deux contributions.

Exemples pas a pas

Règle de la somme : \(f(x) = 4x - e^x\)

On pose \(u(x)=4x\) et \(v(x)=e^x\).

\[ u'(x)=4, \qquad v'(x)=e^x \]

\[ f'(x) = 4 - e^x \]


Règle du produit : \(f(x) = (2x+3)\,e^x\)

On pose \(u(x)=2x+3\) et \(v(x)=e^x\).

\[ u'(x)=2, \qquad v'(x)=e^x \]

\[ f'(x) = u'v + uv' = 2\,e^x + (2x+3)\,e^x = e^x(2x+5) \]


Règle du quotient : \(f(x) = \dfrac{\ln(x)}{2x^2}\)

On pose \(u(x)=\ln(x)\) et \(v(x)=2x^2\).

\[ u'(x)=\frac{1}{x}, \qquad v'(x)=4x \]

\[ f'(x) = \frac{\frac{1}{x}\cdot 2x^2 - \ln(x)\cdot 4x}{(2x^2)^2} = \frac{2x - 4x\ln(x)}{4x^4} = \frac{1 - 2\ln(x)}{2x^3} \]


Exponentielle composée : \(f(x) = e^{2x^2+3x}\)

On pose \(u(x)=2x^2+3x\).

\[ u'(x)=4x+3 \]

\[ f'(x) = u'(x)\,e^{u(x)} = (4x+3)\,e^{2x^2+3x} \]


Logarithme compose : \(f(x) = \ln(4x^2+2)\)

On pose \(u(x)=4x^2+2\).

\[ u'(x)=8x \]

\[ f'(x) = \frac{u'(x)}{u(x)} = \frac{8x}{4x^2+2} = \frac{4x}{2x^2+1} \]

Erreur classique

Ne pas confondre \((\ln(x))' = \frac{1}{x}\) et \((\ln(u(x)))' = \frac{u'(x)}{u(x)}\).

Toujours verifier si l’argument du \(\ln\) est une expression composée, et si oui, multiplier par sa dérivée.

Partie 3 - Interprétation de la dérivée

Interprétation géométrique

La dérivée \(f'(a)\) représente la pente de la tangente à la courbe de \(f\) au point d’abscisse \(a\).

Approximation locale utile

Pres d’un point \(a\), on peut approximer :

\[ f(a+h) \approx f(a) + f'(a)h \]

Cette formule donne une lecture pratique : \(f'(a)\) indique la variation attendue de \(f\) pour une petite variation de la variable.

Sens de variation

  • Si \(f'(x)>0\), la fonction est croissante.
  • Si \(f'(x)<0\), la fonction est décroissante.
  • Si \(f'(x)=0\), \(x\) est un point critique.
Figure 3: f(x) = x³ − 3x et sa dérivée f’(x) = 3x² − 3. Les zones bleues indiquent où f est croissante (f’ > 0) ; les zones rouges où f est décroissante (f’ < 0).

Exercice interactif — Explorer le sens de variation

Choisissez une fonction et observez comment le signe de \(f'\) détermine la croissance ou la décroissance de \(f\).

#| '!! shinylive warning !!': |
#|   shinylive does not work in self-contained HTML documents.
#|   Please set `embed-resources: false` in your metadata.
#| standalone: true
#| components: [viewer]
#| viewerHeight: 490

from shiny import App, render, ui
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

BG = '#1C2E22'
FG = '#D2CCC0'

FUNCTIONS = {
    "f(x) = x² − 4x  (profit)": {
        "f":  lambda x: x**2 - 4*x,
        "fp": lambda x: 2*x - 4,
        "xlim": (-1.0, 6.0),
        "title_f":  r"$f(x)=x^2-4x$",
        "title_fp": r"$f'(x)=2x-4$",
        "zeros": [2],
    },
    "f(x) = x³ − 3x  (cubique)": {
        "f":  lambda x: x**3 - 3*x,
        "fp": lambda x: 3*x**2 - 3,
        "xlim": (-2.4, 2.4),
        "title_f":  r"$f(x)=x^3-3x$",
        "title_fp": r"$f'(x)=3x^2-3$",
        "zeros": [-1, 1],
    },
    "f(x) = −x² + 6x  (recette max)": {
        "f":  lambda x: -x**2 + 6*x,
        "fp": lambda x: -2*x + 6,
        "xlim": (-1.0, 8.0),
        "title_f":  r"$f(x)=-x^2+6x$",
        "title_fp": r"$f'(x)=-2x+6$",
        "zeros": [3],
    },
}

app_ui = ui.page_fluid(
    ui.tags.style(f"""
        body {{ background-color:{BG}; color:{FG}; padding:12px;
                font-family:sans-serif; margin:0; }}
        .form-label {{ color:{FG} !important; }}
        .form-select {{ background-color:#152119; color:{FG}; border-color:#2F4636; }}
    """),
    ui.h5("📈 Signe de f' et sens de variation", style=f"color:{FG}"),
    ui.p(
        "Sélectionnez une fonction et observez le lien entre le signe de f' "
        "et la croissance / décroissance de f.",
        style=f"color:{FG}; font-size:0.88em; margin-bottom:6px;",
    ),
    ui.input_select("func", "Fonction :", choices=list(FUNCTIONS.keys())),
    ui.output_plot("plot", height="380px"),
)

def server(input, output, session):
    @output
    @render.plot
    def plot():
        cfg = FUNCTIONS[input.func()]
        x  = np.linspace(*cfg["xlim"], 400)
        f  = cfg["f"](x)
        fp = cfg["fp"](x)

        fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(9, 3.8))
        fig.patch.set_facecolor(BG)
        for ax in (ax1, ax2):
            ax.set_facecolor(BG)
            for spine in ax.spines.values():
                spine.set_edgecolor(FG)
            ax.tick_params(colors=FG)
            ax.axhline(0, color='#5a5a5a', lw=0.8)
            ax.axvline(0, color='#5a5a5a', lw=0.8)

        ax1.plot(x, f, color='steelblue', lw=2.2)
        ax1.fill_between(x, f, 0, where=(fp > 0), alpha=0.28,
                         color='steelblue', label="Croissante (f' > 0)")
        ax1.fill_between(x, f, 0, where=(fp < 0), alpha=0.28,
                         color='crimson',   label="Décroissante (f' < 0)")
        ax1.set_title(cfg["title_f"], color=FG)
        ax1.set_xlabel("$x$", color=FG); ax1.set_ylabel("$f(x)$", color=FG)
        ax1.legend(fontsize=8, facecolor=BG, edgecolor='none', labelcolor=FG)
        ax1.grid(alpha=0.15, color=FG)

        ax2.plot(x, fp, color='darkorange', lw=2.2)
        ax2.fill_between(x, fp, 0, where=(fp > 0), alpha=0.28, color='steelblue')
        ax2.fill_between(x, fp, 0, where=(fp < 0), alpha=0.28, color='crimson')
        for z in cfg["zeros"]:
            ax2.scatter([z], [0], color=FG, zorder=6, s=60)
        ax2.set_title(cfg["title_fp"], color=FG)
        ax2.set_xlabel("$x$", color=FG); ax2.set_ylabel("$f'(x)$", color=FG)
        ax2.grid(alpha=0.15, color=FG)

        plt.suptitle("Signe de f'  \u21d4  sens de variation de f", color=FG, fontsize=10)
        plt.tight_layout()
        return fig

app = App(app_ui, server)

Exercices

  1. Calculer les dérivées de \(3x^2\), \(5x^3-2x\), et \(\frac{1}{x}\).
  2. Étudier le sens de variation de \(f(x)=x^3-3x\).
  3. Calculer \(f'(2)\) pour \(f(x)=4x^4-3x^2+7\).

Exercices supplémentaires (issus du support)

  1. Dériver et donner le domaine de définition :
    • \(f(x)=5\)
    • \(g(x)=5x\)
    • \(h(x)=-7x+2\)
    • \(k(x)=5x^2+8x-3\)
  2. Dériver les fonctions composées :
    • \(f(x)=(x-2)(2x+5)\)
    • \(g(x)=x(3x-2)\)
    • \(h(x)=\dfrac{\ln(x)}{2x^2}\)
  3. Étudier les variations de :
    • \(u(x)=x^2-2x-3\)
    • \(v(x)=\dfrac{1}{x}\)
    • \(w(x)=e^{2x^2+3x}\)

Exercice interactif — Quiz de dérivation

Testez vos reflexes : une fonction s’affiche, choisissez la bonne dérivée et recevez un retour immédiat.

#| '!! shinylive warning !!': |
#|   shinylive does not work in self-contained HTML documents.
#|   Please set `embed-resources: false` in your metadata.
#| standalone: true
#| components: [viewer]
#| viewerHeight: 430

from shiny import App, render, ui, reactive
import random

BG = '#1C2E22'
FG = '#D2CCC0'

QUESTIONS = [
    {
        "func":    "f(x) = 5",
        "correct": "f'(x) = 0",
        "choices": ["f'(x) = 0", "f'(x) = 5", "f'(x) = 1", "f'(x) = 5x"],
        "hint":    "La dérivée d'une constante est toujours zéro.",
        "rule":    "Constante",
    },
    {
        "func":    "f(x) = 3x",
        "correct": "f'(x) = 3",
        "choices": ["f'(x) = 3x²", "f'(x) = 3", "f'(x) = x", "f'(x) = 1/3"],
        "hint":    "La dérivée de kx est k : c'est la pente de la droite.",
        "rule":    "Linéaire",
    },
    {
        "func":    "f(x) = x⁴",
        "correct": "f'(x) = 4x³",
        "choices": ["f'(x) = 4x⁵", "f'(x) = x³", "f'(x) = 4x³", "f'(x) = 4"],
        "hint":    "Règle puissance : (xⁿ)' = n·xⁿ⁻¹. Ici n=4.",
        "rule":    "Puissance",
    },
    {
        "func":    "f(x) = eˣ",
        "correct": "f'(x) = eˣ",
        "choices": ["f'(x) = eˣ⁻¹", "f'(x) = x·eˣ", "f'(x) = eˣ", "f'(x) = 1"],
        "hint":    "L'exponentielle est sa propre dérivée : (eˣ)' = eˣ.",
        "rule":    "Exponentielle",
    },
    {
        "func":    "f(x) = ln(x)",
        "correct": "f'(x) = 1/x",
        "choices": ["f'(x) = 1/x", "f'(x) = x", "f'(x) = ln(x)/x", "f'(x) = eˣ"],
        "hint":    "(ln x)' = 1/x, valable pour x > 0.",
        "rule":    "Logarithme",
    },
    {
        "func":    "f(x) = e^(3x)",
        "correct": "f'(x) = 3e^(3x)",
        "choices": ["f'(x) = e^(3x)", "f'(x) = 3e^(3x)", "f'(x) = 3xe^(3x)", "f'(x) = e^(3)"],
        "hint":    "Exponentielle composée : (e^u)' = u'·e^u. Ici u=3x donc u'=3.",
        "rule":    "Exp. composée",
    },
    {
        "func":    "f(x) = ln(2x² + 1)",
        "correct": "f'(x) = 4x / (2x² + 1)",
        "choices": [
            "f'(x) = 1 / (2x² + 1)",
            "f'(x) = 4x / (2x² + 1)",
            "f'(x) = 4x · ln(2x² + 1)",
            "f'(x) = 2x / (2x² + 1)",
        ],
        "hint":    "Log. compose : (ln u)' = u'/u. Ici u=2x²+1 donc u'=4x.",
        "rule":    "Log. compose",
    },
    {
        "func":    "f(x) = (2x + 3)·eˣ",
        "correct": "f'(x) = (2x + 5)·eˣ",
        "choices": [
            "f'(x) = 2·eˣ",
            "f'(x) = (2x + 3)·eˣ",
            "f'(x) = (2x + 5)·eˣ",
            "f'(x) = 2(x + 3)·eˣ",
        ],
        "hint":    "Règle du produit : (uv)' = u'v + uv'. Ici u=2x+3, v=eˣ.",
        "rule":    "Produit",
    },
]

# Randomise once at startup
_order = list(range(len(QUESTIONS)))
random.shuffle(_order)

app_ui = ui.page_fluid(
    ui.tags.style(f"""
        body {{ background-color:{BG}; color:{FG}; padding:14px;
                font-family:sans-serif; margin:0; }}
        .btn-choice {{
            display:block; width:100%; margin:5px 0;
            background:#152119; color:{FG};
            border:1px solid #2F4636; border-radius:6px;
            padding:8px 14px; cursor:pointer; font-size:0.9em;
            text-align:left;
        }}
        .btn-choice:hover {{ background:#253A2C; }}
        .feedback {{ border-radius:6px; padding:10px 14px; margin-top:10px;
                     font-size:0.9em; }}
        .correct  {{ background:#1a3a1a; border-left:4px solid #4caf50; }}
        .wrong    {{ background:#3a1a1a; border-left:4px solid #e53935; }}
        .score    {{ font-size:0.85em; color:#aaa; margin-bottom:6px; }}
        .rule-tag {{ font-size:0.75em; color:#888; margin-bottom:8px; }}
    """),
    ui.h5("🧠 Quiz — Quelle est la dérivée ?", style=f"color:{FG}"),
    ui.output_ui("score_line"),
    ui.output_ui("question_ui"),
    ui.output_ui("feedback_ui"),
    ui.div(
        ui.input_action_button("next_q", "Question suivante →",
                               style="margin-top:10px; background:#253A2C; "
                                     "color:#D2CCC0; border:1px solid #2F4636; "
                                     "border-radius:6px; padding:7px 18px; cursor:pointer;"),
    ),
)

def server(input, output, session):
    idx        = reactive.Value(0)
    answered   = reactive.Value(False)
    chosen     = reactive.Value(None)
    score      = reactive.Value(0)
    total_done = reactive.Value(0)

    def current_q():
        return QUESTIONS[_order[idx() % len(_order)]]

    @output
    @render.ui
    def score_line():
        done = total_done()
        if done == 0:
            return ui.p("Répondez aux questions pour voir votre score.",
                        class_="score")
        pct = round(100 * score() / done)
        return ui.HTML(
            f"<p class='score'>Score : {score()} / {done} ({pct}%)</p>"
        )

    @output
    @render.ui
    def question_ui():
        q = current_q()
        choices_html = "".join(
            f"<button class='btn-choice' onclick=\"Shiny.setInputValue('choice','{c}',{{priority:'event'}})\">{c}</button>"
            for c in q["choices"]
        )
        return ui.HTML(
            f"<p class='rule-tag'>Règle : {q['rule']}</p>"
            f"<p><strong>Donnez la dérivée de</strong> &nbsp; "
            f"<code style='font-size:1em;'>{q['func']}</code></p>"
            + choices_html
        )

    @output
    @render.ui
    def feedback_ui():
        if not answered():
            return ui.HTML("")
        q = current_q()
        if chosen() == q["correct"]:
            return ui.HTML(
                f"<div class='feedback correct'>"
                f"✅ <strong>Correct !</strong><br>{q['hint']}</div>"
            )
        return ui.HTML(
            f"<div class='feedback wrong'>"
            f"❌ <strong>Incorrect.</strong> Bonne réponse : "
            f"<em>{q['correct']}</em><br>{q['hint']}</div>"
        )

    @reactive.Effect
    @reactive.event(input.choice)
    def _on_choice():
        if answered():
            return
        c = input.choice()
        q = current_q()
        answered.set(True)
        chosen.set(c)
        total_done.set(total_done() + 1)
        if c == q["correct"]:
            score.set(score() + 1)

    @reactive.Effect
    @reactive.event(input.next_q)
    def _on_next():
        idx.set(idx() + 1)
        answered.set(False)
        chosen.set(None)

app = App(app_ui, server)

Conclusion

La dérivée mesure une variation marginale. Elle constitue un outil central pour l’analyse économique, la modélisation et la décision.