Introduzione Al Calcolo Scientifico Esercizi E Problemi Risolti Con Matlab

Calcolatore Scientifico MATLAB

Inserisci i parametri per risolvere esercizi di calcolo scientifico con MATLAB

Introduzione al Calcolo Scientifico: Esercizi e Problemi Risolti con MATLAB

Fondamenti del Calcolo Scientifico

Il calcolo scientifico rappresenta una branca fondamentale della matematica applicata che si occupa dello sviluppo e dell’analisi di algoritmi per la risoluzione di problemi matematici su computer. MATLAB (MATrix LABoratory) è diventato lo standard de facto per l’implementazione di questi algoritmi grazie alla sua potente sintassi orientata alle matrici e alle sue estese librerie di funzioni matematiche.

Elementi Chiave del Calcolo Scientifico

  • Analisi numerica: Studio degli algoritmi per problemi di analisi matematica (integrazione, derivazione, equazioni differenziali)
  • Algebra lineare computazionale: Metodi per la risoluzione di sistemi lineari e problemi agli autovalori
  • Ottimizzazione: Tecniche per trovare minimi e massimi di funzioni
  • Approssimazione di funzioni: Interpolazione, fitting di curve e approssimazione polinomiale
  • Equazioni differenziali: Metodi numerici per problemi ai valori iniziali e al contorno

Ambiente MATLAB per il Calcolo Scientifico

MATLAB offre un ambiente integrato che combina:

  1. Un linguaggio di programmazione ad alto livello per il calcolo tecnico
  2. Un ambiente interattivo per lo sviluppo di algoritmi
  3. Strumenti grafici per la visualizzazione dei dati
  4. Librerie specializzate (toolbox) per applicazioni specifiche
  5. Interfacce per l’integrazione con altri linguaggi (C, Fortran, Python)
// Esempio di base in MATLAB per calcolare l’integrale definito % Definizione della funzione f(x) = x^2 * exp(-x) f = @(x) x.^2 .* exp(-x); % Calcolo dell’integrale da 0 a 2 con il metodo di quad integral_value = integral(f, 0, 2); % Visualizzazione del risultato disp([‘Il valore dell”integrale è: ‘, num2str(integral_value)]); % Plotting della funzione x = linspace(0, 2, 100); y = f(x); plot(x, y, ‘LineWidth’, 2); xlabel(‘x’); ylabel(‘f(x)’); title(‘Funzione f(x) = x^2 e^{-x}’); grid on;

Metodi Numerici Fondamentali in MATLAB

1. Risoluzione di Equazioni Non Lineari

Il problema di trovare le radici di un’equazione f(x) = 0 è fondamentale in molte applicazioni scientifiche. MATLAB offre diverse funzioni per questo scopo:

Metodo Funzione MATLAB Precisione Complessità Quando usare
Bisezione Custom implementation Moderata O(log(1/ε)) Funzioni continue con segno cambiato
Newton-Raphson fzero Alta O(ε) Funzioni differenziabili
Secante fzero Alta O(1.618^ε) Quando la derivata è costosa
Punto fisso Custom implementation Variabile O(ε) Problemi di punto fisso

2. Integrazione Numerica

Il calcolo di integrali definiti è essenziale in fisica, ingegneria e economia. MATLAB implementa diversi metodi:

  • quad: Metodo di quadratura adattiva basato sulla regola di Simpson
  • integral: Versione più moderna che supporta integrali impropri
  • trapz: Regola del trapezio per dati discretizzati
  • cumtrapz: Integrazione cumulativa
% Confronto tra diversi metodi di integrazione f = @(x) sin(x)./x; % Funzione sinc % Metodo quad (vecchia versione) result_quad = quad(f, 0, pi); % Metodo integral (versione moderna) result_integral = integral(f, 0, pi); % Metodo trapz (per dati campionati) x = linspace(0, pi, 1000); y = f(x); result_trapz = trapz(x, y); % Visualizzazione dei risultati fprintf(‘quad: %.8f\nintegral: %.8f\n trapz: %.8f\n’, … result_quad, result_integral, result_trapz);

3. Derivazione Numerica

La derivazione numerica è necessaria quando non si dispone della forma analitica della derivata. MATLAB offre:

  • diff: Per dati discretizzati
  • gradient: Per campioni non uniformi
  • Implementazioni custom per differenze finite (forward, backward, central)

Applicazioni Pratiche con MATLAB

1. Risoluzione di Equazioni Differenziali Ordinarie (ODE)

Le ODE descrivono molti fenomeni fisici. MATLAB offre diversi solver:

Solver Metodo Precisione Problemi adatti
ode45 Runge-Kutta 4-5 Media-Alta Problemi non stiff
ode23 Runge-Kutta 2-3 Bassa-Media Problemi semplici
ode113 Adams-Bashforth-Moulton Alta Problemi con tolleranze stringenti
ode15s NDFs (formule differenze all’indietro) Media Problemi stiff
% Esempio: Equazione del pendolo semplice % d²θ/dt² + (g/l)sin(θ) = 0 g = 9.81; % accelerazione di gravità l = 1; % lunghezza del pendolo % Riscrizione come sistema di primo ordine % y(1) = θ, y(2) = dθ/dt pendulum = @(t,y) [y(2); -(g/l)*sin(y(1))]; % Condizioni iniziali: θ(0) = π/4, dθ/dt(0) = 0 y0 = [pi/4; 0]; % Intervallo temporale tspan = [0 10]; % Risoluzione con ode45 [t,y] = ode45(pendulum, tspan, y0); % Plotting figure; subplot(2,1,1); plot(t, y(:,1), ‘LineWidth’, 2); xlabel(‘Tempo (s)’); ylabel(‘Angolo θ (rad)’); title(‘Posizione angolare del pendolo’); grid on; subplot(2,1,2); plot(t, y(:,2), ‘LineWidth’, 2); xlabel(‘Tempo (s)’); ylabel(‘Velocità angolare dθ/dt (rad/s)’); title(‘Velocità angolare del pendolo’); grid on;

