Ivan Shishkin, Birch Grove

Fonction dérivable

Concept history

A revision trail for this concept page.

3 revisions

Revision 6453

10/2/2026, 10:42:48 PM · FiniteField

Concept marked usable

statusStubUsable

Revision 6442

10/2/2026, 4:57:58 PM · SalixBabylonica

Updated aliases

aliasesNoneDérivable

Revision 4974

9/15/2026, 8:03:18 AM · Ancient Tree

Concept created

##### Définition formelle

Soit $f:I\to\mathbb R$, où $I$ est un intervalle de $\mathbb R$.

On dit que $f$ est **dérivable sur $I$** si elle est [[Dérivée en un point|dérivable en tout point]] de $I$.

*Déplacer $a$ (en orange) dans l'animation suivante pour voir la tangente se déplacer*.

```jsxgraph
{
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsxgraph@1.13.1/distrib/jsxgraph.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.47/dist/katex.min.css">

<style>
  #derivee-value,
  #derivee-tangente {
    color-scheme: light dark;
    font-family: system-ui, sans-serif;
  }

  #derivee-tangente {
    width: 100%;
    height: clamp(300px, 60vw, 440px);
    position: relative;
    overflow: hidden;
    background: transparent;
    border: 0;
    touch-action: none;
  }

  #derivee-tangente svg {
    display: block;
  }

  #derivee-tangente .JXGinfobox {
    display: none !important;
  }

  #derivee-value {
    display: block;
    text-align: center;
    color: var(--foreground, light-dark(#202020, #eeeeee));
    padding: 12px 0 4px;
    min-height: 48px;
  }

  #derivee-value .katex {
    font-size: 1.65em;
  }

  #derivee-value .katex-display {
    margin: 0;
  }

  #derivee-tangente .JXGtext {
    color: var(--foreground, light-dark(#202020, #eeeeee)) !important;
    font: inherit !important;
  }
</style>

<!-- Formule LaTeX pré-rendue : aucun script KaTeX nécessaire. -->
<output id="derivee-value" aria-live="off" aria-label="Dérivée en a : -0,74">
  <span class="katex-display">
    <span class="katex">
      <span class="katex-html" aria-hidden="true">
        <span class="base">
          <span class="strut" style="height:1.0519em;vertical-align:-0.25em;"></span>
          <span class="mord">
            <span class="mord mathnormal" style="margin-right:0.1076em;">f</span>
            <span class="msupsub">
              <span class="vlist-t">
                <span class="vlist-r">
                  <span class="vlist" style="height:0.8019em;">
                    <span style="top:-3.113em;margin-right:0.05em;">
                      <span class="pstrut" style="height:2.7em;"></span>
                      <span class="sizing reset-size6 size3 mtight">
                        <span class="mord mtight">
                          <span class="mord mtight">′</span>
                        </span>
                      </span>
                    </span>
                  </span>
                </span>
              </span>
            </span>
          </span>
          <span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mclose">)</span>
          <span class="mspace" style="margin-right:0.2778em;"></span>
          <span class="mrel">=</span>
          <span class="mspace" style="margin-right:0.2778em;"></span>
        </span>
        <span class="base">
          <span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span>
          <span class="enclosing" id="derivee-number">−0,74</span>
        </span>
      </span>
    </span>
  </span>
</output>

<div
  id="derivee-tangente"
  aria-label="Déplacer le point sur la courbe pour faire évoluer la tangente, sa projection sur l’axe et la valeur de la dérivée."
></div>

<script>
(async () => {
  const root = document.getElementById('derivee-tangente');
  if (!root || root.dataset.initialized) return;
  root.dataset.initialized = 'loading';

  // Chargement de JSXGraph avec un CDN de secours.
  const loadScript = src => new Promise((resolve, reject) => {
    const script = document.createElement('script');
    script.src = src;
    script.crossOrigin = 'anonymous';
    script.onload = resolve;
    script.onerror = () => {
      script.remove();
      reject(new Error('Impossible de charger JSXGraph.'));
    };
    document.head.appendChild(script);
  });

  if (!window.JXG?.JSXGraph) {
    try {
      await loadScript(
        'https://cdn.jsdelivr.net/npm/jsxgraph@1.13.1/distrib/jsxgraphcore.js'
      );
    } catch {
      await loadScript(
        'https://unpkg.com/jsxgraph@1.13.1/distrib/jsxgraphcore.js'
      );
    }
  }

  if (!root.isConnected) return;

  // Attendre que le conteneur ait une taille.
  if (!root.clientWidth || !root.clientHeight) {
    await new Promise(resolve => {
      const observer = new ResizeObserver(() => {
        if (root.clientWidth && root.clientHeight) {
          observer.disconnect();
          resolve();
        }
      });
      observer.observe(root);
    });
  }

  const board = window.JXG.JSXGraph.initBoard(root.id, {
    boundingbox: [-3.4, 3.1, 3.4, -1.7],
    axis: false,
    grid: false,
    showCopyright: false,
    showNavigation: false,
    showInfobox: false,
    pan: { enabled: false },
    zoom: { enabled: false, wheel: false, pinch: false },
    resize: { enabled: true },
    keepaspectratio: false
  });

  const colors = {
    curve: 'var(--viz-series-1, light-dark(#3399ff, #70b8ff))',
    tangent: 'var(--viz-series-2, light-dark(#ff8833, #ffad70))',
    text: 'var(--foreground, light-dark(#202020, #eeeeee))',
    axis: 'var(--muted-foreground, light-dark(#888888, #a0a0a0))',
    background: 'var(--background, light-dark(#ffffff, #181818))'
  };

  // Axes.
  const axisStyle = {
    strokeColor: colors.axis,
    strokeWidth: 1,
    fixed: true,
    highlight: false,
    withLabel: false,
    lastArrow: { type: 2, size: 7 },
    layer: 1
  };

  board.create('segment', [[-3.25, 0], [3.25, 0]], axisStyle);
  board.create('segment', [[0, -1.55], [0, 2.95]], axisStyle);

  const textStyle = {
    fixed: true,
    highlight: false,
    strokeColor: colors.text,
    anchorX: 'middle',
    anchorY: 'middle',
    layer: 9
  };

  board.create('text', [
    3.18,
    () => -19 / board.unitY,
    '<i>x</i>'
  ], textStyle);

  board.create('text', [
    () => 16 / board.unitX,
    2.85,
    '<i>y</i>'
  ], textStyle);

  // Fonction : modifier cette ligne pour changer la courbe.
  const f = x => 0.12 * x * x * x - 0.8 * x + 0.7;

  const curve = board.create('functiongraph', [f, -3.15, 3.15], {
    strokeColor: colors.curve,
    strokeWidth: 3,
    fixed: true,
    highlight: false,
    withLabel: false
  });

  // Point déplaçable sur la courbe.
  const point = board.create('glider', [0.4, f(0.4), curve], {
    name: '',
    withLabel: false,
    showInfobox: false,
    size: 7,
    strokeWidth: 3,
    strokeColor: colors.tangent,
    fillColor: colors.background,
    highlightStrokeColor: colors.tangent,
    highlightFillColor: colors.tangent,
    precision: {
      touch: 28,
      touchMax: 40,
      mouse: 14,
      pen: 18
    },
    layer: 9
  });

  // Projection sur l’axe des abscisses.
  const projection = board.create('point', [() => point.X(), 0], {
    name: '',
    withLabel: false,
    size: 2,
    fixed: true,
    highlight: false,
    showInfobox: false,
    strokeColor: colors.text,
    fillColor: colors.text,
    layer: 7
  });

  board.create('segment', [point, projection], {
    dash: 2,
    strokeWidth: 1.5,
    strokeColor: colors.axis,
    fixed: true,
    highlight: false,
    withLabel: false,
    layer: 3
  });

  board.create('text', [
    () => point.X(),
    () => -20 / board.unitY,
    '<i>a</i>'
  ], {
    ...textStyle,
    cssStyle: `background:${colors.background};padding:0 3px;`
  });

  // Tangente calculée automatiquement par JSXGraph.
  const tangent = board.create('tangent', [point], {
    strokeColor: colors.tangent,
    strokeWidth: 2,
    fixed: true,
    highlight: false,
    withLabel: false,
    layer: 5
  });

  // Valeur de f'(a), arrondie à deux décimales.
  const slopeValue = document.getElementById('derivee-value');
  const numberValue = document.getElementById('derivee-number');
  let previousValue;

  const updateSlope = () => {
    const slope = tangent.getSlope();
    const value = (Math.abs(slope) < 0.005 ? 0 : slope).toFixed(2);

    if (value === previousValue) return;
    previousValue = value;

    numberValue.textContent = value.replace('.', ',').replace('-', '−');
    slopeValue.dataset.value = value;
    slopeValue.setAttribute(
      'aria-label',
      'Dérivée en a : ' + value.replace('.', ',')
    );
  };

  board.on('update', updateSlope);
  updateSlope();

  point.rendNode.style.cursor = 'grab';
  point.on('down', () => {
    point.rendNode.style.cursor = 'grabbing';
  });
  point.on('up', () => {
    point.rendNode.style.cursor = 'grab';
  });

  root.dataset.initialized = 'ready';
})().catch(error => {
  const root = document.getElementById('derivee-tangente');
  if (root) {
    root.dataset.initialized = 'error';
    root.setAttribute('role', 'alert');
    root.textContent = error.message;
  }
});
</script>
}
```