Lezioni Di Calcolo Numerico E Matlab

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:

  1. Scegliere un intervallo [a, b] dove f(a) e f(b) hanno segni opposti
  2. Calcolare il punto medio c = (a + b)/2
  3. Valutare f(c)
  4. 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]
  5. 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.

Risorse Accademiche:

Per approfondimenti teorici, consultare il materiale del Dipartimento di Matematica del MIT, in particolare le dispense sui metodi numerici per equazioni non lineari.

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:

  1. Costruire la matrice aumentata [A|b]
  2. Eliminazione in avanti: creare zeri sotto la diagonale principale
  3. 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:

  1. Risolvere Ly = b (sostituzione in avanti)
  2. Risolvere Ux = y (sostituzione all’indietro)

Vantaggi: Utile per risolvere sistemi con la stessa matrice A ma diversi termini noti b.

Confronti tra Metodi per Sistemi Lineari
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.

Confronti tra Metodi di Integrazione Numerica
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 lineare
  • fsolve: Risolve sistemi di equazioni non lineari
  • \ (backslash): Risolve sistemi lineari Ax = b
  • polyfit: Approssimazione ai minimi quadrati
  • trapz: Integrazione con la regola del trapezio
  • integral: Integrazione numerica adattiva
  • ode45: 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
        

Risorse Ufficiali:

La documentazione ufficiale di MATLAB fornisce esempi dettagliati e funzioni ottimizzate. Consultare la documentazione MATLAB per approfondimenti.

Per algoritmi numerici avanzati, il National Institute of Standards and Technology (NIST) offre risorse su standard e best practices nel calcolo numerico.

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 error per fermare l'esecuzione in caso di errore.
  • Il Profile di 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:

  1. Comprendere la teoria dietro ciascun metodo.
  2. Saper implementare gli algoritmi da zero (almeno per i metodi fondamentali).
  3. Conoscere le funzioni integrate di MATLAB e quando utilizzarle.
  4. Valutare sempre la correttezza e l'accuratezza dei risultati.

Infine, la pratica costante con problemi reali è il modo migliore per consolidare queste competenze.

Leave a Reply

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