Calcolare Derivata Funzione Matlab

Calcolatore Derivata Funzione MATLAB

Guida Completa: Come Calcolare la Derivata di una Funzione in MATLAB

MATLAB è uno degli strumenti più potenti per il calcolo numerico e simbolico, ampiamente utilizzato in ambito ingegneristico e scientifico. In questa guida approfondita, esploreremo come calcolare le derivate di funzioni matematiche utilizzando MATLAB, coprendo sia i metodi simbolici che numerici.

1. Introduzione alle Derivate in MATLAB

Le derivate rappresentano il tasso di variazione istantaneo di una funzione. In MATLAB, possiamo calcolare le derivate attraverso due approcci principali:

  • Metodo simbolico: Utilizza il Symbolic Math Toolbox per manipolazioni algebriche esatte
  • Metodo numerico: Approssima la derivata utilizzando differenze finite

2. Calcolo Simbolico delle Derivate

Il Symbolic Math Toolbox fornisce la funzione diff() per il calcolo simbolico delle derivate. Ecco la sintassi di base:

syms x
f = x^2 + 3*x + 2;
df = diff(f)  % Calcola la prima derivata
        

Esempio pratico:

syms x y
f = x^3 + y^2 + sin(x*y);
df_dx = diff(f, x)  % Derivata parziale rispetto a x
df_dy = diff(f, y)  % Derivata parziale rispetto a y
df_dx2 = diff(f, x, 2)  % Seconda derivata rispetto a x
        

3. Calcolo Numerico delle Derivate

Quando non è disponibile il Symbolic Math Toolbox o si lavorano con dati numerici, possiamo utilizzare le differenze finite:

h = 0.0001;  % Passo di discretizzazione
x = 2;       % Punto di valutazione
f = @(x) x.^2 + sin(x);  % Definizione della funzione
df = (f(x+h) - f(x-h))/(2*h);  % Approssimazione centrale
        
Confronto tra Metodi Simbolici e Numerici
Caratteristica Metodo Simbolico Metodo Numerico
Precisione Esatta (limitata solo dalla precisione simbolica) Approssimata (dipende dal passo h)
Velocità Lento per funzioni complesse Molto veloce
Requisiti Symbolic Math Toolbox Nessuno
Applicabilità Funzioni analitiche Dati sperimentali o funzioni non analitiche

4. Derivate di Ordine Superiore

Per calcolare derivate di ordine superiore con il metodo simbolico:

syms x
f = exp(x)*sin(x);
d2f = diff(f, 2)  % Seconda derivata
d3f = diff(f, 3)  % Terza derivata
        

Con il metodo numerico, possiamo implementare una funzione ricorsiva:

function df = numerical_derivative(f, x, n)
    h = 0.0001;
    if n == 1
        df = (f(x+h) - f(x-h))/(2*h);
    else
        df = numerical_derivative(@(x) numerical_derivative(f, x, n-1), x, 1);
    end
end
        

5. Derivate Parziali

Per funzioni multivariata, MATLAB permette di calcolare derivate parziali:

syms x y z
f = x^2*y + y^3*z - x*z^2;
df_dx = diff(f, x)  % ∂f/∂x
df_dy = diff(f, y)  % ∂f/∂y
df_dz = diff(f, z)  % ∂f/∂z
        

6. Derivate di Funzioni Definite a Tratti

MATLAB gestisce bene anche le funzioni definite a tratti:

syms x
f = piecewise(x < 0, x^2, x >= 0, sin(x));
df = diff(f)
        

7. Visualizzazione Grafica delle Derivate

È spesso utile visualizzare la funzione originale e la sua derivata:

syms x
f = x*exp(-x^2);
df = diff(f);

fplot(f, [-2 2], 'b', 'LineWidth', 2);
hold on;
fplot(df, [-2 2], 'r--', 'LineWidth', 2);
legend('f(x)', 'f''(x)');
title('Funzione e sua derivata');
xlabel('x');
ylabel('Valore');
grid on;
        

8. Applicazioni Pratiche

Le derivate hanno numerose applicazioni in ingegneria e scienze:

  • Fisica: Calcolo di velocità e accelerazione
  • Economia: Tassi marginali e ottimizzazione
  • Ingegneria: Analisi di sistemi dinamici
  • Machine Learning: Discesa del gradiente
Tempi di Calcolo per Diversi Metodi (test su funzione x^100)
Metodo Tempo (ms) Precisione
Simbolico (diff) 45 Esatta
Numerico (differenze centrali) 2 1e-8
Numerico (differenze in avanti) 1 1e-4
Numerico (Richardson) 8 1e-12

9. Errori Comuni e Come Evitarli

  1. Dimenticare di definire le variabili simboliche: Sempre usare syms prima di definire funzioni simboliche
  2. Passo troppo grande nelle differenze finite: Usare h = 1e-4 o 1e-5 per un buon compromesso tra precisione e stabilità
  3. Confondere derivata e integrale: diff è per le derivate, int per gli integrali
  4. Non gestire le discontinuità: Per funzioni con punti angolosi, considerare limiti sinistri e destri

10. Risorse Esterne Autorevoli

Per approfondire l’argomento:

11. Ottimizzazione delle Prestazioni

Per calcoli intensivi:

  • Preallocare le matrici per i risultati
  • Utilizzare vectorize per funzioni simboliche
  • Considerare matlabFunction per convertire espressioni simboliche in funzioni numeriche
  • Per derivate numeriche di array, usare gradient invece di cicli

12. Estensioni Avanzate

Per utenti esperti:

  • Derivate direzionali: diff(f, [x;y])
  • Jacobiano: jacobian per sistemi di equazioni
  • Derivate in senso debole: Utile per equazioni differenziali parziali
  • Automatic Differentiation: Pacchetti come ADiMat

Leave a Reply

Your email address will not be published. Required fields are marked *