+ All Categories
Home > Documents > Corso di Calcolo numerico - PoliTO

Corso di Calcolo numerico - PoliTO

Date post: 04-Dec-2021
Category:
Upload: others
View: 21 times
Download: 0 times
Share this document with a friend
16
Corso di Calcolo numerico Dr Roberto PISANO Dipartimento di Scienza dei Materiali ed Ingegneria Chimica e-mail: [email protected] Tel: +39 011 090 4694 POLITECNICO DI TORINO – FACOLTA’ DI INGEGNERIA Corso di Laurea in Ingegneria Civile
Transcript
Page 1: Corso di Calcolo numerico - PoliTO

Corso di Calcolo numerico

Dr Roberto PISANO

Dipartimento di Scienza dei Materiali ed Ingegneria Chimica

e-mail: [email protected]

Tel: +39 011 090 4694

POLITECNICO DI TORINO – FACOLTA’ DI INGEGNERIA

Corso di Laurea in Ingegneria Civile

Page 2: Corso di Calcolo numerico - PoliTO

Come creare un M-file di tipo function?

File New M-file

Si apre una finestra in cui è possibile digitare la sequenzadi comandi.

Il carattere % serve per introdurre un commento.

Una function è caratterizzata da una lista di parametri diinput ed output, che sono così definiti:

function [out1,out2]=nome_fun (in1,in2)

Il file deve essere salvato con lo stesso nome dellafunzione seguito dall’estensione (*.m).

Per richiamare la funzione dal promt è sufficiente digitare ilnome della funzione indicando tra parentesi tonde gli input:

>>[c,d]=nome_fun(a,b)

Page 3: Corso di Calcolo numerico - PoliTO

Esercizio 1

Si scriva una function di nome rho che, data in ingresso unamatrice quadrata A, ne restituisca in uscita il raggio spettrale.

Soluzione

function [raggio]=rho(A)

raggio=max(abs(eig(A)));

return

Esercizio 2

Sia b=(1,1,1)T e si ponga A uguale alla seguente matrice:

3 0 4

7 4 2

1 1 2

A

Page 4: Corso di Calcolo numerico - PoliTO

Soluzione

Si crei un M-file, di tipo script, di nome es_2.m.

clc

clear all

close all

b=ones(3,1);

A=[3 0 4;7 4 2; -1 -1 -2];

Esercizio 2 : parte a

Per ciascuna delle matrici assegnate, si stabilisca se imetodi di Jacobi e Gauss-Seidel per la risoluzione delsistema lineare Ax=b convergono e nei casi in cuientrambi convergono si stabilisca chi converge piùvelocemente.

Page 5: Corso di Calcolo numerico - PoliTO

Soluzione

clc

clear all

close all

b=ones(3,1);A=[3 0 4;7 4 2; -1 -1 -2];

% Si calcoli il raggio spettrale della matrice% di iterazione di Jacobi (BJ).J=diag(diag(A));BJ=eye(3)-inv(J)*A;raggio=rho(BJ);out=sprintf(‘Raggio spett. di BJ:%.4f’,raggio);disp(out)

% Si calcoli il raggio spettrale della matrice% di iterazione di Gauss-Seidel (BGS).GS=tril(A);BGS=eye(3)-inv(GS)*A;raggio=rho(BGS);out=sprintf(‘Raggio spett. di BGS:%.4f’,raggio);disp(out)

Page 6: Corso di Calcolo numerico - PoliTO

Esercizio 2 : parte b

Si usino le funzioni jacobi e gs fornite per risolvere ilsistema lineare Ax=b.

Soluzione

Le funzioni jacobi e gs sono così strutturate:

[x,iter,err] = jacobi(A,x,b,iter_max,tol)

[x,iter,err] = gs(A,x,b,iter_max,tol)

Si continui lo script es_2.m. prima implementato.% Si impostino i parametri di input delle funzioni% jacobi e gs.tol=0.001;i_max=1000;x0=ones(3,1);

Page 7: Corso di Calcolo numerico - PoliTO

Continuazione% Si risolva il sistema lineare prima con il metodo% di Jacobi.disp('Risultati Jacobi:')[sol_J,iter_J,err_J]=jacobi(A,x0,b,i_max,tol);sol_Jiter_Jerr_J(end)% Si risolva il sistema lineare prima con il metodo% di Gauss-Seidel.disp('Risultati Gauss-Seidel:')[sol_GS,iter_GS,err_GS]=gs(A,x0,b,i_max,tol);sol_GSiter_GSerr_GS(end)

Page 8: Corso di Calcolo numerico - PoliTO

Corso di Calcolo numerico

Dr Roberto PISANO

Dipartimento di Scienza dei Materiali ed Ingegneria Chimica

e-mail: [email protected]

Tel: +39 011 090 4694

POLITECNICO DI TORINO – FACOLTA’ DI INGEGNERIA

Corso di Laurea in Ingegneria Civile

Page 9: Corso di Calcolo numerico - PoliTO

Esercizio 1: parte a

Utilizzando i comandi MatLab polyfit e polyval, determinare i

