Calcolo Numerico Esercizi Svolti Matlab Ripetizioni

Calcolatore Numerico per Esercizi MATLAB

Guida Completa al Calcolo Numerico con MATLAB: Esercizi Svolti e Tecniche di Ripetizione

Il calcolo numerico rappresenta una branca fondamentale della matematica applicata che si occupa di sviluppare algoritmi per approssimare soluzioni di problemi matematici complessi. Quando abbinato a MATLAB, uno dei software più potenti per il computing tecnico, diventa uno strumento indispensabile per ingegneri, fisici e data scientist.

1. Fondamenti del Calcolo Numerico

Prima di addentrarci negli esercizi pratici, è essenziale comprendere i concetti base:

  • Errore assoluto e relativo: La differenza tra valore esatto e approssimato (errore assoluto) e la sua proporzione rispetto al valore esatto (errore relativo).
  • Condizionamento di un problema: Misura di quanto gli errori sui dati influenzano la soluzione (numero di condizionamento).
  • Stabilità degli algoritmi: Capacità di un algoritmo di non amplificare gli errori iniziali.
  • Convergenza: Proprietà per cui la soluzione approssimata tende al valore esatto al crescere delle iterazioni.

2. Metodi per la Risoluzione di Equazioni Non Lineari

I metodi iterativi per trovare gli zeri di una funzione f(x) = 0 sono tra gli argomenti più importanti. Analizziamo i principali:

2.1 Metodo di Bisezione

Il metodo più semplice ma robusto, basato sul teorema degli zeri. Richiede che la funzione cambi segno nell’intervallo [a,b].

    % Implementazione MATLAB di base
    function [c, iter] = bisezione(f, a, b, tol, max_iter)
        if f(a)*f(b) >= 0
            error('La funzione non cambia segno nell''intervallo')
        end
        for iter = 1:max_iter
            c = (a + b)/2;
            if abs(f(c)) < tol
                return
            end
            if f(a)*f(c) < 0
                b = c;
            else
                a = c;
            end
        end
        warning('Raggiunto il numero massimo di iterazioni')
    end
    

2.2 Metodo di Newton-Raphson

Metodo più efficiente (convergenza quadratica) che richiede la derivata della funzione. La formula iterativa è:

xn+1 = xn - f(xn)/f'(xn)

Attenzione: Il metodo di Newton può divergere se la scelta del punto iniziale è inappropriata o se f'(x) = 0 durante le iterazioni. Si consiglia di:

  1. Visualizzare graficamente la funzione per identificare buoni punti iniziali
  2. Combinare con il metodo di bisezione per garantire convergenza
  3. Implementare un controllo sul numero di iterazioni massime

3. Integrazione Numerica

L'integrazione numerica è essenziale quando non esiste una primitiva espressa in forma chiusa. I metodi più utilizzati sono:

Metodo Formula Ordine di Errore Vantaggi Svantaggi
Regola del Trapezio ∫f(x)dx ≈ (b-a)/2 [f(a) + f(b)] O(h²) Semplice da implementare Poco accurato per funzioni non lineari
Regola di Simpson ∫f(x)dx ≈ (b-a)/6 [f(a) + 4f((a+b)/2) + f(b)] O(h⁴) Molto accurato per funzioni lisce Richiede n pari di intervalli
Quadratura Gaussiana ∫f(x)dx ≈ Σ wᵢf(xᵢ) O(h²ⁿ) Massima precisione con pochi punti Pesi e nodi non uniformi

In MATLAB, la funzione integral implementa algoritmi adattivi basati sulla quadratura di Gauss-Kronrod:

    % Esempio di integrazione con MATLAB
    f = @(x) exp(-x.^2).*sin(x);
    Q = integral(f, 0, pi, 'RelTol', 1e-6, 'AbsTol', 1e-10);
    fprintf('Integrale calcolato: %.8f\n', Q);
    

4. Risoluzione di Sistemi Lineari

