Calcolo Numerico - Esercizi 1

24
Programmi Programmi MATLAB MATLAB Luca Zanni, Marco Prato Calcolo Numerico Corsi di Laurea in Matematica e Informatica

Transcript of Calcolo Numerico - Esercizi 1

Page 1: Calcolo Numerico - Esercizi 1

ProgrammiProgrammiMATLABMATLAB

Luca Zanni, Marco Prato

Calcolo Numerico

Corsi di Laurea in Matematica e Informatica

Page 2: Calcolo Numerico - Esercizi 1

SommaSomma didi M M numerinumeri realireali (1)(1)

M = input(‘Inserire il numero di …

numeri naturali da sommare: ’);

S = 0;

i = 1;

while i <= M

S = S + i;

i = i + 1;

inizio

M

S 0

i 1i = i + 1;

end

fprintf(‘\n La somma dei primi %i…

numeri naturali risulta %i \n’,…

M,S);

V Fi ≤ M

S S+i

i i+1

S

fine

Page 3: Calcolo Numerico - Esercizi 1

SommaSomma didi M M numerinumeri realireali (2)(2)

M = input(‘Inserire il numero di …

numeri naturali da sommare: ’);

S = 0;

for i = 1 : M

S = S + i;

end

fprintf(‘\n La somma dei primi %i…

inizio

M

S 0

i 1fprintf(‘\n La somma dei primi %i…

numeri naturali risulta %i \n’,…

M,S); V Fi ≤ M

S S+i

i i+1

S

fine

Page 4: Calcolo Numerico - Esercizi 1

Media Media aritmeticaaritmetica didi M M numerinumeri realireali (1)(1)

M = input(‘Inserire il numero di …

valori reali di cui fare la media: ’);

S = 0;

i = 1;

while i <= M

x = input(‘Inserire valore: ’);

S = S + x;

inizio

M

S 0

i 1S = S + x;

i = i + 1;

end

fprintf(‘\n La media dei %i numeri…

reali inseriti risulta %e \n’,…

M,S/M);

V Fi ≤ M

x

S S+x

S

fine

i i+1

Page 5: Calcolo Numerico - Esercizi 1

Media Media aritmeticaaritmetica didi M M numerinumeri realireali (2)(2)

M = input(‘Inserire il numero di …

valori reali di cui fare la media: ’);

S = 0;

for i = 1 : M

x = input(‘Inserire valore: ’);

S = S + x;

end

inizio

M

S 0

i 1end

fprintf(‘\n La media dei %i numeri…

reali inseriti risulta %e \n’,…

M,S/M);

V Fi ≤ M

x

S S+x

S

fine

i i+1

Page 6: Calcolo Numerico - Esercizi 1

FattorialeFattoriale didi un un numeronumero naturalenaturale (1)(1)

N = input(‘Inserire il numero naturale…

di cui fare il fattoriale: ’);

P = 1;

while N > 1

P = P * N;

N = N - 1;

end V F

inizio

N

P 1

N > 1end

fprintf(‘\n Il fattoriale del numero…

inserito risulta %e \n’, P);

V FN > 1

P P*N P

fineN N-1

Page 7: Calcolo Numerico - Esercizi 1

FattorialeFattoriale didi un un numeronumero naturalenaturale (2)(2)

N = input(‘Inserire il numero naturale…

di cui fare il fattoriale: ’);

P = 1;

for i = 2 : N

P = P * i;

end

fprintf(‘\n Il fattoriale del numero… V F

inizio

N

P 1

N > 1fprintf(‘\n Il fattoriale del numero…

inserito risulta %e \n’, P);

V FN > 1

P P*N P

fineN N-1

Page 8: Calcolo Numerico - Esercizi 1

Massimo e Massimo e minimominimo didi tretre numerinumeri

a = input(‘Primo numero: ’);

b = input(‘Secondo numero: ’);

c = input(‘Terzo numero: ’);

M = a;

if b > M

M = b;

end

if c > M

M = c;

V

inizio

a,b,c

M a

b > M

M b

V

F

m a

b < m

m b

M = c;

end

m = a;

if b < m

m = b;

end

if c < m

m = c;

end

fprintf(‘\n Valore massimo: %e \n’, M);

fprintf(‘\n Valore minimo: %e \n’, m);

M,m

fine

FM b

F

c > M

M c

F

c < m

m c

V

V

Page 9: Calcolo Numerico - Esercizi 1

OrdinamentoOrdinamento didi tretre numerinumeri

a = input(‘Primo numero: ’);

b = input(‘Secondo numero: ’);

c = input(‘Terzo numero: ’);

if a > b

v = a;

a = b;

b = v;

end

if a > c

V

F

inizio

a,b,c

a > b

v a

a b

b v

V

F

a > c

v c

c a

a v

V b > cif a > c

v = c;

c = a;

a = v;

end

if b > c

v = c;

c = b;

b = v;

end

fprintf(‘\n Valori ordinati: %e %e %e\n’,a,b,c);

M,m

fine

b vV

F

b > c

v c

c b

b v

Page 10: Calcolo Numerico - Esercizi 1

Massimo e Massimo e minimominimo didi un un vettorevettore (1)(1)

x = input(' fornire un vettore ');

n = length(x);

valmax = x(1);

valmin = x(1);

cont = 2;

while cont <= n

if x(cont) > valmax

valmax = x(cont);valmax = x(cont);

end

if x(cont) < valmin

valmin = x(cont);

end

cont = cont + 1;

end

fprintf('\n massimo del vettore = %e \n',valmax);

fprintf('\n minimo del vettore = %e \n',valmin);

Page 11: Calcolo Numerico - Esercizi 1

Massimo e Massimo e minimominimo didi un un vettorevettore (2)(2)

x = input(' fornire un vettore ');

n = length(x);

valmax = x(1);

valmin = x(1);

for cont = 2 : n

if x(cont) > valmax

valmax = x(cont);

endend

if x(cont) < valmin

valmin = x(cont);

end

end

fprintf('\n massimo del vettore = %e \n',valmax);

fprintf('\n minimo del vettore = %e \n',valmin);

Page 12: Calcolo Numerico - Esercizi 1

OrdinamentoOrdinamento didi un un vettorevettore

x = input('Vettore da ordinare: ');

n = length(x);

for i = 1 : n - 1

pmin = i;

for j = i + 1 : n

if x(j) < x(pmin)

pmin = j;

endend

end

if pmin > i

v = x(i);

x(i) = x(pmin);

x(pmin) = v;

end

end

disp('Vettore ordinato: ')

disp(x)

Page 13: Calcolo Numerico - Esercizi 1

Kernel Kernel polinomialepolinomialeScrivere una funzione per costruire una matrice quadrata G i cuielementi sono definiti dalla relazione

(*) njiAAGm

k

kjkiji ,...,1, ,1

3

1

,,, =

+⋅= ∑

=

dove Ai,k, (i = 1,…,n, k = 1,…,m) denota l’elemento di posto (i,k) diuna matrice n x m A. La matrice A deve essere parametro diingresso del sottoprogramma e la matrice G deve essereparametro di uscita.ingresso del sottoprogramma e la matrice G deve essereparametro di uscita.

Scrivere una macro che:- legga da file una matrice A di dimensione n x m;- utilizzi la funzione costruita in precedenza per calcolare lamatrice n x n G con elementi definiti da (*);- calcoli il numero di righe di G che soddisfano la condizione

∑≠=

>n

ijj

jiii GG1

,,

Page 14: Calcolo Numerico - Esercizi 1

Kernel Kernel polinomialepolinomiale (1.1)(1.1)

function G = kernelpol(A)

[n,m] = size(A);

for i = 1 : n

for j = i : n

s = 0;

for k = 1 : m for k = 1 : m

s = s + A(i,k)*A(j,k);

end

G(i,j)=(s+1)^3;

end

for j = 1 : i-1

G(i,j) = G(j,i);

end

end

Page 15: Calcolo Numerico - Esercizi 1

Kernel Kernel polinomialepolinomiale (1.2)(1.2)

function G = kernelpol_mat(A)

G = (A*A'+1).^3;

‘.^’ esegue l’operazione di elevamento a potenza su ogni componente della matricesommare uno scalare a una

matrice equivale a sommare matrice equivale a sommare lo scalare ad ogni elemento della matrice stessa

Vale anche per le operazioni ‘*’ e ‘/’

Esempio:

=

43

21A

==

2215

107*2^ AAA

==

169

41*.2.^ AAA

Page 16: Calcolo Numerico - Esercizi 1

Kernel Kernel polinomialepolinomiale (2.1)(2.1)

load matrice

G = kernelpol(A);

[n,m] = size(A);

cont1 = 0;

for i = 1 : n

s = 0;s = 0;

for j = 1 : n

if (j ~= i)

s = s + abs(G(i,j));

end

end

if (abs(G(i,i)) > s)

cont1 = cont1 + 1;

end

end

fprintf(‘Numero di righe che soddisfano la condizione: %i...

\n \n’, cont1);

Page 17: Calcolo Numerico - Esercizi 1

Kernel Kernel polinomialepolinomiale (2.2)(2.2)

load matrice

G = kernelpol_mat(A);

cont1 = length(find(diag(abs(G)) > sum(abs(G-diag(diag(G)))’)’));

fprintf(‘Numero di righe che soddisfano la condizione: %i \n \n’,

cont1); cont1);

diag(matrice) restituisce un vettore contenente gli elementi sulla diagonale della matrice

diag(vettore) restituisce una matrice quadrata con gli elementi del vettore sulla diagonale e tutti gli elementi non diagonali nulli

sum(matrice) restituisce un vettore riga in cui l’i-esima componente coincide con la somma degli elementi della i-esima colonna della matrice

find(expr) valuta l’espressione ‘expr’ avente al proprio interno un array e ritorna le componenti dell’ array in cuiexpr è verificata

Page 18: Calcolo Numerico - Esercizi 1

Kernel Kernel gaussianogaussianoScrivere una funzione per costruire una matrice quadrata G i cuielementi sono definiti dalla relazione

(*)( )

njiσ

AA

G

m

kkjki

ji ,...,1, ,2

exp2

1

2

,,

, =

∑ −

−= =

dove Ai,k, (i = 1,…,n, k = 1,…,m) denota l’elemento di posto (i,k) diuna matrice n x m A. La matrice A e il valore σ devono essereuna matrice n x m A. La matrice A e il valore σ devono essereparametri di ingresso del sottoprogramma e la matrice G deveessere parametro di uscita.

Scrivere una macro che:- definisca la matrice A = hilb(500) (matrice di Hilbert di ordine500) e la variabile sigma = 1;- utilizzi la funzione costruita in precedenza per calcolare lamatrice n x n G con elementi definiti da (*);- calcoli la norma ∞ della matrice G, definita come ∑

==

n

j

jini

G1

,,...,1

max

Page 19: Calcolo Numerico - Esercizi 1

Kernel Kernel gaussianogaussiano (1.1)(1.1)

function G = kernelgauss(A,sigma)

[n,m] = size(A);

for i = 1 : n

for j = 1 : n

s = 0;

for k = 1 : m for k = 1 : m

s = s + (A(i,k)-A(j,k))^2;

end

G(i,j) = exp(-s/(2*sigma^2));

end

end

Page 20: Calcolo Numerico - Esercizi 1

Kernel Kernel gaussianogaussiano (1.2)(1.2)

function G = kernelgauss_mat(A,sigma)

n = size(A,1);

for i = 1 : n

for j = i+1 : n

G(i,j) = exp(-(norm(A(i,:)- A(j,:))^2)/(2*sigma));

end

norm(vettore,n) calcola la norma n di un vettore (la norma di default è quella euclidea (n=2))

end

end

G = triu(G) + triu(G,1)‘ + eye(n);

la matrice G è simmetrica e ha ogni elemento diagonale uguale a 1

1. costruisco la parte strettamente triangolare superiore di G2. la ribalto nella parte strettamente triangolare inferiore3. metto 1 sulla diagonale

1. 2. 3.

Page 21: Calcolo Numerico - Esercizi 1

Kernel Kernel gaussianogaussiano (2.1)(2.1)

A = hilb(500);

sigma = 1;

G = kernelgauss(A,sigma);

n = size(A,1);

norma_inf = 0;

for i = 1 : nfor i = 1 : n

s = 0;

for j = 1 : n

s = s + abs(G(i,j));

end

if (s > norma_inf)

norma_inf = s;

end

end

fprintf('\n Norma infinito della matrice: %e \n \n',norma_inf);

Page 22: Calcolo Numerico - Esercizi 1

Kernel Kernel gaussianogaussiano (2.2)(2.2)

A = hilb(500);

sigma = 1;

G = kernelgauss_mat(A,sigma);

fprintf('\n Norma infinito della matrice: %e \n \n',...

norm(A,inf););

norm(matrice,n) calcola la norma n di una matrice (la norma di default è la norma 2). Le possibili opzioni per n sono 1, 2, inf e ‘fro’

Page 23: Calcolo Numerico - Esercizi 1

MetodoMetodo didi DoolittleDoolittleScrivere un sottoprogramma per calcolare la decomposizione LU diuna matrice n x n B, dove L è una matrice n x n triangolareinferiore con elementi diagonali uguali a 1 e U è una matrice n x ntriangolare superiore, con il metodo di Doolittle: per i = 1,2,…,n,

( )

=

++=−=

+=−=

∑−

=

=

1

,...,2,1

,...,1,

1

1

1

1

ii

i

k kijkjiji

i

k kjikijij

L

niijUULBL

niijULBU

=1iiL

Deve essere inoltre verificata l’applicabilità del metodo.

Scrivere un programma che:- legga una matrice n x n A e un vettore n x 1 b;- utilizzi la funzione costruita in precedenza per calcolare lematrici L e U tali che A = L*U;- calcoli la soluzione del sistema Ax = b risolvendo i due sistemitriangolari Ly = b e Ux = y (usare il sottoprogramma sist_tria);- scriva la soluzione del sistema Ax = b.

Page 24: Calcolo Numerico - Esercizi 1

MetodoMetodo didi Doolittle (2)Doolittle (2)

function x = sist_tria(T,b,info)

%

% risoluzione sistema triangolare inferiore (info==0)

% o triangolare superiore (info==1)

%

n=length(T);

x = zeros(n,1);

if info == 0

x(1) = b(1)/T(1,1); x(1) = b(1)/T(1,1);

for i = 2 : n

x(i) = ( b(i) - T(i,1:i-1) * x(1:i-1) ) / T(i,i);

end

end

if info == 1

x(n) = b(n)/T(n,n);

for i = n-1 : -1 : 1

x(i) = ( b(i) - T(i,i+1:n) * x(i+1:n) ) / T(i,i);

end

end