Sei sulla pagina 1di 4

SISTEMI LINEARI

METODI DIRETTI

Per risolvere sistemi lineari si possono utilizzare le function matlab: \ (mldivide) ed lu

>> help mldivide >> help lu

Generare una matrice di interi A, tridiagonale random non singolare di ordine dodici ed i vettori di interi x random con dodici componenti e b = Ax.

>> n=12;r=fix(randn(n,1)*10); >> a=-diag(r)+diag(r(1:n-1),-1)+diag(r(2:n),+1),det(a) >> x=round(randn(n,1)*5),b=a*x

risolvere il sistema lineare Ax = b utilizzando le function matlab \ ed lu

>> x1=a\b >> [l,u,p]=lu(a) >> y=l\(p*b) >> x2=u\y

Generare una matrice A, tridiagonale random non singolare di ordine dodici, ed i vettori x, random con dodici componenti, e b = Ax, risolvere il sistema lineare Ax = b utilizzando le function matlab \ ed lu.

>> clear,clc >> n=10;r=fix(randn(n,1)*5); >> a=diag(r)-diag(r(2:n),-1)-diag(r(1:n-1),+1),det(a) >> x=round(randn(n,1)*10),b=a*x >> x1=a\b >> err1=abs(x-x1) >> [l,u,p]=lu(a) >> y=l\(p*b) >> x2=u\y >> err2=abs(x-x2)

SISTEMI MALCONDIZIONATI

>> clear,clc >> a=[1000 999;999 998];b=[1999 1997]';x=a\b >> b1=[1999 1996.99]';x1=a\b1 >> a2=a;a2(1,1)=1000.01; x2=a2\b >> cond(a)

>> clear,clc >> a=[4.1 1 2.8;1 10 1;9.7 1 6.6]; cond(a) >> b=[7.9 12 17.3]';x=a\b1 >> b1=[7.91 12 17.3]';x1=a\b1,err1=max(abs(x-x1)) >> b2=[7.9 12.01 17.3]';x2=a\b2,err2=max(abs(x-x2)) >> b3=[7.9 12 17.31]';x3=a\b3,err3=max(abs(x-x3)) >> cond(a)

>> clear,clc >> a=[1 1e-6 -1; -1 2 -1; -2 0 2]; >> x= [-1 1 0]'; b=a*x,y=a\[-1 3 2]' >> x= [-1 0 1]'; b=a*x,y=a\[-2 0 4]'

SISTEMI CON MATRICI SPARSE

>> clear,clc >> a=diag(ones(100,1)); >> for k=1:10;n=fix(rand(1)*100);m=fix(rand(1)*100);

h=round(randn(1)*100);a(n,m)=h;end

>> b=sparse(a); >> whos

>> subplot(1,2,1) >> spy(a) >> subplot(1,2,2) >> spy(b)

Sfruttando la fattorizzazione LU risolvere i seguenti sistemi lineari (output in format rat):

3

4

2

+

x

2

x

2

x

2

2

x

1

+

x

5

4

x

1

x

1

x

1

+

+

1

+

4

2

x

x

2

2

x

3

4

x

4

4

x

3

x

x

3

2

+

2

5

4

=

2

+

5

+

+

x

4

2

x

=

5

x

4

+

x

5

3

7

x

4

x

=

5

4

=

x

=

3

5

17

11

2

7

3

4

2

+

x

1

+

x

2

2

x x

5

4

x x

1 2

+

2

2

+

x

3

4

x

4

4

x

3

5

+

x x

1 2

x x

1 2

4

+

1 2

+

2

+

2

x

x

3

4

5

=

+

x

4

2

x

=

5

x

4

+

x

5

3

7

4

x

4

x

=

5

=

x

=

3

5

3

3

1

2

>> format rat >> a=[3 -1 2 -5 2;4 2 4 1 1;-5 2 -4 -3 -3;-4 2 0 4 -7; 2 4 0 0 –2];b=[-11 -2 7 17 4]'; >> [l,u,p]=lu(a);b=p*b,y=l\b >> x=u\y

Per il secondo sistema

>> b=[-1 -3 2 -3 -4]'; >> [l,u,p]=lu(a);b=p*b,y=l\b >> x=u\y

1

e

1

2

1

7

1

1

e

1

1

7

Assegnata

la

matrice

A

=

prodotto della matrice A per il vettore x =

sistema

1



e

1

2

1

7

1

1

e

1

1

7

1

1

0

1

2

0

1

1

 

x




x


x





 x



1

2

3

4

2

0

0

0

=

[

1

1

0

1

1

2

0

1

1

1

determinare

il

vettore

b

1

1]' , risolvere infine il

Dai risultati ottenuti si può dedurre che il sistema è malcondizionato? Confrontare il risultato con quanto ottenuto dalla function cond del matlab.

>> a=[1e-7 1 1 2;1 1e-7 -1 0;2 1 0 1;1 -1 -1 1] >> x=[-1 1 -1 1]' >> a\[2 0 0 0]'

Utilizzare la fattorizzazione LU per ottenere una approssimazione della soluzione

Ax = b, dove A è la matrice generata dalla function matlab

hilb(6); costruire il vettore dei termini noti b

vettore avente le prime tre componenti uguali ad uno e le altre tre uguali a meno uno. Confrontare la soluzione ottenuta e la soluzione ricavata utilizzando il metodo

di eliminazione di Gauss fornendo gli errori commessi utilizzando i due metodi calcolati in norma infinito. Stabilire il numero minimo di cifre ritenute corrette. Porre l’elemento a(5,5)=.1111, calcolare nuovamente le soluzioni del sistema e gli errori calcolati in norma infinito. Commentare i risultati in termini di condizionamento della matrice A. Confrontare il risultato con quanto ottenuto dalla function cond del matlab.

supponendo che la soluzione sia il

del sistema lineare:

Utilizzare la fattorizzazione LU per ottenere una approssimazione della soluzione

Ax = b, dove A è la matrice di ordine dodici generata dalla

function matlab gallery opzione 'frank'; costruire il vettore dei termini noti b supponendo che la soluzione sia il vettore avente le prime sei componenti uguali a meno uno e le altre sei uguali ad uno. Confrontare la soluzione ottenuta e la soluzione ricavata utilizzando il metodo di eliminazione di Gauss fornendo gli errori commessi utilizzando i due metodi calcolati in norma infinito. Porre l’elemento a(1,1)=11.99999, calcolare nuovamente le soluzioni del sistema e gli errori calcolati in norma infinito. Commentare i risultati in termini di condizionamento della matrice A. Confrontare il risultato con quanto ottenuto dalla function cond del matlab.

del sistema lineare: