Programmi
         MATLAB


Luca Zanni, Marco Prato

             Calcolo Numerico
Corsi di Laurea in Matematica e Informa...
Somma di M numeri reali (1)
                                                     inizio
M = input(‘Inserire il numero di …...
Somma di M numeri reali (2)
                                                    inizio
M = input(‘Inserire il numero di …
...
Media aritmetica di M numeri reali (1)
                                                       inizio
M = input(‘Inserire i...
Media aritmetica di M numeri reali (2)
                                                          inizio
M = input(‘Inserir...
Fattoriale di un numero naturale (1)
                                                    inizio
N = input(‘Inserire il num...
Fattoriale di un numero naturale (2)
                                                    inizio
N = input(‘Inserire il num...
Massimo e minimo di tre numeri
a = input(‘Primo numero: ’);           inizio
b = input(‘Secondo numero: ’);
c = input(‘Ter...
Ordinamento di tre numeri
                                                         V
                                     ...
Massimo e minimo di un vettore (1)
x = input(' fornire un vettore     ');
n = length(x);
valmax = x(1);
valmin = x(1);
con...
Massimo e minimo di un vettore (2)
x = input(' fornire un vettore     ');
n = length(x);
valmax = x(1);
valmin = x(1);
for...
Ordinamento di un vettore
x = input('Vettore da ordinare: ');
n = length(x);
for i = 1 : n - 1
     pmin = i;
     for j =...
Kernel polinomiale
Scrivere una funzione per costruire una matrice quadrata G i cui
elementi sono definiti dalla relazione...
Kernel polinomiale (1.1)
function G = kernelpol(A)

[n,m] = size(A);

for i = 1 : n
     for j = i : n
         s = 0;
   ...
Kernel polinomiale (1.2)
function G = kernelpol_mat(A)

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


                                 ‘.^’ esegue l’...
Kernel polinomiale (2.1)
load matrice

G = kernelpol(A);

[n,m] =   size(A);
cont1 =   0;
for i =   1:n
    s=    0;
    f...
Kernel polinomiale (2.2)
load matrice

G = kernelpol_mat(A);

cont1 = length(find(diag(abs(G)) > sum(abs(G-diag(diag(G)))’...
Kernel gaussiano
Scrivere una funzione per costruire una matrice quadrata G i cui
elementi sono definiti dalla relazione
 ...
Kernel gaussiano (1.1)
function G = kernelgauss(A,sigma)

[n,m] = size(A);

for i = 1 :    n
    for j =    1:n
        s=...
Kernel gaussiano (1.2)
function G = kernelgauss_mat(A,sigma)

                                      norm(vettore,n) calcol...
Kernel gaussiano (2.1)
A = hilb(500);
sigma = 1;

G = kernelgauss(A,sigma);

n = size(A,1);
norma_inf = 0;
for i = 1 : n
 ...
Kernel gaussiano (2.2)
A = hilb(500);
sigma = 1;

G = kernelgauss_mat(A,sigma);

fprintf('n Norma infinito della matrice: ...
Metodo di Doolittle
Scrivere un sottoprogramma per calcolare la decomposizione LU di
una matrice n x n B, dove L è una mat...
Metodo di Doolittle (2)
function x = sist_tria(T,b,info)
%
% risoluzione sistema triangolare inferiore (info==0)
% o trian...
Upcoming SlideShare
Loading in …5
×

Calcolo Numerico - Esercizi 1

2,474 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,474
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
27
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Calcolo Numerico - Esercizi 1

  1. 1. Programmi MATLAB Luca Zanni, Marco Prato Calcolo Numerico Corsi di Laurea in Matematica e Informatica
  2. 2. Somma di M numeri reali (1) inizio M = input(‘Inserire il numero di … M numeri naturali da sommare: ’); S = 0; i = 1; S 0 while i <= M S = S + i; i 1 i = i + 1; end fprintf(‘n La somma dei primi %i… V F i≤M numeri naturali risulta %i n’,… M,S); S S+i S i i+1 fine
  3. 3. Somma di M numeri reali (2) inizio M = input(‘Inserire il numero di … M numeri naturali da sommare: ’); S = 0; for i = 1 : M S 0 S = S + i; end i 1 fprintf(‘n La somma dei primi %i… numeri naturali risulta %i n’,… M,S); V F i≤M S S+i S i i+1 fine
  4. 4. Media aritmetica di M numeri reali (1) inizio M = input(‘Inserire il numero di … M valori reali di cui fare la media: ’); S = 0; i = 1; S 0 while i <= M x = input(‘Inserire valore: ’); i 1 S = S + x; i = i + 1; end V F i≤M fprintf(‘n La media dei %i numeri… reali inseriti risulta %e n’,… x S M,S/M); S S+x fine i i+1
  5. 5. Media aritmetica di M numeri reali (2) inizio M = input(‘Inserire il numero di … M valori reali di cui fare la media: ’); S = 0; for i = 1 : M S 0 x = input(‘Inserire valore: ’); S = S + x; i 1 end fprintf(‘n La media dei %i numeri… reali inseriti risulta %e n’,… V F i≤M M,S/M); x S S S+x fine i i+1
  6. 6. Fattoriale di un numero naturale (1) inizio N = input(‘Inserire il numero naturale… N di cui fare il fattoriale: ’); P = 1; while N > 1 P 1 P = P * N; N = N - 1; V F end N>1 fprintf(‘n Il fattoriale del numero… P P*N inserito risulta %e n’, P); P N N-1 fine
  7. 7. Fattoriale di un numero naturale (2) inizio N = input(‘Inserire il numero naturale… N di cui fare il fattoriale: ’); P = 1; for i = 2 : N P 1 P = P * i; end V F fprintf(‘n Il fattoriale del numero… N>1 inserito risulta %e n’, P); P P*N P N N-1 fine
  8. 8. Massimo e minimo di tre numeri a = input(‘Primo numero: ’); inizio b = input(‘Secondo numero: ’); c = input(‘Terzo numero: ’); a,b,c m a M = a; if b > M Ma V b<m M = b; end m b V F b>M if c > M M = c; Mb F end V c<m m = a; m c if b < m V F c>M m = b; Mc end F if c < m M,m m = c; end fine fprintf(‘n Valore massimo: %e n’, M); fprintf(‘n Valore minimo: %e n’, m);
  9. 9. Ordinamento di tre numeri V inizio a = input(‘Primo numero: ’); a>c b = input(‘Secondo numero: ’); v c a,b,c F c = input(‘Terzo numero: ’); if a > b V a>b c a v = a; va a = b; a v F b = v; ab end V b>c if a > c bv v = c; v c F c = a; a = v; c b end b v if b > c v = c; c = b; M,m b = v; end fine fprintf(‘n Valori ordinati: %e %e %en’,a,b,c);
  10. 10. Massimo e minimo di un vettore (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); 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);
  11. 11. Massimo e minimo di un vettore (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); end 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);
  12. 12. Ordinamento di un vettore 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; end end if pmin > i v = x(i); x(i) = x(pmin); x(pmin) = v; end end disp('Vettore ordinato: ') disp(x)
  13. 13. Kernel polinomiale Scrivere una funzione per costruire una matrice quadrata G i cui elementi sono definiti dalla relazione 3   m Gi , j =  ∑ Ai ,k ⋅ A j ,k + 1 , (*) i, j = 1,..., n  k =1  dove Ai,k, (i = 1,…,n, k = 1,…,m) denota l’elemento di posto (i,k) di una matrice n x m A. La matrice A deve essere parametro di ingresso del sottoprogramma e la matrice G deve essere parametro 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 la matrice n x n G con elementi definiti da (*); - calcoli il numero di righe di G che soddisfano la condizione n Gi ,i > ∑ Gi , j j =1 j ≠i
  14. 14. Kernel polinomiale (1.1) function G = kernelpol(A) [n,m] = size(A); for i = 1 : n for j = i : n s = 0; 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
  15. 15. Kernel polinomiale (1.2) function G = kernelpol_mat(A) G = (A*A'+1).^3; ‘.^’ esegue l’operazione di elevamento a potenza su ogni sommare uno scalare a una componente della matrice matrice equivale a sommare lo scalare ad ogni elemento della matrice stessa  7 10  A^ 2 = A * A = 15 22   Vale anche per le operazioni ‘*’ e ‘/’   1 2 1 4  Esempio: A =  3 4 A.^ 2 = A. * A =  9 16       
  16. 16. Kernel polinomiale (2.1) load matrice G = kernelpol(A); [n,m] = size(A); cont1 = 0; for i = 1:n 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);
  17. 17. Kernel polinomiale (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); diag(matrice) restituisce un sum(matrice) restituisce un vettore contenente gli vettore riga in cui l’i-esima elementi sulla diagonale della componente coincide con la matrice somma degli elementi della i-esima colonna della matrice diag(vettore) restituisce una find(expr) valuta l’espressione ‘expr’ matrice quadrata con gli elementi avente al proprio interno un array e del vettore sulla diagonale e tutti ritorna le componenti dell’ array in cui gli elementi non diagonali nulli expr è verificata
  18. 18. Kernel gaussiano Scrivere una funzione per costruire una matrice quadrata G i cui elementi sono definiti dalla relazione  ∑ (A − A )2  m   i ,k j ,k (*) Gi , j = exp − , i, j = 1,..., n k =1 2   2σ   dove Ai,k, (i = 1,…,n, k = 1,…,m) denota l’elemento di posto (i,k) di una matrice n x m A. La matrice A e il valore σ devono essere parametri di ingresso del sottoprogramma e la matrice G deve essere parametro di uscita. Scrivere una macro che: - definisca la matrice A = hilb(500) (matrice di Hilbert di ordine 500) e la variabile sigma = 1; - utilizzi la funzione costruita in precedenza per calcolare la matrice n x n G con elementi definiti da (*); n ∑ - calcoli la norma ∞ della matrice G, definita come max Gi , j i =1,...,n j =1
  19. 19. Kernel gaussiano (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 s = s + (A(i,k)-A(j,k))^2; end G(i,j) = exp(-s/(2*sigma^2)); end end
  20. 20. Kernel gaussiano (1.2) function G = kernelgauss_mat(A,sigma) norm(vettore,n) calcola la norma n n = size(A,1); di un vettore (la norma di default è quella euclidea (n=2)) for i = 1 : n for j = i+1 : n G(i,j) = exp(-(norm(A(i,:)- A(j,:))^2)/(2*sigma)); end end G = triu(G) + triu(G,1)‘ + eye(n); 1. 2. 3. 1. costruisco la parte strettamente la matrice G è simmetrica e triangolare superiore di G ha ogni elemento diagonale 2. la ribalto nella parte strettamente uguale a 1 triangolare inferiore 3. metto 1 sulla diagonale
  21. 21. Kernel gaussiano (2.1) A = hilb(500); sigma = 1; G = kernelgauss(A,sigma); n = size(A,1); norma_inf = 0; for 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);
  22. 22. Kernel gaussiano (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’
  23. 23. Metodo di Doolittle Scrivere un sottoprogramma per calcolare la decomposizione LU di una matrice n x n B, dove L è una matrice n x n triangolare inferiore con elementi diagonali uguali a 1 e U è una matrice n x n triangolare superiore, con il metodo di Doolittle: per i = 1,2,…,n, U ij = Bij − ∑i −1 LikU kj j = i, i + 1,..., n  k =1  ( )  L ji = B ji − ∑k =1 L jkU ki U ii i −1 j = i + 1, i + 2,..., n   Lii = 1  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 le matrici L e U tali che A = L*U; - calcoli la soluzione del sistema Ax = b risolvendo i due sistemi triangolari Ly = b e Ux = y (usare il sottoprogramma sist_tria); - scriva la soluzione del sistema Ax = b.
  24. 24. Metodo di 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); 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

×