Calcolatore Numerico MATLAB
Inserisci i parametri per risolvere esercizi di calcolo numerico con MATLAB
Risultati
Esercizi Svolti MATLAB: Guida Completa al Calcolo Numerico
Introduzione al Calcolo Numerico con MATLAB
MATLAB (MATrix LABoratory) è l’ambiente di programmazione più utilizzato per il calcolo numerico, l’analisi dei dati e la visualizzazione scientifica. Questa guida completa presenta esercizi svolti di calcolo numerico con MATLAB, coprendo i metodi fondamentali con implementazioni pratiche e analisi degli errori.
Metodi per la Risoluzione di Equazioni Non Lineari
1. Metodo di Bisezione
Il metodo di bisezione è un algoritmo semplice ma robusto per trovare le radici di una funzione continua. Il principio si basa sul teorema degli zeri di Bolzano.
Implementazione in MATLAB:
function [root, iter] = bisection(f, a, b, tol, max_iter)
if f(a)*f(b) >= 0
error('La funzione deve avere segni opposti agli estremi');
end
for iter = 1:max_iter
c = (a + b)/2;
if abs(f(c)) < tol || (b-a)/2 < tol
root = c;
return;
end
if f(c)*f(a) < 0
b = c;
else
a = c;
end
end
root = (a + b)/2;
end
Esempio di utilizzo:
Per trovare la radice di f(x) = x³ - 2x - 5 nell'intervallo [2, 3] con tolleranza 1e-6:
f = @(x) x.^3 - 2*x - 5;
[root, iter] = bisection(f, 2, 3, 1e-6, 100);
fprintf('Radice trovata: %.6f dopo %d iterazioni\n', root, iter);
2. Metodo di Newton-Raphson
Il metodo di Newton (o Newton-Raphson) è un algoritmo iterativo che converge quadraticamente sotto opportune condizioni. Richiede la conoscenza della derivata della funzione.
Implementazione in MATLAB:
function [root, iter] = newton(f, df, x0, tol, max_iter)
for iter = 1:max_iter
x1 = x0 - f(x0)/df(x0);
if abs(x1 - x0) < tol || abs(f(x1)) < tol
root = x1;
return;
end
x0 = x1;
end
root = x1;
end
Analisi della Convergenza:
- Ordine di convergenza: Quadratico (p=2)
- Condizione necessaria: f'(x) ≠ 0 vicino alla radice
- Vantaggi: Velocità di convergenza elevata
- Svantaggi: Necessità di calcolare la derivata
Interpolazione e Approssimazione
1. Interpolazione Polinomiale di Lagrange
Dati n+1 punti (x₀,f(x₀)), ..., (xₙ,f(xₙ)), il polinomio di Lagrange di grado ≤ n che interpole questi punti è unico.
Implementazione in MATLAB:
function p = lagrange(x, f, xx)
n = length(x);
p = zeros(size(xx));
for i = 1:n
L = ones(size(xx));
for j = 1:n
if j ~= i
L = L.*(xx - x(j))/(x(i) - x(j));
end
end
p = p + f(i)*L;
end
end
2. Approssimazione ai Minimi Quadrati
Quando i dati sono affetti da errori, l'interpolazione può portare a risultati non significativi. L'approssimazione ai minimi quadrati trova la funzione che minimizza la somma dei quadrati degli scarti.
| Metodo | Complessità | Accuratezza | Casi d'Uso |
|---|---|---|---|
| Interpolazione di Lagrange | O(n²) | Esatta nei punti | Dati precisi, pochi punti |
| Minimi Quadrati | O(n³) | Approssimata | Dati rumorosi, molti punti |
| Spline Cubiche | O(n) | Esatta, liscia | Dati che richiedono continuità delle derivate |
Integrazione Numerica
1. Regola del Trapezio
La regola del trapezio approssima l'integrale definito usando trapezi invece di rettangoli. L'errore è O(h³) per ogni intervallo.
Formula Composita:
∫ₐᵇ f(x)dx ≈ h/2 [f(x₀) + 2f(x₁) + 2f(x₂) + ... + 2f(xₙ₋₁) + f(xₙ)]
Implementazione in MATLAB:
function I = trapezoidal(f, a, b, n)
h = (b-a)/n;
x = linspace(a, b, n+1);
y = f(x);
I = h*(sum(y) - 0.5*(y(1) + y(end)));
end
2. Regola di Simpson
La regola di Simpson usa parabole per approssimare la funzione, ottenendo un errore O(h⁵). Richiede un numero pari di intervalli.
Formula Composita:
∫ₐᵇ f(x)dx ≈ h/3 [f(x₀) + 4f(x₁) + 2f(x₂) + 4f(x₃) + ... + f(xₙ)]
| Metodo | Ordine Errore | Num. Punti | Vantaggi |
|---|---|---|---|
| Trapezio | O(h²) | n+1 | Semplice da implementare |
| Simpson | O(h⁴) | n+1 (n pari) | Maggiore accuratezza |
| Gauss-Legendre | O(h²ⁿ) | n | Massima accuratezza per n punti |
Risoluzione di Sistemi Lineari
1. Eliminazione di Gauss
Il metodo di eliminazione di Gauss trasforma la matrice dei coefficienti in una matrice triangolare superiore attraverso operazioni elementari sulle righe.
Implementazione in MATLAB:
function x = gauss_elimination(A, b)
n = length(b);
Ab = [A b];
% Eliminazione
for k = 1:n-1
for i = k+1:n
factor = Ab(i,k)/Ab(k,k);
Ab(i,k:n+1) = Ab(i,k:n+1) - factor*Ab(k,k:n+1);
end
end
% Sostituzione all'indietro
x = zeros(n,1);
x(n) = Ab(n,n+1)/Ab(n,n);
for i = n-1:-1:1
x(i) = (Ab(i,n+1) - Ab(i,i+1:n)*x(i+1:n))/Ab(i,i);
end
end
2. Fattorizzazione LU
La fattorizzazione LU decompone la matrice A nel prodotto di una matrice triangolare inferiore L e una superiore U. Utile per risolvere sistemi con diverse matrici dei termini noti.
Analisi Computazionale:
- Complessità: O(n³) per la fattorizzazione, O(n²) per la risoluzione
- Stabilità: Il pivoting parziale migliorare la stabilità numerica
- Applicazioni: Risoluzione di sistemi, calcolo del determinante, inversione di matrici
Ottimizzazione Numerica
1. Metodo del Gradiente Coniugato
Algoritmo iterativo per la minimizzazione di funzioni quadratiche, particolarmente efficace per sistemi lineari di grandi dimensioni con matrici simmetriche definite positive.
Pseudocodice:
- Inizializza x₀, r₀ = b - Ax₀, p₀ = r₀
- Per k = 0,1,2,... fino a convergenza:
- αₖ = (rₖᵀrₖ)/(pₖᵀApₖ)
- xₖ₊₁ = xₖ + αₖpₖ
- rₖ₊₁ = rₖ - αₖApₖ
- Se ∥rₖ₊₁∥ < tol, stop
- βₖ = (rₖ₊₁ᵀrₖ₊₁)/(rₖᵀrₖ)
- pₖ₊₁ = rₖ₊₁ + βₖpₖ
Analisi degli Errori
Nel calcolo numerico, è fondamentale comprendere e controllare gli errori che possono influenzare i risultati:
1. Errori di Arrotondamento
Dovuti alla rappresentazione finita dei numeri reali nel computer (standard IEEE 754). In MATLAB, il comando eps restituisce la distanza tra 1.0 e il successivo numero in virgola mobile:
>> eps
ans =
2.2204e-16
2. Errori di Troncamento
Derivanti dall'interruzione di processi infiniti (come serie o iterazioni). Ad esempio, l'approssimazione di eˣ con i primi n termini della sua serie di Taylor:
eˣ ≈ 1 + x + x²/2! + x³/3! + ... + xⁿ/ⁿ!
3. Condizionamento di un Problema
Il numero di condizione κ(A) di una matrice misura la sensibilità della soluzione di Ax=b a perturbazioni nei dati:
κ(A) = ∥A∥·∥A⁻¹∥
In MATLAB, si calcola con:
>> A = hilb(5);
>> cond(A)
ans =
4.7661e+05
Risorse Autorevoli per il Calcolo Numerico
Per approfondire gli argomenti trattati, consultare queste risorse accademiche:
- MIT 18.335J / 6.337J - Introduction to Numerical Methods (Massachusetts Institute of Technology)
- Numerical Analysis Resources (UCLA Mathematics Department)
- National Institute of Standards and Technology (NIST) - Algorithms and Software
Conclusione
Questa guida ha presentato i principali metodi di calcolo numerico implementabili in MATLAB, con esercizi svolti e analisi degli errori. La padronanza di queste tecniche è essenziale per affrontare problemi complessi in ingegneria, fisica, economia e data science. Per approfondire, si consiglia di:
- Sperimentare con i codici MATLAB forniti, variando i parametri
- Analizzare la convergenza dei metodi iterativi
- Confrontare l'efficienza computazionale dei diversi algoritmi
- Studiare casi reali tratti da pubblicazioni scientifiche
Il calcolo numerico è una disciplina in continua evoluzione, con nuove tecniche che emergono per affrontare le sfide computazionali moderne, come il machine learning e la simulazione di sistemi complessi.