I metodi diretti (come l'eliminazione di Gauss) e iterativi (Gauss-Seidel, Gradiente Coniugato) sono fondamentali per risolvere sistemi del tipo Ax = b.

4.1 Eliminazione di Gauss

Trasforma la matrice A in una matrice triangolare superiore attraverso operazioni elementari:

  1. Pivoting parziale per evitare divisioni per zero
  2. Eliminazione degli elementi sotto la diagonale
  3. Risoluzione per sostituzione all'indietro
    % Implementazione MATLAB
    function x = gauss_elimination(A, b)
        n = length(b);
        % Eliminazione
        for k = 1:n-1
            for i = k+1:n
                factor = A(i,k)/A(k,k);
                A(i,k:n) = A(i,k:n) - factor*A(k,k:n);
                b(i) = b(i) - factor*b(k);
            end
        end
        % Sostituzione all'indietro
        x = zeros(n,1);
        x(n) = b(n)/A(n,n);
        for i = n-1:-1:1
            x(i) = (b(i) - A(i,i+1:n)*x(i+1:n))/A(i,i);
        end
    end
    

4.2 Metodi Iterativi

Utilizzati per sistemi grandi e sparsi. Il metodo di Gauss-Seidel è particolarmente efficace:

    % Gauss-Seidel in MATLAB
    function x = gauss_seidel(A, b, x0, max_iter, tol)
        n = length(b);
        x = x0;
        for iter = 1:max_iter
            x_old = x;
            for i = 1:n
                x(i) = (b(i) - A(i,1:i-1)*x(1:i-1) - A(i,i+1:n)*x_old(i+1:n))/A(i,i);
            end
            if norm(x - x_old, inf) < tol
                break;
            end
        end
    end
    

5. Interpolazione e Approssimazione

L'interpolazione polinomiale (Lagrange, Newton) e l'approssimazione ai minimi quadrati sono tecniche per stimare funzioni a partire da dati discreti.

5.1 Interpolazione di Lagrange

Dati n+1 punti (xᵢ, yᵢ), trova il polinomio di grado ≤n che passa per tutti i punti:

Pₙ(x) = Σ yⱼ ∏ (x - xᵢ)/(xⱼ - xᵢ) per i ≠ j

5.2 Approssimazione ai Minimi Quadrati

Quando i dati sono affetti da rumore, è meglio approssimare con un polinomio di grado inferiore:

    % In MATLAB
    x = [0 1 2 3 4];
    y = [1 3 2 3 4];
    p = polyfit(x, y, 2); % Polinomio di grado 2
    x_fit = linspace(0, 4, 100);
    y_fit = polyval(p, x_fit);
    plot(x, y, 'o', x_fit, y_fit, '-');
    

6. Esercizi Svolti con MATLAB

Vediamo alcuni esercizi tipici con soluzione dettagliata:

Esercizio 1: Metodo di Newton per f(x) = x³ - 6x² + 11x - 6

Testo: Trovare la radice vicina a x₀ = 1.5 con tolleranza 1e-5.

Soluzione:

    f = @(x) x.^3 - 6*x.^2 + 11*x - 6;
    df = @(x) 3*x.^2 - 12*x + 11;
    x0 = 1.5;
    tol = 1e-5;
    max_iter = 100;

    for i = 1:max_iter
        x1 = x0 - f(x0)/df(x0);
        if abs(x1 - x0) < tol
            break;
        end
        x0 = x1;
    end
    fprintf('Radice trovata: %.8f in %d iterazioni\n', x1, i);
    

Risultato: La radice x ≈ 1.99999999 con convergenza in 4 iterazioni.

Esercizio 2: Integrazione con Simpson di ∫₀¹ eˣ sin(x) dx

Soluzione MATLAB:

    f = @(x) exp(x).*sin(x);
    a = 0; b = 1; n = 100; % n deve essere pari
    h = (b-a)/n;
    x = a:h:b;
    y = f(x);

    % Regola di Simpson
    integral = h/3 * (y(1) + y(end) + ...
                      4*sum(y(2:2:end-1)) + ...
                      2*sum(y(3:2:end-2)));
    fprintf('Integrale approssimato: %.8f\n', integral);
    

7. Tecniche di Ripetizione Efficaci

Per padronanza del calcolo numerico con MATLAB:

  1. Pratica costante: Risolvere almeno 3 esercizi al giorno su metodi diversi
  2. Visualizzazione: Usare sempre fplot per comprendere il comportamento delle funzioni
  3. Debugging: Verificare i risultati con funzioni MATLAB built-in (fzero, integral)
  4. Ottimizzazione: Analizzare la complessità computazionale degli algoritmi implementati
  5. Documentazione: Commentare il codice e tenere un quaderno degli errori comuni

8. Risorse Esterne Autorevoli

Per approfondire:

9. Confronto tra Metodi Numerici

Metodo Velocità di Convergenza Robustezza Complessità Computazionale Casi d'Uso Ideali
Bisezione Lineare (O(1/n)) ⭐⭐⭐⭐⭐ O(n log(1/ε)) Funzioni continue con cambio di segno garantito
Newton-Raphson Quadratica (O(ε²)) ⭐⭐⭐ O(log log(1/ε)) Funzioni lisce con derivata nota
Secante Superlineare (O(ε^(1.62))) ⭐⭐⭐⭐ O(log(1/ε)) Quando la derivata è costosa da calcolare
Regola del Trapezio O(h²) ⭐⭐⭐⭐ O(n) Integrazione di funzioni regolari
Regola di Simpson O(h⁴) ⭐⭐⭐⭐ O(n) Funzioni lisce con derivata quarta continua

10. Errori Comuni e Come Evitarli

Durante l'implementazione di algoritmi numerici, è facile incorrere in errori sistematici:

  • Cancellazione numerica: Sottrazione di numeri quasi uguali (es: 1.000001 - 1.000000 = 0.000001 ma con perdita di precisione). Soluzione: Riorganizzare le formule o usare precisione maggiore.
  • Overflow/Underflow: Numeri troppo grandi o troppo piccoli. Soluzione: Usare scala logaritmica o normalizzazione.
  • Convergenza a soluzioni non desiderate: Nel metodo di Newton, scelta sbagliata del punto iniziale. Soluzione: Analisi grafica preliminare.
  • Matrici mal condizionate: Piccole variazioni nei dati portano a grandi errori. Soluzione: Usare decomposizione SVD o metodi iterativi.
  • Iterazioni infinite: Mancanza di criterio di arresto. Soluzione: Impostare sempre un limite massimo di iterazioni.

11. Applicazioni Pratiche del Calcolo Numerico

Le tecniche numeriche trovano applicazione in numerosi campi:

  • Ingegneria: Analisi strutturale, fluidodinamica computazionale (CFD), ottimizzazione di design
  • Finanza: Valutazione di opzioni (metodo di Monte Carlo), gestione del rischio
  • Medicina: Modelli farmacocinetici, elaborazione di immagini medicali
  • Fisica: Simulazioni quantistiche, dinamica molecolare
  • Data Science: Ottimizzazione di modelli di machine learning, riduzione della dimensionalità

12. Strumenti Avanzati in MATLAB

MATLAB offre toolbox specializzati per il calcolo numerico:

  • Optimization Toolbox: Funzioni come fminunc per ottimizzazione non lineare
  • Symbolic Math Toolbox: Calcolo simbolico con solve e int
  • Parallel Computing Toolbox: Accelerazione di algoritmi numerici su GPU
  • Curve Fitting Toolbox: Approssimazione avanzata di dati sperimentali
  • Partial Differential Equation Toolbox: Risoluzione di PDE con metodi agli elementi finiti

13. Preparazione per Esami e Collqui

Per superare esami o collqui tecnici sul calcolo numerico:

  1. Studiare a fondo la teoria degli errori e la stabilità degli algoritmi
  2. Imparare a memoria le formule iterative dei principali metodi
  3. Esercitarsi con implementazioni "da zero" senza usare funzioni MATLAB built-in
  4. Saper spiegare perché un metodo è preferibile a un altro in un dato contesto
  5. Conoscere i limiti teorici (es: il metodo di Newton non converge per funzioni con punti stazionari)
  6. Saper interpretare i risultati: "Questo risultato è ragionevole? Perché?"

14. Progetti Pratici per Portfolio

Alcune idee per progetti che dimostrano competenza:

  • Implementazione di un solver per equazioni differenziali con metodi Runge-Kutta
  • Creazione di una GUI in MATLAB per risolvere sistemi lineari con diversi metodi
  • Analisi comparativa della precisione di metodi di integrazione su funzioni patologiche
  • Sviluppo di un algoritmo per il calcolo degli autovalori usando il metodo delle potenze
  • Applicazione del metodo degli elementi finiti a un problema fisico semplice

15. Conclusioni e Prospettive Future

Il calcolo numerico rimane una disciplina in continua evoluzione, soprattutto con l'avvento del computing quantistico e dell'intelligenza artificiale. Padronanza di questi metodi, abbinata alla capacità di implementarli efficientemente in MATLAB, apre porte in numerosi settori tecnologici avanzati.

Per mantenersi aggiornati, si consiglia di:

  • Seguire conferenze come la SIAM Annual Meeting
  • Leggere riviste come "Journal of Computational Mathematics"
  • Esplorare le nuove funzionalità di MATLAB in ambito numerico (es: vpa per precisione arbitraria)
  • Sperimentare con librerie Python come NumPy/SciPy per un confronto tra linguaggi

Leave a Reply

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