Introduzione alle derivate

Lorenzo Roi (luglio 2022)

Introduzione

Questo notebook di Mathematica presenta una lezione introduttiva sul significato di derivata di una funzione in un suo punto e, in particolare, introduce al suo significato geometrico. Dapprima si studia il grafico di una funzione ad ingrandimenti sempre maggiori nell'intorno di un punto del suo dominio notando come questo, nelle situazioni più semplici possa essere approssimato da una funzione lineare. Si analizza poi il comportamento delle rette secanti e del loro coefficiente angolare (o rapporto incrementale) al diminuire dell'incremento, suggerendo il significato intuitivo di retta tangente. Fornita la definizione formale di derivata si presenta infine il calcolo del limite del rapporto incrementale in alcune situazioni particolari.

Codice

SetOptions[Manipulate,SaveDefinitions->True,ControlPlacement->Top];
(**********************************************************************************************************************)
zoom[f_,x0_]:=Manipulate[Show[Plot[f[x],{x,x0-semiAmpiezza,x0+semiAmpiezza},AxesOrigin->{x0-semiAmpiezza, f[x0]},PlotStyle->Red],Graphics[{PointSize[0.025],Blue,Point[{x0,f[x0]}]}],PlotLabel->Style["intervallo ["<>ToString[PaddedForm[N[x0-semiAmpiezza],{5,4}]]<>","<>ToString[PaddedForm[N[x0+semiAmpiezza],{5,4}]]<>"]",FontFamily->"Helvetica",FontSize->11,Background->Lighter[Yellow]],ImageSize->500],{{semiAmpiezza,1,Style["semiampiezza  ",FontSize->12]},0.001,10.001}];
(**********************************************************************************************************************)
rappIncrementale[f_,x0_,h_]:=(f[h+x0]-f[x0])/h;
(**********************************************************************************************************************)
secante[f_,x_,x0_,h_]:=rappIncrementale[f,x0,h]*(x-x0)+f[x0];
(**********************************************************************************************************************)
graficiSecanti[f_,x0_,h_,estremi_List]:=Module[{x},If[h≠0,Show[Plot[{f[x],secante[f,x,x0,h]},{x,estremi[[1,1]],estremi[[1,2]]},PlotStyle->{Red,Blue}],Graphics[{PointSize[Large],{Red,Point[{x0,f[x0]}]},Point[{x0+h,f[x0+h]}]}],PlotRange->estremi,ImageSize->500],Show[Plot[{f[x],f'[x0](x-x0)+f[x0]},{x,estremi[[1,1]],estremi[[1,2]]},PlotStyle->{Red,Blue}],Graphics[{PointSize[Large],Red,Point[{x0,f[x0]}]}],PlotRange->estremi,ImageSize->500]]];
(**********************************************************************************************************************)
graficiSecantiTriangolo[f_,x0_,h_,estremi_List]:=Module[{x},If[h≠0,Show[Graphics[{RGBColor[1,.9,0],Polygon[{{x0,f[x0]},{x0,f[x0+h]},{x0+h,f[x0+h]}}]}],Plot[{f[x],secante[f,x,x0,h]},{x,estremi[[1,1]],estremi[[1,2]]},PlotStyle->{Red,Blue}],Graphics[{PointSize[Large],{Red,Point[{x0,f[x0]}]},Point[{x0+h,f[x0+h]}]}],PlotRange->estremi,Axes->True,PlotLabel->Style["coeff. angolare ="<>ToString[PaddedForm[rappIncrementale[f,x0,h],{7,6}]],FontFamily->"Helvetica",FontSize->11,Background->Lighter[Yellow]],ImageSize->500],Show[Plot[{f[x],f'[x0](x-x0)+f[x0]},{x,estremi[[1,1]],estremi[[1,2]]},PlotStyle->{Red,Blue}],Graphics[{PointSize[Large],{Red,Point[{x0,f[x0]}]}}],PlotRange->estremi,Axes->True,PlotLabel->Style["coeff. angolare ="<>ToString[PaddedForm[N[f'[x0]],{7,6}]],FontFamily->"Helvetica",FontSize->11,Background->Lighter[Yellow]]],ImageSize->500]];
(**********************************************************************************************************************)
finestra[f_,x0_,h_,margine_]:=Module[{cornice,minY,maxY},cornice=Abs[f[x0-margine]-f[x0+margine]]/10;minY=If[f[x0-margine]≤f[x0+margine],f[x0-margine]-cornice,f[x0+margine]-cornice];maxY=If[f[x0-margine]≤f[x0+margine],f[x0+margine]+cornice,f[x0-margine]+cornice];graficiSecantiTriangolo[f,x0,h,{{x0-margine,x0+margine},{minY,maxY}}]];
(**********************************************************************************************************************)
tavolaCoeffAngolare[f_,x0_,semiAmpiezza_,nMax_]:=Sort[Flatten[Map[{N[{semiAmpiezza/#,rappIncrementale[f,x0,semiAmpiezza/#]}],N[{-semiAmpiezza/#,rappIncrementale[f,x0,-semiAmpiezza/#]}]}&,Range[nMax]],1],#2^2<#1^2&];
(**********************************************************************************************************************)
tabellaRappIncrementale[f_,x0_,n_]:=Map[{N[1/(10^(#))],rappIncrementale[f,x0,N[1/(10^(#))]]}&,Range[n]]
(**********************************************************************************************************************)

Grafico di una funzione in intorni di un punto

Iniziamo definendo una semplice e nota funzione goniometrica

f[x_]:=Sin[x];

e rappresentiamone il grafico nell'intervallo [0,2π] (sistema non isometrico).

Plot[f[x],{x,0,2π},PlotStyle->Red]

La nostra intenzione è di studiare tale grafico in intorni del punto [(π/3),Sin(π/3)]=[(π/3),((Sqrt[3])/2)]. A tal fine la funzione zoom[f,x0] permette di ottenere una serie di ingrandimenti attorno al punto (Subscript[x, 0]) del grafico della funzione f. Inizialmente l’intervallo nel quale si rappresenta l’andamento di f è centrato in (Subscript[x, 0]) e possiede semiampiezza unitaria: muovendo il cursore verso sinistra si diminuisce tale semiampiezza, i nuovi estremi dell’intervallo appaiono visualizzati sopra il grafico e l’effetto è di osservare l’andamento della funzione in regioni del piano sempre più prossime al punto (Subscript[x, 0]).

zoom[f,π/3]

L'animazione mostra come all'aumentare dell'ingrandimento (e quindi al diminuire della semiampiezza) il tratto di sinusoide compreso nell’intervallo tenda ad assumere un andamento rettilineo. In una scala molto piccola quindi potremo pensare di approssimare tale arco di sinusoide con un segmento e caratterizzare quest'ultimo per mezzo del coefficiente angolare della retta che lo comprende e che, evidentemente deve passare per [(π/3),((Sqrt[3])/2)].
Al fine di verificare se tali osservazioni possano valere in generale, definiamo una seconda funzione e studiamone il comportamento in intorni dell'origine: la funzione g per x≠0 vale Sin((1/x)) mentre è nulla se x=0.

g[x_]:=Sin[(1/x)]/;x!=0
g[0]:=0;

Lo zoom attorno all'origine fornisce i grafici seguenti

zoom[g,0]

che manifestamente mostrano un comportamento del tutto diverso dal precedente (in ordinata la funzione continua ad oscillare tra 1 e -1 e all'aumentare dell'ingrandimento emergono nuove oscillazioni, sempre più fitte). Studiando la stessa funzione attorno al punto di ascissa 0.5 invece

zoom[g,0.5]

ritroviamo ancora l'andamento notato per la sinusoide. È evidente quindi che per una stessa funzione vi sono punti dove il comportamento del grafico, a scale sempre più piccole, risulta sostanzialmente differente. In particolare vi sono intorni di punti dove all'aumentare dell'ingrandimento il grafico della funzione tende ad assumere un andamento lineare mentre in altri appare sicuramente più complicato.
Nel primo caso potremo pensare di

descrivere geometricamente l’andamento di tali funzioni con una retta passante per il punto in questione e che apparirà naturale identificare con la retta tangente, mentre

dal punto di vista algebrico tale comportamento potrà essere riassunto per mezzo del coefficiente angolare di tale retta.

Nella sezione successiva cercheremo quindi di caratterizzare maggiormente le proprietà di quei punti dove l'andamento del grafico appare sostanzialmente semplice e assimilabile ad un segmento.

Definizione di rapporto incrementale e suo studio

Se il grafico di una funzione tende a divenire in intorni di un punto quello di un segmento potremo descrivere il suo andamento per mezzo di una retta passante per il punto in questione.

Siccome per ogni relazione lineare (per esempio, y=m x+q) tra due variabili x e y sussiste la costanza del rapporto tra le variazioni della variabile dipendente y con le corrispondenti variazioni della variabile indipendente e ciò, nella geometria analitica, è espresso dalla costanza del coefficiente angolare

m=(((Subscript[y, 2])-(Subscript[y, 1]))/((Subscript[x, 2])-(Subscript[x, 1])))

cercheremo di individuare per questa retta il suo parametro più significativo, cioè il suo coefficiente angolare. Di conseguenza in questa sezione studiamo, inizialmente dal punto di vista grafico e, successivamente con un’analisi numerica, la variazione del coefficiente angolare di una retta passante per il punto di f (Subscript[P, 0])[(Subscript[x, 0,])f((Subscript[x, 0]))], ritenuto fisso, e il punto P[(Subscript[x, 0])+h,f((Subscript[x, 0])+h)] che invece verrà considerato variabile con h (quest’ultimo definito successivamente come l’incremento della variabile indipendente). Verrà quindi analizzata la convergenza o meno di tale coefficiente angolare al diminuire di h. Il coefficiente angolare di tale retta è definito, più propriamente, come il rapporto incrementale nel punto (Subscript[x, 0]) della funzione f,

((Δf)/(Δx))=((f (h+(Subscript[x, 0]))-f((Subscript[x, 0])))/h)

in quanto è il rapporto

dell’incremento Δf=f((Subscript[x, 0])+h)-f((Subscript[x, 0])) della funzione e

dell’incremento Δx=((Subscript[x, 0])+h)-(Subscript[x, 0])=h della variabile indipendente.

Tale retta è evidentemente una retta secante il grafico di f,

La figura seguente mostra graficamente le convenzioni sui nomi, la retta secante e il triangolo avente per cateti i due incrementi, Δf e Δx.

Show[Graphics[{{RGBColor[1,.9,0],Polygon[{{0.6,Sin[0.6]},{2,Sin[2]},{2,Sin[0.6]}}]},{RGBColor[0,0.7,1],Arrow[{{0.6,Sin[0.6]},{2,Sin[0.6]}}],Arrow[{{2,Sin[0.6]},{2,Sin[2]}}]}}],Plot[{f[x],secante[f,x,.6,1.4]},{x,0,π},PlotStyle->{Red,Blue}],Graphics[{{PointSize[Large],{Red,Point[{0.6,Sin[0.6]}]},{Point[{2,Sin[2]}]}},{Text[Style["(Subscript[P, 0])[(Subscript[x, 0]), f((Subscript[x, 0]))]",FontSize->12],{.6-.1,f[.6]},{1,0}],Text[Style["P[(Subscript[x, 0])+h, f((Subscript[x, 0])+h)]",FontSize->12],{2.15,f[2.05]},{-1,0}],Text[Style["Δf",FontSize->12],{2.12,f[2]-0.2}],Text[Style["Δx = h",FontSize->12],{1.4,f[.6]-0.08}]}}],AspectRatio->.5]

Vediamo quindi cosa succede tracciando via via le diverse rette secanti il grafico della funzione f nel punto di ascissa (π/3), quando l'incremento h tende gradualmente a valori sempre più piccoli.

Manipulate[graficiSecanti[f,π/3,h,{{0,3.5},{-0.5,1.2}}],{{h,1.7,Style["incremento  ",FontSize->12]},-1,2.4}]

L'animazione mette in evidenza un fascio di rette proprio di centro ((π/3),((Sqrt[3])/2)) tutte secanti il grafico di f e che, al diminuire dell'incremento, suggeriscono un avvicinamento alla retta tangente. Per quanto visto precedentemente, possiamo intuire come il rapporto incrementale (cioè il loro coefficiente angolare) tenda ad assumere un valore prossimo a quello del segmento che caratterizzava il grafico della funzione a piccola scala. Per rafforzare tale osservazione mostriamo, ancora a livello grafico, il triangolo rettangolo che ha per cateti gli incrementi delle due variabili.
La nuova rappresentazione è ora

Manipulate[graficiSecantiTriangolo[f,π/3,h,{{0,3.5},{-0.5,1.2}}],{{h,1.7,Style["incremento  ",FontSize->12]},-1,2.4}]

La tendenza ad assumere un valore costante (e quindi per il triangolo assumere forme simili) appare in modo più marcato osservando il comportamento a piccole scale.

Manipulate[finestra[f,π/3,h,margineX],{{h,-.235,Style["incremento h  ",FontSize->12]},-.25,.25,.0001},{{margineX,0.65,Style["ingrandimento  ",FontSize->12]},0.0001,1,.001}]

Mano a mano che il punto variabile (color nero) si avvicina a quello fisso (di colore rosso)

le rette secanti approssimano sempre meglio l’andamento della funzione in intorni del punto (Subscript[x, 0]) confondendosi con il grafico divenuto approssimativamente lineare di f. Possiamo ben dire quindi che tali rette si avvicinano a quella retta che, passando per (Subscript[x, 0]), approssima nel modo migliore l’andamento di f cioè la retta tangente. Contemporaneamente

sembra diminuire la variabilità del loro coefficiente angolare:

il rapporto incrementale della funzione pare quindi convergere. A scala ancora maggiore queste osservazioni appaiono sempre più confermate e indipendentemente dal segno dell’incremento.

Per analizzare con maggior precisione la variabilità del rapporto incrementale conviene passare al suo calcolo numerico esplicito. Nella tabella seguente si sono quindi calcolati 100 rapporti incrementali sia in intorni destri che sinistri di (π/3)a partire da un incremento massimo unitario (in valore assoluto). Il più piccolo incremento è quindi, in valore assoluto, pari a 0.01.

Nella tabella le coppie (incremento, rapporto incrementale) sono ordinate secondo il valore decrescente del valore assoluto dell'incremento h in modo da poter osservare più facilmente la convergenza del rapporto incrementale al diminuire (del valore assoluto) di h.

Tabella 1

tavolaValori=tavolaCoeffAngolare[f,π/3,1,100];
Row[Grid[Prepend[#,{Style["incremento h",Bold,FontSize->8,FontFamily->"Helvetica"],Style["rapp. incrementale",Bold,FontSize->8]}],Alignment->{Right},Frame->All,ItemStyle->Directive[FontSize->8],Background->{None,{LightOrange}}]&/@Partition[tavolaValori,50],"   "]

La rappresentazione grafica sottostante di questi coppie di valori mostra chiaramente la tendenza per il rapporto incrementale a convergere verso un determinato valore ( -> 0.5) al tendere allo zero dell'incremento.

ListPlot[tavolaValori,AxesLabel->{Style["incremento",FontSize->12],Style["rapp. incrementale",Bold,FontSize->14]},GridLines->Automatic]

Per mostrare come nel caso della funzione g e nel punto di ascissa nulla l'andamento del rapporto incrementale sia totalmente diverso proponiamo lo stesso calcolo eseguito sopra per la f e nel quale l'intervallo iniziale di ampiezza unitaria (sia destra che sinistra) è stato gradualmente suddiviso in intervalli sempre più piccoli fino ad arrivare ad un valore minimo per l'incremento pari a (10^(-3)).

ListPlot[tavolaCoeffAngolare[g,0,1,(10^3)],AxesLabel->{Style["incremento",FontSize->12],Style["rapp. incrementale",Bold,FontSize->14]},GridLines->Automatic]

In questo caso possiamo ben dire come al tendere allo zero dell'incremento non esista un valore definito verso il quale il rapporto incrementale appaia convergere: anzi manifesta è la sua divergenza in valore assoluto.
Infine, per rendere l'esito del calcolo precedente ancora più esplicito forniamo una tabella dove assegnamo all'incremento h valori molto piccoli: corrispondentemente, il rapporto incrementale mostra chiaramente una convergenza verso il valore 0.5.

Grid[Prepend[tabellaRappIncrementale[f,π/3,10],{Style["incremento h",Bold,FontSize->8],Style["rapp. incrementale",Bold,FontSize->8]}],Alignment->{Right},ItemStyle->Directive[FontSize->8],Frame->All,Background->{None,{LightOrange}}]

Riprendendo la funzione g analizziamo pure per essa e per mezzo del calcolo l'andamento del rapporto incrementale in intorni, questa volta, del punto di ascissa 0.5.

Grid[Prepend[tabellaRappIncrementale[g,0.5,10],{Style["incremento h",Bold,FontSize->8,FontFamily->"Helvetica"],Style["rapp. incrementale",Bold,FontSize->8]}],Alignment->{Right},ItemStyle->Directive[FontSize->8],Frame->All,Background->{None,{LightOrange}}]

Anche in questo caso emerge la convergenza del rapporto verso il valore 1.66459.
Concludiamo ripercorrendo per una terza funzione t lo studio, sia grafico che numerico, del rapporto incrementale. Definita la funzione come

t[x_]:=1/2 (x^2)(x-1)

uno zoom attorno al suo punto di ascissa 1 mostra

zoom[t,1]

l'esistenza di un andamento approssimativamente lineare a piccola scala. Evidenziando il triangolo coinvolgente gli incrementi abbiamo

Manipulate[finestra[t,1,h,margineX],{{h,-.235,Style["incremento h  ",FontSize->12]},-1,1,0.0001},{{margineX,0.5,Style["ingrandimento  ",FontSize->12]},0.001,1.2,0.0001}]

e la costanza del rapporto appare più evidente se si passa a scale più piccole.
Il calcolo numerico dei rapporti a partire da un incremento unitario per giungere al valore di (10^(-2)) fornisce la tabella seguente

tavolaDatit=tavolaCoeffAngolare[t,1,1,100];
Row[Grid[Prepend[#,{Style["incremento h",Bold,FontSize->8,FontFamily->"Helvetica"],Style["rapp. incrementale",Bold,FontSize->8,FontFamily->"Helvetica"]}],Alignment->{Right},Frame->All,ItemStyle->Directive[FontSize->8],Background->{None,{LightOrange}}]&/@Partition[tavolaDatit,50],"   "]

ben sintetizzata dalla rappresentazione grafica seguente: questa conferma visivamente la convergenza del rapporto verso l'unità.

ListPlot[tavolaDatit,AxesLabel->{Style["incremento",FontSize->12],Style["rapp. incrementale",Bold,FontSize->14]},GridLines->Automatic]

Diminuendo sensibilmente l'incremento, si ha infine

Grid[Prepend[tabellaRappIncrementale[t,1,10],{Style["incremento h",Bold,FontSize->8,FontFamily->"Helvetica"],Style["rapp. incrementale",Bold,FontSize->8,FontFamily->"Helvetica"]}],Alignment->{Right},ItemStyle->Directive[FontSize->8],Frame->All,Background->{None,{LightOrange}}]

risultato che ci permette di affermare come il rapporto incrementale, calcolato in intorni del punto (Subscript[x, 0])=1, tenda al valore 0.5 al tendere allo zero dell'incremento.
In definitiva possiamo riassumere l'esito della nostra analisi nelle osservazioni seguenti (già parzialmente esposte in precedenza) e relative alle proprietà caratterizzanti solo determinati punti delle funzioni studiate:

dal punto di vista geometrico: al tendere del punto P a (Subscript[P, 0]), le rette secanti approssimano sempre meglio l’andamento della funzione f confondendosi con il suo grafico approssimativamente lineare. Queste rette si avvicinano ad una retta limite (la tangente) che, passante per (Subscript[x, 0]), approssima nel modo migliore l’andamento di f:

dal punto di vista numerico: al tendere allo 0 dell’incremento h, la variabilità del rapporto incrementale diminuisce e questo mostra di convergere ad un ben preciso limite.

Definizione di derivata in un punto

Nelle precedenti sezioni abbiamo fornito la definizione di rapporto incrementale di una funzione in un suo punto e studiato il suo andamento sia tramite la grafica che numericamente. Tutto ciò giustifica, almeno a livello intuitivo, la definizione seguente:

Definizione. Si definisce derivata di una funzione f in un suo punto (Subscript[x, 0]) il limite, se esiste finito, del rapporto incrementale, al tendere allo zero dell’incremento h.

f'((Subscript[x, 0]))=(lim_(h->0))((f((Subscript[x, 0])+h) - f((Subscript[x, 0])))/h)      con     f'((Subscript[x, 0]))∈ ℝ

Poiché poi, a livello geometrico, la retta tangente nel punto (Subscript[P, 0])[(Subscript[x, 0,])f((Subscript[x, 0]))] del grafico della funzione f viene definita come il limite, se esiste, della retta secante al tendere del punto P[(Subscript[x, 0])+h,f((Subscript[x, 0])+h)] a (Subscript[P, 0]) ossia al tendere allo zero di h, possiamo identificare la derivata in (Subscript[x, 0]) come il coefficiente angolare della retta tangente. L'equazione di questa retta è, nell'ipotesi di esistenza del limite dato sopra,

y-f((Subscript[x, 0]))=f'((Subscript[x, 0])) (x-(Subscript[x, 0]))

Esempi di calcolo formale di derivate

Procediamo in questa sezione al calcolo formale della derivata delle tre funzioni che abbiamo studiato precedentemente.
Per la funzione f nel punto (π/3) il rapporto incrementale risulta

((Sin[(π/3)+h]-Sin[(π/3)])/h);

e se si usano le formule di prostaferesi per il seno si può fattorizzare a numeratore un termine del tipo sin((h/2)).

((2Cos[(π/3)+(h/2)]Sin[(h/2)])/h);

Quest'ultima si può riscrivere come

((Sin[(h/2)] )/(h/2))Cos[(π/3)+(h/2)];

per cui tenendo conto del primo limite fondamentale e della continuità del coseno, il limite di tale espressione fornisce

Limit[((Sin[(h/2)] )/(h/2))Cos[(π/3)+(h/2)],h->0]

in accordo con quanto ottenuto numericamente.
Per la funzione t calcoliamo, inizialmente nel punto generico di ascissa (Subscript[x, 0]), il rapporto incrementale

rappIncrementale[t,x0,h]

Eseguendo i quadrati e raccogliendo i fattori comuni si ottiene per il numeratore

Factor[Expand[-(1/2) (-1+x0) (x0^2)+(1/2) (-1+h+x0) (((h+x0))^2)]]

per cui il rapporto incrementale diviene

Simplify[(((1/2) h (-h+(h^2)-2 x0+3 h x0+3 (x0^2)))/h)]

Volendo la derivata nel punto (Subscript[x, 0])=1, si sostituisce questo valore ad (Subscript[x, 0]) giungendo a

(1/2) ((h^2)+x0 (-2+3 x0)+h (-1+3 x0))/.{x0->1}

ed eseguendo il limite di tale argomento per h->0 appare immediato ottenere

Limit[(1/2) (1+2 h+(h^2)),h->0]

che è il valore pure aspettato.
Passiamo infine al calcolo del limite del rapporto incrementale per la funzione g nel punto (Subscript[x, 0])=(1/2). Il rapporto incrementale nel punto di ascissa (1/2) risulta

rappIncrementale[g,(1/2),h]

che, tramite le formule di prostaferesi, si riscrive come

-((2 Cos[((1+h)/((1/2)+h))] Sin[(h/((1/2)+h))])/h)

Volendo trattare separatamente i termini  Cos[((1+h)/((1/2)+h))] e -((2  Sin[(h/((1/2)+h))])/h), introduciamo per il solo secondo fattore, la nuova variabile z=(h/((1/2)+h)) da cui h

Flatten[Solve[z==(h/((1/2)+h)),h],1]

Il termine -((2  Sin[(h/((1/2)+h))])/h)assume di conseguenza la forma più semplice

Simplify[-((2  Sin[(h/((1/2)+h))])/h)/.{h->-(z/(2 (-1+z)))}]

e il suo limite è

Limit[((4 (-1+z) Sin[z])/z),z->0]

L'altro fattore del rapporto incrementale conduce al limite

Limit[Cos[((1+h)/((1/2)+h))],h->0]

per cui in definitiva si ha

Limit[-((2 Cos[((1+h)/((1/2)+h))] Sin[(h/((1/2)+h))])/h),h->0]

Numericamente tale limite equivale a

N[-4 Cos[2]]

che coincide con quanto già trovato precedentemente per altra via.