Calcolatore per Lezioni di Calcolo Numerico e MATLAB
Utilizza questo strumento per calcolare i parametri fondamentali degli algoritmi numerici e delle operazioni MATLAB.
Guida Completa alle Lezioni di Calcolo Numerico e MATLAB
Introduzione al Calcolo Numerico
Il calcolo numerico è una branca della matematica che si occupa dello sviluppo e dell’analisi di algoritmi per la risoluzione approssimata di problemi matematici continui. Questi metodi sono essenziali quando le soluzioni analitiche esatte non sono disponibili o sono troppo complesse da calcolare.
Applicazioni Principali
- Risoluzione di equazioni non lineari
- Sistemi di equazioni lineari e non lineari
- Interpolazione e approssimazione di funzioni
- Integrazione e derivazione numerica
- Equazioni differenziali ordinarie e alle derivate parziali
MATLAB (MATrix LABoratory) è l’ambiente di programmazione più utilizzato per implementare questi algoritmi grazie alla sua sintassi intuitiva e alle potenti librerie matematiche integrate.
Metodi per la Risoluzione di Equazioni Non Lineari
Metodo di Bisezione
Il metodo di bisezione è uno dei metodi più semplici per trovare le radici di una funzione continua. Si basa sul teorema degli zeri di Bolzano:
Se una funzione continua f(x) cambia segno in un intervallo [a, b], allora esiste almeno una radice in (a, b).
Algoritmo:
- Scegliere un intervallo [a, b] dove f(a) e f(b) hanno segni opposti
- Calcolare il punto medio c = (a + b)/2
- Valutare f(c)
- Determinare il nuovo intervallo:
- Se f(c) = 0, c è la radice
- Se f(a) e f(c) hanno segni opposti, la radice è in [a, c]
- Altrimenti, la radice è in [c, b]
- Ripetere fino a quando |b – a| < tolleranza
Vantaggi: Semplicità e convergenza garantita (se f è continua).
Svantaggi: Convergenza lenta (lineare).
Metodo di Newton-Raphson
Il metodo di Newton (o Newton-Raphson) è un metodo iterativo che utilizza la derivata della funzione per accelerare la convergenza:
Formula iterativa: xₙ₊₁ = xₙ – f(xₙ)/f'(xₙ
Vantaggi: Convergenza quadratica (molto veloce vicino alla soluzione).
Svantaggi: Richiede la derivata della funzione e può divergere se la scelta iniziale è povera.
Sistemi di Equazioni Lineari
Eliminazione di Gauss
L’eliminazione di Gauss è un metodo diretto per risolvere sistemi di equazioni lineari della forma Ax = b. Il metodo trasforma la matrice A in una matrice triangolare superiore attraverso operazioni elementari sulle righe.
Passaggi principali:
- Costruire la matrice aumentata [A|b]
- Eliminazione in avanti: creare zeri sotto la diagonale principale
- Sostituzione all’indietro: risolvere il sistema triangolare
Complessità computazionale: O(n³) per una matrice n × n.
Fattorizzazione LU
La fattorizzazione LU decompone la matrice A nel prodotto di una matrice triangolare inferiore L e una superiore U:
A = LU
Il sistema Ax = b può quindi essere risolto in due passaggi:
- Risolvere Ly = b (sostituzione in avanti)
- Risolvere Ux = y (sostituzione all’indietro)
Vantaggi: Utile per risolvere sistemi con la stessa matrice A ma diversi termini noti b.
| Metodo | Complessità | Stabilità Numerica | Applicabilità |
|---|---|---|---|
| Eliminazione di Gauss | O(n³) | Moderata (può richiedere pivoting) | Generale |
| Fattorizzazione LU | O(n³) | Buona (con pivoting parziale) | Matrici non singolari |
| Metodi Iterativi (Jacobi, Gauss-Seidel) | Variabile | Dipende dalla matrice | Matrici grandi e sparse |
Interpolazione e Approssimazione
Interpolazione Polinomiale
Dati n+1 punti (xᵢ, yᵢ), il polinomio interpolante pₙ(x) di grado ≤ n tale che pₙ(xᵢ) = yᵢ per i = 0, …, n esiste ed è unico.
Forma di Lagrange:
pₙ(x) = Σ [yⱼ ∏ (x – xᵢ)/(xⱼ – xᵢ)] per j = 0 a n, i ≠ j
Forma di Newton: Più efficienti per aggiungere nuovi punti.
Approssimazione ai Minimi Quadrati
Quando i dati sono affetti da errori o sono numerosi, l’interpolazione può portare a polinomi di grado troppo elevato. L’approssimazione ai minimi quadrati trova la funzione che minimizza la somma dei quadrati degli scarti:
min Σ [f(xᵢ) – yᵢ]²
In MATLAB, la funzione polyfit implementa questo metodo:
p = polyfit(x, y, n); % Trova il polinomio di grado n
y_fit = polyval(p, x_fit); % Valuta il polinomio
Integrazione Numerica
Regola del Trapezio
Approssima l’integrale definito usando trapezi invece che rettangoli:
∫ₐᵇ f(x) dx ≈ (b – a)/2 [f(a) + f(b)]
Versione composita (per n sottintervalli):
h = (b – a)/n
I ≈ h/2 [f(a) + 2Σ f(xᵢ) + f(b)] dove xᵢ = a + ih per i = 1, …, n-1
Errore: O(h²) per la versione semplice, O(h²) per quella composita.
Regola di Simpson
Utilizza polinomi quadratici per approssimare la funzione in ciascun sottintervallo:
∫ₐᵇ f(x) dx ≈ (b – a)/6 [f(a) + 4f((a+b)/2) + f(b)]
Versione composita (n sottintervalli, n pari):
h = (b – a)/n
I ≈ h/3 [f(a) + 4Σ f(x_{2i-1}) + 2Σ f(x_{2i}) + f(b)]
Errore: O(h⁴), molto più accurato della regola del trapezio.
| Metodo | Ordine di Errore | Num. Valutazioni Funzione | Applicabilità |
|---|---|---|---|
| Regola del Trapezio (semplice) | O(h²) | 2 | Funzioni lisce |
| Regola del Trapezio (composita) | O(h²) | n+1 | Funzioni lisce |
| Regola di Simpson (semplice) | O(h⁴) | 3 | Funzioni 4 volte derivabili |
| Regola di Simpson (composita) | O(h⁴) | n+1 (n pari) | Funzioni 4 volte derivabili |
Implementazione in MATLAB
Funzioni Principali per il Calcolo Numerico
fzero: Trova gli zeri di una funzione non linearefsolve: Risolve sistemi di equazioni non lineari\(backslash): Risolve sistemi lineari Ax = bpolyfit: Approssimazione ai minimi quadratitrapz: Integrazione con la regola del trapeziointegral: Integrazione numerica adattivaode45: Risolutore per equazioni differenziali ordinarie
Esempio: Metodo di Bisezione in MATLAB
function [c, iter] = bisezione(f, a, b, tol, max_iter)
if f(a)*f(b) >= 0
error('La funzione deve cambiare segno negli estremi');
end
iter = 0;
while (b - a)/2 > tol && iter < max_iter
c = (a + b)/2;
if f(c) == 0
break;
elseif f(a)*f(c) < 0
b = c;
else
a = c;
end
iter = iter + 1;
end
c = (a + b)/2;
end
Esempio: Regola di Simpson in MATLAB
function I = simpson(f, a, b, n)
if mod(n, 2) ~= 0
error('n deve essere pari');
end
h = (b - a)/n;
x = linspace(a, b, n+1);
y = f(x);
I = h/3 * (y(1) + 4*sum(y(2:2:end-1)) + 2*sum(y(3:2:end-2)) + y(end));
end
Errori nel Calcolo Numerico
Tipologie di Errore
- Errore di troncamento: Deriva dall'approssimazione di processi infiniti (es: serie di Taylor troncata).
- Errore di arrotondamento: Causato dalla rappresentazione finita dei numeri nel computer (precisione di macchina).
- Errore assoluto: |x* - x| dove x* è l'approssimazione e x il valore esatto.
- Errore relativo: |x* - x|/|x| (se x ≠ 0).
Condizionamento di un Problema
Un problema è ben condizionato se piccoli cambiamenti nei dati producono piccole variazioni nella soluzione. Il numero di condizione (κ) quantifica questa sensibilità:
κ(A) = ||A|| · ||A⁻¹||
Per matrici, κ(A) ≈ 1 indica un problema ben condizionato, mentre κ(A) >> 1 indica un problema mal condizionato.
In MATLAB, il numero di condizione si calcola con cond(A).
Stabilità degli Algoritmi
Un algoritmo è stabile se gli errori di arrotondamento commessi durante i calcoli non vengono amplificati. Esempi:
- Stabile: Algoritmo di Horner per la valutazione di polinomi.
- Instabile: Formula naif per il calcolo delle radici di un'equazione quadratica quando b² ≈ 4ac.
Best Practices per l'Implementazione in MATLAB
Ottimizzazione del Codice
- Evita i loop quando possibile: usa operazioni vettoriali.
- Prealloca gli array per migliorare le prestazioni.
- Utilizza le funzioni integrate di MATLAB invece di implementare algoritmi personalizzati quando possibile.
- Sfrutta il JIT (Just-In-Time) compiler di MATLAB scrivendo codice compatibile.
Visualizzazione dei Risultati
MATLAB offre potenti strumenti di visualizzazione. Esempi:
% Plot di una funzione
x = linspace(0, 2*pi, 1000);
y = sin(x);
plot(x, y, 'LineWidth', 2);
title('Funzione Seno');
xlabel('x');
ylabel('sin(x)');
grid on;
% Grafico delle iterazioni del metodo di Newton
semilogy(1:length(errors), errors, 'o-');
xlabel('Iterazione');
ylabel('Errore (scala log)');
title('Convergenza del Metodo di Newton');
Debugging e Profiling
- Usa
dbstop if errorper fermare l'esecuzione in caso di errore. - Il
Profiledi MATLAB aiuta a identificare le parti di codice più lente. - Verifica sempre i risultati con casi test noti.
Applicazioni Avanzate
Equazioni Differenziali Ordinarie (ODE)
MATLAB offre diversi solver per ODE, tra cui:
ode45: Metodo Runge-Kutta (4,5) per problemi non stiff.ode15s: Per problemi stiff.ode23: Metodo Runge-Kutta (2,3) per problemi con bassa tolleranza.
Esempio: Risoluzione dell'equazione del pendolo semplice:
function dydt = pendolo(t, y)
g = 9.81;
L = 1;
dydt = [y(2); -g/L * sin(y(1))];
end
[t, y] = ode45(@pendolo, [0 10], [pi/4; 0]);
plot(t, y(:,1), 'LineWidth', 2);
xlabel('Tempo (s)');
ylabel('Angolo (rad)');
title('Moto del Pendolo Semplice');
Ottimizzazione Numerica
MATLAB include funzioni per l'ottimizzazione come:
fminunc: Minimizzazione non vincolata.fmincon: Minimizzazione con vincoli.ga: Algoritmo genetico.
Esempio: Minimizzazione di una funzione quadratica:
fun = @(x) x(1)^2 + 10*x(2)^2;
x0 = [5; 1];
options = optimoptions('fminunc', 'Algorithm', 'quasi-newton');
[x, fval] = fminunc(fun, x0, options);
Conclusione
Il calcolo numerico e MATLAB sono strumenti fondamentali per risolvere problemi matematici complessi in ambiti come l'ingegneria, la fisica, l'economia e la data science. La scelta del metodo numerico appropriato dipende da:
- La natura del problema (lineare/non lineare, dimensione, condizionamento).
- I requisiti di accuratezza.
- Le risorse computazionali disponibili.
Per diventare proficiente, è essenziale:
- Comprendere la teoria dietro ciascun metodo.
- Saper implementare gli algoritmi da zero (almeno per i metodi fondamentali).
- Conoscere le funzioni integrate di MATLAB e quando utilizzarle.
- Valutare sempre la correttezza e l'accuratezza dei risultati.
Infine, la pratica costante con problemi reali è il modo migliore per consolidare queste competenze.