Title | Script Calcolo Numerico Con Matlab |
---|---|
Course | Calcolo Numerico |
Institution | Università degli Studi di Padova |
Pages | 11 |
File Size | 72.7 KB |
File Type | |
Total Downloads | 77 |
Total Views | 149 |
Script Matlab principali argomenti di Calcolo Numerico per la facoltà di Ingegneria.
Argomenti: radici funzioni non lineari, quadratura numerica per il calcolo approssimato di un integrale definito, soluzione di sistemi lineari di equazioni, interpolazione e metodo dei minimi quadrati. ...
Script Matlab per i principali argomenti studiati nel corso di Calcolo Numerico per la facoltà di Ingegneria. ! Ogni script è accompagnato da indicazioni sul procedimento seguito. ! INDICE: 1. Metodi per la soluzione di equazioni non lineari ! - Metodo di Newton-Raphson (Tangente Variabile)! - Metodo della Tangente Fissa! - Metodo della Regula Falsi (Secante Variabile)! - Metodo della Secante Fissa! 2. Metodi di quadratura per il calcolo approssimato di un integrale definito! - Metodo di Cavalier-Simpson composto! - Metodo dei Trapezi composto! 3.
4.
Metodi per la soluzione di sistemi di equazioni lineari !
- Metodo di Jacobi! - Metodo di Gaus-Seidel! - Metodo SOR!
Metodo di Interpolazione attraverso la formula dei minimi quadrati!
1. Metodi per la soluzione di equazioni non lineari Metodo di Newton-Raphson ( Tangente Variabile ) per la soluzione di equazioni non lineari! % 1) Completare la function con le variabili di input/ouput, in modo che sia! % adatta a qualunque funzione fun.! function [xvetnr,scvetnr,iternr, Mnr]=New_Rap(x0, toll, itmax, fun, der) ! %OUTPUT ( ciò che fornisce la function ): xvetnr (vettore soluzione x), scvetnr (vettore scarto), ! % iternr (numero di iterazioni per arrivare alla soluzione), Mnr (costante! % asintotica).! %IMPUT (i dati da fornire alla function nel solver affinchè lavori): x0 (prima soluzione ipotizzata), ! % toll (tolleranza), itmax (numero massimo iterazioni volute), fun! % (funzione), der (derivata della funzione).! % 2) preparare le array di ouput.! xvetnr=[];! scvetnr=[];! %3) inizializzare il ciclo ( tutte le variabili necessarie per lo! %svolgimento del ciclo e dipendenti dalle variabili di input ).! scarto=2*toll;! xk=x0;! iternr=0;! scartoold=0;! while scarto>toll && iternrtoll && itertftoll && iterrf < itmax % condizioni per svolgimento e interruzione ciclo! ! iterrf=iterrf+1; % incrementare le iterazioni! xkp1 = xk-(fun(xk)*((xk-xkm1)/(fun(xk)-fun(xkm1)))); %implementare il metodo della regula falsi! scarto=abs(xkp1-xk); %calcolare lo scarto ! Mrf= scarto/(scartoold).^1.618; %calcolare la costante asintotica! % 4) salvare le array di output! xvetrf(iterrf)=xkp1; ! scvetrf(iterrf)=scarto;! % 5) preparare le variabili per la nuova iterazione! xkm1 = xk ; ! xk = xkp1;! end! xvetrf=xvetrf(1:iterrf); ! scvetrf=scvetrf(1:iterrf);! !
Metodo della Secante Fissa per la soluzione di equazioni non lineari! % 1) Completare la function con le variabili di input/ouput, in modo che sia! % adatta a qualunque funzione fun.! function[scvetsf,xvetsf,itersf,Msf]=Sec_fis(x0,x1,fun,toll,itmax)! %OUTPUT ( ciò che fornisce la function ): xvetsf (vettore soluzione x), scvetsf (vettore scarto), ! % itersf(numero di iterazioni per arrivare alla soluzione), Msf (costante! % asintotica).! %IMPUT (i dati da fornire alla function nel solver affinchè lavori): x0, x1, ! % toll (tolleranza), itmax (numero massimo iterazioni volute), fun! % (funzione).! % 2) preparare le array di ouput.! xvetsf=zeros(itmax,1);! scvetsf=zeros(itmax,1);! %3) inizializzare il ciclo ( tutte le variabili necessarie per lo! %svolgimento del ciclo e dipendenti dalle variabili di input ).! scarto=2*toll;! xkm1=x0;! xk=x1;! fun1=fun(x1);! fun0=fun(x0);! itersf=0;! scartoold=0;! while scarto>toll && itersf < itmax % condizioni per svolgimento e interruzione ciclo! ! itersf=itersf+1; % incrementare le iterazioni! xkp1 = xk-(fun(xk)*((x1-x0)/(fun1-fun0))); %implementare il metodo della secante fissa! scarto=abs(xkp1-xk); %calcolare lo scarto ! Msf= scarto/(scartoold); %calcolare la costante asintotica! % 4) salvare le array di output! xvetsf(itersf)=xkp1;! scvetsf(itersf)=scarto;! % 5) preparare le variabili per la nuova iterazioni ! xkm1 = xk ; ! xk = xkp1;! scartoold=scarto;! end! xvetsf=xvetsf(1:itersf); ! scvetsf=scvetsf(1:itersf);! !
2. Metodi di quadratura per il calcolo approssimato di un integrale definito Metodo di Simpson per il calcolo approssimato di un integrale definito! % 1) Completare la function con le variabili di input/ouput affinchè sia! % utilizzabile per la soluzione di qualunque sistema di equazioni lineari.! function[x,w,Is]=simpson_composta(n,a,b,f)! %OUTPUT: x (nodi integrazione), w (pesi integrazione), Is (valore! %approssimato dell'integrale).! %INPUT: n (numero sottointervalli di ab), a-b (estremi intervallo di! %integrazione), f (funzione).! h=(b-a)/n; % 2) calcolare l'ampiezza di ogni sottointervallo! x=linspace(a,b,2*n+1)'; % 3) creare un insieme di punti equispaziati (distanza h/2) tra a e b! y=f(x);! w=ones(2*n+1,1); % 4) calcolare pesi. w è una matrice di tutti 1! w(3:2:2*n-1)=2; %ATTENZIONE: per la formula di Simpson, i nodi dispari valgono 2, quelli pari 4;! w(2:2:2*n)=4;! w=w*h/6;! Is=w'*y; %% 5) calcolare valore approssimato dell'integrale! end!
Metodo dei Trapezi per il calcolo approssimato di un integrale definito! % 1) Completare la function con le variabili di input/ouput affinchè sia! % utilizzabile per la soluzione di qualunque sistema di equazioni lineari.! function [x,w,Itrap]=trapezi_composta(n,a,b,f)! %OUTPUT: x (nodi integrazione), w (pesi integrazione), Itrap (valore! %approssimato dell'integrale).! %INPUT: n (numero sottointervalli di ab), a-b (estremi intervallo di! %integrazione), f (funzione).! h=(b-a)/n; %% 2) calcolare l'ampiezza di ogni sottointervallo! x=linspace(a,b,n+1)'; %% 3) creare un insieme di punti equispaziati (distanza h) tra a e b! y=f(x);! w=ones(n+1,n); %% 4) calcolare pesi. w è una matrice di tutti 1! w(1)=0.5; %% ATTENZIONE: per la formula dei trapezi, i nodi agli estremi valgono 0.5! w(n+1)=0.5;! % 5) valutare funzione nei nodi! Itrap=h*w'*fx; end !
%% 6) calcolare valore approssimato dell' integrale!
3. Metodi per la soluzione di sistemi di equazioni lineari Metodo di Jacobi per la soluzione di sistemi di equazioni lineari! % 1) Completare la function con le variabili di input/ouput affinchè sia! % utilizzabile per la soluzione di qualunque sistema di equazioni lineari.! function[xkp1ja,scartoja,scvetja,iterja]=jacobi(MatA,bvet,x0,toll,itmax,n)! %OUTPUT: xkp1ja (soluzione x), scartoja(lo scarto), scvetja (il vettore! %dello scartoja), iterja (il numero di iterazioni).! %INPUT:MatA (matrice quadrata A dei coefficienti delle equazioni), bvet (vettore! %soluzioni), x0, toll (tolleranza), itmax (numero iterazioni massime), n! %(dimensione matrice quadrata A)! % 2) inizializzare il ciclo ( tutte le variabili necessarie per lo! %svolgimento del ciclo e dipendenti dalle variabili di input ).! scartoja=2*toll;! iterja=0;! xk=x0;! scvetja=[]; % preparare array output per vettore scarto! matD=diag(diag(MatA)); %matD: matrice diagonale con diagonale la diagonale di MatA! matI=eye(n); % matI: matrice identità con la dimensione di MatA! vetQ=matD\bvet; %% ATTENZIONE: verificare che bvet abbia dimensione compatibile con matD).! while scartoja>toll && iterjatoll && itersor...