Sei sulla pagina 1di 14

Risoluzione di un sistema triangolare inferiore

a

i,i

a

a

a

1,1

2,1

3,1

.

.

.

a n1,1

a n,1

a

a

0

2,2

3,2

.

.

.

a n1,2

a n,2

= 0, i = 1,

0

0

a 3,3

a n1,3

a n,3

, n.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

0

0

0

a n1,n1

a n,n1

Sostituzione in avanti:

x 1 = b 1 /a 1,1

0

0

0

.

.

.

0

a n,n

x

1

x

2

x

.

.

.

x

3

n1

x

n

=

b

b

b

.

.

.

b

b

1

2

3

n1

n

For i = 2 : n i−1 x i = 1 j=1 a i,j x
For
i
= 2 : n
i−1
x i = 1
j=1 a i,j x j
a
i,i b i −

Risoluzione di un sistema triangolare superiore

a

i,i

a 1,1

0

0

.

.

.

0

0

a

a

1,2

2,2

0

.

.

.

0

0

= 0, i = 1,

1,3

2,3

a 3,3

a

a

0

0

, n.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

1,n1

2,n1

a 3,n1

a

a

a n1,n1

0

Sostituzione all’indietro

x n = b n /a n,n

1,n

2,n

a 3,n

.

.

.

a n1,n

a n,n

a

a

x

1

x

2

x

.

.

.

x

3

n1

x

n

Fori = n 1 : 1 : 1

x i = 1

a i,i b i

j=i+1 a i,j x j

n

=

b

b

b

.

.

.

b

b

1

2

3

n1

n

    =          b b

Esercizi

Scrivere una funzione di Matlab che implemeti il metodo della sostituzione in avanti.

Scrivere una funzione di Matlab che implemeti il metodo della sostituzione all’indietro.

della sostituzione in avanti. Scrivere una funzione di Matlab che implemeti il metodo della sostituzione all’indietro.

Risoluzione di sistemi lineari

Il comando \ (backslash) Se A `e una matrice n × n e b `e un vettore colonna di dimensione n

x=A \

b

calcola la soluzione del sistema lineare

Ax = b .

Non calcola l’inversa. Risolve il sistema lineare usando l’algoritmo pi`u efficiente, effetuando dei test preliminari sulla matrice: ad esempio, se A `e triangolare inferiore usa il metodo della sostituzione in avanti. Il comando inv. Calcola esplicitamente l’inversa della matrice A. Non `e conveninte usare questo comando per risolvere un sistema lineare perche `e pi`u costoso.

della matrice A . Non `e conveninte usare questo comando per risolvere un sistema lineare perche

Altri comandi per matrici (e vettori)

det(A) calcola il determinante della matrice A.

v=diag(A) se A `e una matrice calcola il vettore con la diagonale di A.

D=diag(v) se v calcola la matrice diagonale che ha nella diagonale i valori di v.

M=tril(A) restituisce la parte triangolare inferiore di A. (Provare anche tril(A,1) o tril(A,-2)).

M=triu(A) restituisce la parte triangolare superiore di A. Analogo a tril.

v=eig(A) calcola gli autovalori di A.

[M,v]=eig(A) calcola gli autovettori e gli autovalori di A.

Analogo a tril . v=eig(A) calcola gli autovalori di A . [M,v]=eig(A) calcola gli autovettori e

Matrici particolari

zeros(3,4),

zeros(2)

ones(2,5),

ones(3)

eye(4)

Osservazione:

[c 1 , c 2 , c 3 ]

d 1

d 2

d 3

  = c 1 d 1 + c 2 d 2 + c 3 d 3

c

c

1

2

c

3

[d 1 , d 2 , d 3 ] =

c 1 d 1 c 1 d 2 c 1 d 3 c 2 d 1 c 2 d 2 c 2 d 3 c 3 d 1 c 3 d 2 c 3 d 3

  c 1 d 1 c 1 d 2 c 1 d 3 c 2

Metodo di eliminazione di Gauss

Ax = b Ux = c

U matrice triangolare superiore.

for k=1:n-1

for i=k+1:n

(k)

i,k

m i,k = a

for j=k+1:n

/a

(k)

k,k

a

(k+1)

i,j

= a

(k)

i,j

m i,k a

end

b

(k+1)

i

= b

(k)

i

m i,k b

(k)

k

end

end

U = A (n) ,

(k)

k,j

c = b (n) .

k a end b ( k +1) i = b ( k ) i − m

Il comando lu

[L,U,P]=lu(A)

LU = P A

L triangolare inferiore con gli elementi diagonali uguali a 1.

U triangolare superiore.

P matrice di permutazioni.

[L,U]=lu(A)

LU = A

L non `e triangolare inferiore ma una permutazione di righe la rende triangolare inferiore con tutti gli elementi diagonali uguali a 1.

U triangolare superiore.

di righe la rende triangolare inferiore con tutti gli elementi diagonali uguali a 1. U triangolare

Il comando chol

R=chol(A) A deve essere simmetrica definita positiva R T R = A R triangolare superiore con tutti gli elementi diagonali positivi.

simmetrica definita positiva R T R = A R triangolare superiore con tutti gli elementi diagonali

Risoluzione di un sistema tridiagonale

a

b

1

1

c 1

a 2

b 2

c 2

a 3

.

.

.

c 3

.

.

.

b n2

.

a

b

.

.

n1

n1

c n1

a n

x

1

x

2

x

.

.

.

x

3

n1

x

n

=

f

1

f

2

f

.

.

.

f

3

n1

f

n

    =          f 1

Metodo di Thomas

a

b

1

1

1

β 1

 

=  

 

1

β 2

.

1

.

.

.

.

.

β n2

alpha(1)=a(1);

for

i=1:n-1

c 1

a 2

b 2

c 2

a 3

.

.

.

1

β n1

c 3

.

.

.

b n2

1

 

 

.

.

.

a

b

α 1

n1

n1

c

1

α 2

beta(i)=b(i)/alpha(i);

alpha(i+1)=a(i+1)-beta(i)*c(i);

end

c n1

a n

c 2

α 3


 

c 3

.

.

.

.

.

.

α n1

c n1

α n

3          c 3 . . . .

Sostituzione in avanti

1

β 1

Ax = f

1

β 2

.

1

.

.

y(1)=f(1);

for

i=2:n

A = LU

.

.

.

β n2

1

β n1

1

y(i)=f(i)-beta(i-1)*y(i-1);

end

Ly = f

y

1

y

2

y

3

.

.

.

y

n1

y

n

Ux = y

=

f

1

f

2

f

.

.

.

f

3

n1

f

n

    =          f 1

Sostituzione all’indietro

α 1

c 1

α 2

c 2

α 3

c 3

.

.

.

x(n)=y(n)/alpha(n);

for

i=n-1:-1:1

.

.

.

α n1

c n1

α

n

x

1

x

2

x

3

.

.

.

x

n1

x

n

=

y

y

y

1

2

3

.

.

.

y

y

n1

n

x(i)=(y(i)-c(i)*x(i+1))/alpha(i);

end

    y y y 1 2 3 . . . y y n

Esercizio

Scrivere una funzione di Matlab che implementi l’algoritmo di Thomas.

Esercizio Scrivere una funzione di Matlab che implementi l’algoritmo di Thomas.