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 x1 − x2 + 2 x3 − 5 x4 + 2 x5 = −11 3 x1 − x2 + 2 x3 − 5 x4 + 2 x5 = −1
 
 4 x1 + 2 x2 + 4 x3 + x4 + x5 = −2  4 x1 + 2 x2 + 4 x3 + x4 + x5 = −3
 
 −5 x1 + 2 x2 − 4 x3 − 3 x4 − 3x5 = 7  −5 x1 + 2 x2 − 4 x3 − 3 x4 − 3x5 = 2
 −4 x + 2 x + 4 x − 7 x = 17  −4 x + 2 x + 4 x − 7 x = −3
 1 2 4 5  1 2 4 5
 2 x1 + 4 x2 − 2 x5 = 4  2 x1 + 4 x2 − 2 x5 = −4

>> 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

1e − 7 1 1 2
 1 1e − 7 −1 0 
Assegnata la matrice A =  determinare il vettore b
 2 1 0 1
 
 1 −1 −1 1
prodotto della matrice A per il vettore x = [ −1 1 −1 1] ' , risolvere infine il
1e − 7 1 1 2   x1   2 
 1 1e − 7 −1 0   x2   0 
sistema  =
 2 1 0 1   x3   0 
    
 1 −1 −1 1   x4   0 

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
del sistema lineare: Ax = b, dove A è la matrice generata dalla function matlab
hilb(6); costruire il vettore dei termini noti b supponendo che la soluzione sia il
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.

Utilizzare la fattorizzazione LU per ottenere una approssimazione della soluzione


del sistema lineare: 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.