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
| 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
| 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
- Dimenticare di definire le variabili simboliche: Sempre usare
symsprima di definire funzioni simboliche - Passo troppo grande nelle differenze finite: Usare h = 1e-4 o 1e-5 per un buon compromesso tra precisione e stabilità
- Confondere derivata e integrale:
diffè per le derivate,intper gli integrali - Non gestire le discontinuità: Per funzioni con punti angolosi, considerare limiti sinistri e destri
10. Risorse Esterne Autorevoli
Per approfondire l’argomento:
- MIT Mathematics Department – Risorse avanzate sul calcolo differenziale
- UC Davis Mathematics – Guide sul calcolo simbolico
- NIST Mathematical Functions – Standard per funzioni matematiche
11. Ottimizzazione delle Prestazioni
Per calcoli intensivi:
- Preallocare le matrici per i risultati
- Utilizzare
vectorizeper funzioni simboliche - Considerare
matlabFunctionper convertire espressioni simboliche in funzioni numeriche - Per derivate numeriche di array, usare
gradientinvece di cicli
12. Estensioni Avanzate
Per utenti esperti:
- Derivate direzionali:
diff(f, [x;y]) - Jacobiano:
jacobianper sistemi di equazioni - Derivate in senso debole: Utile per equazioni differenziali parziali
- Automatic Differentiation: Pacchetti come ADiMat