Fixato bugs su gauss, aggiunto check per numeri molto vicini a 0 su gauss, aggiunto esercizi
This commit is contained in:
44
exercises/metodi_diretti_ex3_10.m
Normal file
44
exercises/metodi_diretti_ex3_10.m
Normal file
@@ -0,0 +1,44 @@
|
||||
U=[1.2,2.1,4.5;1.1,1.4,2.7;0.11,0.7,1.8]
|
||||
b=[7.8;5.2;2.61]
|
||||
|
||||
exact=[1,1,1];
|
||||
|
||||
%verifica singoalarita
|
||||
if det(U) ~= 0
|
||||
disp('non singolare')
|
||||
else
|
||||
disp('singolare')
|
||||
end
|
||||
|
||||
|
||||
% 3 equazioni, 3 incognite
|
||||
if det(U) ~= 0
|
||||
disp('ammette singola soluzione')
|
||||
else
|
||||
disp('nessuna o infinite soluzioni')
|
||||
end
|
||||
|
||||
%verifica condizionamento
|
||||
condition= cond(U)
|
||||
|
||||
|
||||
|
||||
%applico gauss naif
|
||||
[x1,y1]=convert_matrix_to_triangular_matrix_gauss_naif(U,b)
|
||||
s1=[linear_system_resolver_triangular_matrix(x1,y1)]
|
||||
|
||||
|
||||
%applico gauss parziale
|
||||
[x2,y2]=convert_matrix_to_triangular_matrix_gauss_pivoting(U,b)
|
||||
s2=[linear_system_resolver_triangular_matrix(x2,y2)]
|
||||
|
||||
|
||||
|
||||
% verifico errore tra soluzione calcolata e esatta
|
||||
error_s1= norm(s1-exact,inf)/norm(exact,inf)
|
||||
error_s2= norm(s2-exact,inf)/norm(exact,inf)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
38
exercises/metodi_diretti_ex3_5.m
Normal file
38
exercises/metodi_diretti_ex3_5.m
Normal file
@@ -0,0 +1,38 @@
|
||||
U=[2,5,4;0,0,10;8,2,20]
|
||||
b=[11;10;30]
|
||||
|
||||
exact=[1,1,1];
|
||||
|
||||
%verifica singoalarita
|
||||
if det(U) ~= 0
|
||||
disp('non singolare')
|
||||
else
|
||||
disp('singolare')
|
||||
end
|
||||
|
||||
|
||||
|
||||
if det(U) ~= 0
|
||||
disp('ammette singola soluzione')
|
||||
else
|
||||
disp('nessuna o infinite soluzioni')
|
||||
end
|
||||
|
||||
%verifica condizionamento
|
||||
cond(U)
|
||||
|
||||
|
||||
%applico gauss naif
|
||||
convert_matrix_to_triangular_matrix_gauss_naif(U,b)
|
||||
|
||||
|
||||
%applico gauss parziale
|
||||
[x,y]=convert_matrix_to_triangular_matrix_gauss_pivoting(U,b)
|
||||
x1=[linear_system_resolver_triangular_matrix(x,y)]
|
||||
|
||||
% verifico errore tra x calcolata e esatta
|
||||
|
||||
norm(x1-exact,inf)/norm(exact,inf)
|
||||
|
||||
|
||||
|
||||
37
exercises/metodi_diretti_ex3_7.m
Normal file
37
exercises/metodi_diretti_ex3_7.m
Normal file
@@ -0,0 +1,37 @@
|
||||
U=[3,0.1,2;0.3,4,-1;3.3,4.1,1]
|
||||
b=[5.1;3.3;8.4]
|
||||
|
||||
|
||||
|
||||
%verifica singoalarita
|
||||
if det(U) ~= 0
|
||||
disp('non singolare')
|
||||
else
|
||||
disp('singolare')
|
||||
end
|
||||
|
||||
|
||||
|
||||
if det(U) ~= 0
|
||||
disp('ammette singola soluzione')
|
||||
else
|
||||
disp('nessuna o infinite soluzioni')
|
||||
end
|
||||
|
||||
%verifica condizionamento
|
||||
condition= cond(U)
|
||||
|
||||
|
||||
%applico gauss naif
|
||||
%[x1,y1]=convert_matrix_to_triangular_matrix_gauss_naif(U,b)
|
||||
%s1=[linear_system_resolver_triangular_matrix(x1,y1)]
|
||||
|
||||
|
||||
%applico gauss parziale
|
||||
[x2,y2]=convert_matrix_to_triangular_matrix_gauss_pivoting(U,b)
|
||||
s2=[linear_system_resolver_triangular_matrix(x2,y2)]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
17
exercises/metodi_diretti_ex3_8.m
Normal file
17
exercises/metodi_diretti_ex3_8.m
Normal file
@@ -0,0 +1,17 @@
|
||||
U=[3,0.1,0.2;0.3,4,-0.1;3.3,4.1,0.1]
|
||||
b=[3.3;4.3;7.5]
|
||||
|
||||
|
||||
%verifica singolarita
|
||||
if det(U) ~= 0
|
||||
disp('non singolare')
|
||||
else
|
||||
disp('singolare')
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
38
exercises/metodi_diretti_test.m
Normal file
38
exercises/metodi_diretti_test.m
Normal file
@@ -0,0 +1,38 @@
|
||||
U=[1e-15,5,4;3,2,10;8,2,20]
|
||||
b=[11;10;30]
|
||||
|
||||
exact=[1,1,1];
|
||||
|
||||
%verifica singoalarita
|
||||
if det(U) ~= 0
|
||||
disp('non singolare')
|
||||
else
|
||||
disp('singolare')
|
||||
end
|
||||
|
||||
|
||||
|
||||
if det(U) ~= 0
|
||||
disp('ammette singola soluzione')
|
||||
else
|
||||
disp('nessuna o infinite soluzioni')
|
||||
end
|
||||
|
||||
%verifica condizionamento
|
||||
cond(U)
|
||||
|
||||
|
||||
%applico gauss naif
|
||||
convert_matrix_to_triangular_matrix_gauss_naif(U,b)
|
||||
|
||||
|
||||
%applico gauss parziale
|
||||
[x,y]=convert_matrix_to_triangular_matrix_gauss_pivoting(U,b)
|
||||
x1=[linear_system_resolver_triangular_matrix(x,y)]
|
||||
|
||||
% verifico errore tra x calcolata e esatta
|
||||
|
||||
norm(x1-exact,inf)/norm(exact,inf)
|
||||
|
||||
|
||||
|
||||
@@ -10,25 +10,18 @@ function [U,b] = convert_matrix_to_triangular_matrix_gauss_naif (U,b)
|
||||
|
||||
|
||||
n= length(b); % lunghezza del vettore dei termini noti o numero equazioni
|
||||
norma = norm(U,inf);
|
||||
U= [U,b]; % uniamo la matrice con la colonna dei termini noti
|
||||
|
||||
|
||||
ok=1;
|
||||
%check 0 sulla diagonale
|
||||
for i=1:n
|
||||
if U(i,i) == 0
|
||||
ok=0;
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if ok == 0
|
||||
disp('impossibile convertire')
|
||||
b=[];
|
||||
U=[];
|
||||
else
|
||||
% convertiamo la matrice in una triangolare superiore
|
||||
for i=1:1:n-1
|
||||
|
||||
if abs(U(i,i)) <= eps * norma
|
||||
disp('WARNING: Elemento prossimo allo zero sulla diagonale')
|
||||
end
|
||||
|
||||
if U(i,i) == 0
|
||||
ok=0;
|
||||
break
|
||||
@@ -47,10 +40,11 @@ function [U,b] = convert_matrix_to_triangular_matrix_gauss_naif (U,b)
|
||||
b=[];
|
||||
U=[];
|
||||
else
|
||||
|
||||
if abs(U(n,n)) <= eps * norma
|
||||
disp('WARNING: Elemento prossimo allo zero sulla diagonale')
|
||||
end
|
||||
b=U(:,n+1);
|
||||
U=U(:,1:n);
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -10,6 +10,7 @@ function [U,b,pivot] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b)
|
||||
|
||||
|
||||
n= length(b); % lunghezza del vettore dei termini noti o numero equazioni
|
||||
norma = norm(U,inf);
|
||||
U= [U,b]; % uniamo la matrice con la colonna dei termini noti
|
||||
pivot = 1:1:n;
|
||||
pivot = pivot';
|
||||
@@ -17,9 +18,15 @@ function [U,b,pivot] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b)
|
||||
% convertiamo la matrice in una triangolare superiore
|
||||
for i=1:1:n-1
|
||||
x_max = max ( abs(U(i:n,i)) );
|
||||
|
||||
if x_max <= eps * norma
|
||||
disp('WARNING: Elemento prossimo allo zero sulla diagonale')
|
||||
end
|
||||
|
||||
if x_max == 0
|
||||
break
|
||||
else
|
||||
|
||||
%trovo gli indici di tutti i numeri uguali a max
|
||||
[x,y]= ind2sub(size(U), find (abs(U(i:n,i)) == x_max) );
|
||||
x=x(1);%prendo solo il primo indice
|
||||
@@ -51,6 +58,9 @@ function [U,b,pivot] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b)
|
||||
U=[];
|
||||
pivot = [];
|
||||
else
|
||||
if abs(U(n,n)) <= eps * norma
|
||||
disp('WARNING: Elemento prossimo allo zero sulla diagonale')
|
||||
end
|
||||
b=U(:,n+1);
|
||||
U=U(:,1:n);
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user