polinomi interpolanti di grado 4, 8 e 12 interpolanti la funzione diRunge:

sui nodi equispaziati dell’intervallo [-1,1], dell’intervallo [-2,2] edell’intervallo [-5,5]. Rappresentare i grafici della funzione e deipolinomi in tutti i casi.

Suggerimento

p=polyfit(x,y,n) calcola i coefficienti del polinomio interpolante

e li salva in un vettore p dati i nodi (x), il valore della funzione nei nodistessi (y) e il grado del polinomio interpolante (n). Si ricordi che se ilgrado del polinomio interpolante (n) è minore del numero di nodi, il

Polinomio approssimante è determinato usando il criterio dei minimiquadrati.

y=polyval(p,x) calcola il valore del polinomio definito in p (vettore

che contiene i coefficienti del polinomio in ordine decrescente) neinodi(x).

2

1

1f

x

Page 10: Corso di Calcolo numerico - PoliTO

clcclear allclose all% Si calcoli la funzione di Runge nell’intervallo% di studio [a,b].a=-1;b=1;x=linspace(a,b,1000);y=(1+x.^2).^(-1);plot(x,y,'r')hold on% Si determini il polinomio di grado n che passa% per gli n+1 punti equispaziati nell’intervallo% [a,b].n=4;x1=linspace(a,b,n+1);y1=(1+x1.^2).^-1;p=polyfit(x1,y1,n)plot(x1,y1,'bo')% Si calcoli il valore del polinomio nell’interval-% [a,b], anche in punti esterni ai nodi.x2=linspace(a,b,100);y2=polyval(p,x2);plot(x2,y2,'b-')

Page 11: Corso di Calcolo numerico - PoliTO

Esercizio 1: parte b

Ripetere quanto fatto al punto precedente utilizzando iseguenti nodi (detti nodi di Chebyshev):

Siccome la precedente formula definisce i nodi diChebishev sull’intervallo [-1,1], è necessario effettuare ilcambio di variabile:

per ottenere i valori di tali nodi su un intervallo [a,b]arbitrario.

2 1cos , 0, , 1,1

1 2i

it i se a b

n

2 2i i

b a b ax t

Page 12: Corso di Calcolo numerico - PoliTO

Si continui lo script dell’esercizio precedente.

% Si calcolino i nodi interpolazione di Chebyshev.t=-cos((2*[0:n]+1)/(n+1)*pi/2);x_Cheb=(b-a)/2*t+(b+a)/2;% Si determini il polinomio di grado n che passa gli n+1% punti.y_Cheb=(1+x_Cheb.^2).^(-1);p=polyfit(x_Cheb,y_Cheb,n)plot(x_Cheb,y_Cheb,'x')% Si calcoli il valore del polinomio nell’interval-% [a,b], anche in punti esterni ai nodi.x2=linspace(a,b,100);y2=polyval(p,x2);plot(x2,y2,'g-')

Page 13: Corso di Calcolo numerico - PoliTO

Esercizio 2

Utilizzando il comando MatLab polyfit si costruisca la retta di

regressione (n=1) per l’approssimazione dei punti (xi,yi) le cui ascisseed ordinate sono riportate sul testo dell’esercitazione.Successivamente per gli stessi dati ripetere l’esercizio con n=2 e 3.Rappresentare graficamente i punti (xi,yi) ed i polinomi ottenuti.

Soluzione

clcclear allclose alln=1;x=[1 1 1 1 1 2 3 4 5 5 5];y=[1.1 1.05 1.12 1.07 2 2.1 3.05 3.7 4 4.8 5.2];p=polyfit(x,y,n);x_retta=linspace(min(x),max(y),100);y_retta=polyval(p,x_retta);plot(x,y,'o')hold onplot(x_retta,y_retta)

Page 14: Corso di Calcolo numerico - PoliTO

Esercizio 3

Determinare il polinomio e la spline cubica con condizione not-a-knot,che interpolano la funzione di Runge su 10 e 20 nodi equidistantidell’intervallo [-2,2]. Rappresentare i relativi grafici e commentare irisultati ottenuti.

Suggerimento

p=spline(x,y,z) calcola la spline cubica, che approssima la

funzione, nei nodi assegnati.

Page 15: Corso di Calcolo numerico - PoliTO

Soluzioneclcclear allclose all% Si calcoli la funzione di Runge nell’intervallo% di studio [a,b].n=10;a=-2;b=2;x=linspace(a,b,1000);y=(1+x.^2).^(-1);plot(x,y,'r')hold on% Si determini il polinomio di grado 3 che passa% per gli n punti equispaziati nell’intervallo% [a,b].x1=linspace(a,b,n);y1=(1+x1.^2).^-1;p=polyfit(x1,y1,3)plot(x1,y1,'bo')% Si calcoli il valore del polinomio nell’interval-% [a,b], anche in punti esterni ai nodi.x2=linspace(a,b,100);y2=polyval(p,x2);plot(x2,y2,'b-')

Page 16: Corso di Calcolo numerico - PoliTO

% Si approssimi la funzione Runge con una spline cubica.y3=spline(x1,y1,x2);plot(x2,y3,'g-')


Recommended