2. Interpolazione e Fitting di Dati

MATLAB eccelle nella manipolazione e analisi dei dati sperimentali:

  • interp1: Interpolazione 1D (lineare, spline, etc.)
  • interp2/3: Interpolazione multidimensionale
  • polyfit: Fitting polinomiale
  • fit: Fitting non lineare (richiede Curve Fitting Toolbox)
  • spline: Interpolazione con spline cubiche

Best Practices per il Calcolo Scientifico in MATLAB

1. Ottimizzazione del Codice

  1. Vettorizzazione: Evitare cicli for quando possibile, usando operazioni su array
  2. Preallocazione: Allocare gli array prima di riempirli per evitare ridimensionamenti
  3. Funzioni JIT: Sfruttare la compilazione Just-In-Time di MATLAB
  4. Profiler: Usare il profiler per identificare i colli di bottiglia
  5. Mex-files: Per sezioni critiche, considerare l’integrazione con C/Mex

2. Gestione degli Errori Numerici

Comprendere e gestire gli errori è cruciale:

  • Errore di troncamento: Dovuto all’approssimazione del metodo
  • Errore di arrotondamento: Dovuto alla precisione finita dei float
  • Condizionamento: Sensibilità del problema ai dati di input
  • Stabilità: Comportamento degli errori durante il calcolo
% Esempio: Effetti degli errori di arrotondamento format long; % Calcolo di (1 + ε) – 1 per diversi valori di ε eps_values = logspace(-1, -16, 16); results = zeros(size(eps_values)); for i = 1:length(eps_values) results(i) = (1 + eps_values(i)) – 1; end % Visualizzazione figure; loglog(eps_values, results, ‘o-‘, ‘LineWidth’, 2); hold on; loglog(eps_values, eps_values, ‘r–‘, ‘LineWidth’, 1.5); xlabel(‘Valore di ε’); ylabel(‘Risultato di (1+ε)-1’); title(‘Errore di arrotondamento nella cancellazione catastrofica’); legend(‘Risultato calcolato’, ‘Valore atteso’, ‘Location’, ‘northwest’); grid on;

3. Visualizzazione dei Risultati

Una buona visualizzazione è essenziale per l’analisi dei dati:

  • Usare plot per grafici 2D di base
  • semilogy/semilogx/loglog per scale logaritmiche
  • surf/mesh per grafici 3D
  • imagesc per visualizzazione di matrici
  • subplot per multiple visualizzazioni
  • Personalizzare con title, xlabel, ylabel, legend
  • Esportare con saveas o print

Risorse per l’Apprendimento

Per approfondire il calcolo scientifico con MATLAB:

Esercizi Pratici con Soluzioni

Esercizio 1: Approssimazione di π

Testo: Usare il metodo di Monte Carlo per approssimare π. Generare N punti casuali nel quadrato unitario [0,1]×[0,1] e contare quanti cadono nel quarto di cerchio di raggio 1 centrato nell’origine.

Soluzione MATLAB:

N = 1000000; % Numero di punti x = rand(N,1); y = rand(N,1); % Punti dentro il quarto di cerchio inside = (x.^2 + y.^2) <= 1; pi_approx = 4 * sum(inside) / N; fprintf('Approssimazione di π: %.6f\nErrore assoluto: %.6f\n', ... pi_approx, abs(pi_approx - pi));

Esercizio 2: Risoluzione di un Sistema Lineare

Testo: Risolvere il sistema Ax = b dove:

A = [4 1 0 0; 1 4 1 0; 0 1 4 1; 0 0 1 4]; b = [0; 5; 0; 6];

Soluzione:

% Metodo 1: Operatore backslash x1 = A \ b; % Metodo 2: Fattorizzazione LU [L,U] = lu(A); y = L \ b; x2 = U \ y; % Metodo 3: Inversione esplicita (sconsigliato per matrici grandi) x3 = inv(A) * b; % Verifica disp(‘Soluzioni:’); disp([x1 x2 x3]); disp(‘Residuo (A*x – b):’); disp(norm(A*x1 – b));

Esercizio 3: Equazione Differenziale del Circuito RLC

Testo: Risolvere l’equazione differenziale per un circuito RLC in serie con R=10Ω, L=0.1H, C=0.01F, tensione E(t)=sin(10t), condizioni iniziali i(0)=0, di/dt(0)=0.

Soluzione:

% Parametri del circuito R = 10; L = 0.1; C = 0.01; % Equazione differenziale: L*di/dt + R*i + (1/C)∫i dt = E(t) % Riscrizione come sistema di primo ordine: % dy1/dt = y2 % dy2/dt = (E(t) – R*y2 – y1/C)/L E = @(t) sin(10*t); rlc_ode = @(t,y) [y(2); (E(t) – R*y(2) – y(1)/C)/L]; % Condizioni iniziali: i(0)=0, di/dt(0)=0 y0 = [0; 0]; % Intervallo temporale tspan = [0 2]; % Risoluzione [t,y] = ode45(rlc_ode, tspan, y0); % Plotting figure; plot(t, y(:,1), ‘LineWidth’, 2); xlabel(‘Tempo (s)’); ylabel(‘Corrente i(t) (A)’); title(‘Corrente nel circuito RLC’); grid on;

Leave a Reply

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