Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
INTERPOLAZIONE
Interpol.mx = linspace(0,20,100);y = cos(x);p = polyfit(x,y,3);yp = polyval(p,x);plot(x,y,'x');hold on;plot(x,yp);
Interpolreale.mx = linspace(0,2,100);y = cos(x);p = polyfit(x,y,4);yp = polyval(p,x);plot(x,y,'x');hold on;plot(x,yp);
Interpolesatta.mx = linspace(0,20,10);y = cos(x);p = polyfit(x,y,9);xp = linspace(0,20,1000);yp = polyval(p,xp);plot(x,y,'x');hold on;plot(xp,yp);
TRAPEZI
TrapSimple.m
function It = TrapSimple(a,b,f) fa = f(a); fb = f(b); It = (b-a)*(fa+fb)/2; end
TrapComp.m
function It = TrapComp(a,b,n,f) h = (b-a)/n; x_sx = a; It = 0.0; for i = 1:n x_dx = x_sx + h; It_tmp = TrapSimple(x_sx,x_dx,f); It = It + It_tmp; x_sx = x_dx; end end
TrapComp_2.m
function It = TrapComp_2(a,b,n,f) x_i = linspace(a,b,n+1); f_i = f(x_i); h = (b-a)/n; It = h*(0.5*(f_i(1) + f_i(end)) + sum(f_i(2:end-1))); end
main.m
clear clc fun = @(x) sin(x); a = 0.0; b = pi/2; n = 10; Itsimple = TrapSimple(a,b,fun); fprintf('Integrale semplice = %e\n',Itsimple); Itcomp = ...
TrapComp(a,b,n,fun); fprintf('Integrale composto 1 = %e\n',Itcomp); Itcomp_2 = TrapComp_2(a,b,n,fun); fprintf('Integrale composto 2 = %e\n',Itcomp_2); Iv = -cos(b) + cos(a); fprintf('Integrale vero = %e\n',Iv); maintempo.mclearclcfun = @(x) sin(x); a = 0.0; b = pi/2; n = 10; Itsimple = TrapSimple(a,b,fun); fprintf('Integrale semplice = %e\n',Itsimple); tic; Itcomp = TrapComp(a,b,n,fun); toc fprintf('Integrale composto 1 = %e\n',Itcomp); tic; Itcomp_2 = TrapComp_2(a,b,n,fun); toc fprintf('Integrale composto 2 = %e\n',Itcomp_2); Iv = -cos(b) + cos(a); fprintf('Integrale vero = %e\n',Iv); mainerrore.mclearclcfun = @(x) sin(x); a = 0.0; b = pi/2; k = 10; n = 1; Iv = -cos(b) + cos(a); for i = 1:k Itcomp_2 = TrapComp_2(a,b,n,fun); Et = abs(Itcomp_2 - Iv); fprintf('n: %d It %15.6e Et %15.6e\n',n,Itcomp_2,Et); n = n*2; end mainerrorerapporto.mclearclcfun = @(x) sin(x); a = 0.0; b = pi/2; k = 10; Iv = -cos(b) + cos(a); n = 1; Et_old = 1.0; for i =
1:kItcomp_2 = TrapComp_2(a,b,n,fun);Et = abs(Itcomp_2 - Iv);fprintf('n: %d It %15.6e Et %15.6e ratio%10.2f\n',n,Itcomp_2,Et,Et_old/Et);n = n*2;Et_old = Et;end
CAVALIERI-SIMPSONmain.mclearclcfun = @(x) sin(x);a = 0.0;b = pi/2;k = 10;Iv = -cos(b) + cos(a);n = 1;Eq_old = 1.0;for i = 1:kQcomp = CavSimpComp(a,b,n,fun);Eq = abs(Qcomp - Iv);fprintf('n: %d It %15.6e Eq %15.6e ratio %10.2f\n',n,Qcomp,Eq,Eq_old/Eq);n = n*2;Eq_old = Eq;end
CavSimpComp.mfunction Iq = CavSimpComp(a,b,n,f)x_i = linspace(a,b,2*n+1);f_i = f(x_i);h = (b-a)/n;pari = 2:2:2*n;dispari = 3:2:2*n-1;Iq = (h/6)*((f_i(1) + f_i(end)) + 4*sum(f_i(pari)) + 2*sum(f_i(dispari)));end
ESTRAPOLAZIONE DI RICHARDSONmain.mclearclcfun = @(x) sin(x);a = 0.0;b = pi/2;k = 10;Iv = -cos(b) + cos(a);n = 1;Eq_old = 1.0;Qcomp_old = 1.0;for i = 1:kQcomp = CavSimpComp(a,b,n,fun);Ir = Qcomp - (Qcomp - Qcomp_old)/15;Eq = abs(Qcomp - Iv);fprintf('n: %d It %15.6e Ir %15.6e Et %15.6e
ratio%10.2f\n',n,Qcomp,Ir,Eq,Eq_old/Eq);n = n*2;Eq_old = Eq;Qcomp_old = Qcomp;end
CavSimpComp.m
function Iq = CavSimpComp(a,b,n,f)
x_i = linspace(a,b,2*n+1);
f_i = f(x_i);
h = (b-a)/n;
pari = 2:2:2*n;
dispari = 3:2:2*n-1;
Iq = (h/6)*((f_i(1) + f_i(end)) + 4*sum(f_i(pari)) + 2*sum(f_i(dispari)));
end
METODI DIRETTI ITERATIVI STAZIONARI – BACKFORWSOLVEmain.m
clear
clc
% 1° metodo di soluzione
A = [5 3 1;1 4 2;3 1 6];
b = [9; 7; 10];
x1 = A\b;
fprintf('Soluzione 1: \n');
fprintf('%10.2f\n',x1);
% 2° metodo di soluzione
[L,U] = lu(A);
% Risolvo Ly = b
y = L\b;
% Risolvo Ux = y
x2 = U\y;
fprintf('Soluzione 2: \n');
fprintf('%10.2f\n',x2);
% Calcolo soluzione con BackForwSolve fatta da mex
x3 = BackForwSolve(L,U,b);
fprintf('Soluzione 3: \n');
fprintf('%10.2f\n',x3);
BackForwSolve.m
function x = BackForwSolve(L,U,b)
n = size(L,1);
y = zeros(n,1);
x = zeros(n,1);
% Sostituzione avanti con L
for i = 1:n
som = 0.0;
for j = 1:i-1
som = som + L(i,j)*y(j);
end
y(i) = (b(i) - som)/L(i,i);
end
% Sostituzione indietro con U
for i = n:-1:1
som = 0.0;
for j = i+1:n
som = som + U(i,j)*x(j);
end
x(i) = (y(i) - som)/U(i,i);
end
end
L(i,j)*y(j); end y(i) = b(i) - som; end % Sostituzione indietro con U for i = n:-1:1 som = 0.0; for j = i+1:n som = som + U(i,j)*x(j); end x(i) = (y(i) - som)/U(i,i); end end JACOBI Jacobi.m clear clc A = [9 1 2;2 8 1;-1 1 6]; b = [12;11;6]; itmax = 100; toll = 1.e-5; x0 = zeros(3,1); n = size(A,1); % Inizio Jacobi iter = 0; scarto = 2 * toll; scarto_old = scarto; x_old = x0; x_new = zeros(n,1); while scarto > toll && iter < itmax iter = iter + 1; for i = 1:n som1 = 0; for j = 1:i-1 som1 = som1 + A(i,j) * x_old(j); end som2 = 0; for j = i+1:n som2 = som2 + A(i,j) * x_old(j); end x_new(i) = (b(i) - som1 - som2) / A(i,i); sc = x_new - x_old; scarto = norm(sc); end rad = scarto / scarto_old; x_old = x_new; scarto_old = scarto; fprintf('iter: %d | scarto %e | raggio %e\n',iter,scarto,rad); end Jacobi_2.m clear clc A = [9 1 2;2 8 1;-1 1 6]; b = [12;11;6]; itmax = 100; toll = 1.e-5; x0 = zeros(3,1); n = size(A,1); % Inizio Jacobi_2 iter = 0; scarto = 2 * toll; scarto_old = scarto; x_old = x0; x_new = zeros(n,1); % xkp1 = xk +```html
D^-1*rk = Ej*xk + q% con Ej = I - D^-1*A e q = D^-1*b
Ej = eye(n) - inv(diag(diag(A)))*A;
q = inv(diag(diag(A)))*b;
while scarto > toll && iter < itmax
iter = iter + 1;
x_new = Ej * x_old + q;
for i = 1:n
som1 = 0;
for j = 1:i-1
som1 = som1 + A(i,j)*x_old(j);
end
som2 = 0;
for j = i+1:n
som2 = som2 + A(i,j)*x_old(j);
end
x_new(i) = (b(i) - som1 - som2) / A(i,i);
sc = x_new - x_old;
scarto = norm(sc);
end
scarto = norm(x_new - x_old);
rad = scarto/scarto_old;
x_old = x_new;
scarto_old = scarto;
fprintf('iter: %d | scarto %e | raggio %e\n',iter,scarto,rad);
end
GAUSS-SEIDELSeidel.m
clear
clc
A = [9 1 2;2 8 1;-1 1 6];
b = [12;11;6];
itmax = 100;
toll = 1.e-5;
x0 = zeros(3,1);
n = size(A,1);
% Inizio Seidel
iter = 0;
scarto = 2 * toll;
scarto_old = scarto;
x_old = x0;
x_new = zeros(n,1);
while scarto > toll && iter < itmax
iter = iter + 1;
for i = 1:n
som1 = 0;
for j = 1:i-1
som1 = som1 + A(i,j)*xnew(j);
end
som2 = 0;
for j = i+1:n
som2 = som2 + A(i,j)*x_old(j);
end
x_new(i) = (b(i) - som1 - som2) / A(i,i);
sc = x_new - x_old;
scarto = norm(sc);
end
scarto = norm(x_new - x_old);
rad = scarto/scarto_old;
x_old = x_new;
scarto_old = scarto;
fprintf('iter: %d | scarto %e | raggio %e\n',iter,scarto,rad);
end
``` ```htmlA(i,i);sc = x_new - x_old;scarto = norm(sc);endrad = scarto/scarto_old;x_old = x_new;scarto_old = scarto;fprintf('iter: %d | scarto %e | raggio %e\n',iter,scarto,rad);end Seidel_2.m
clear
clc
A = [9 1 2;2 8 1;-1 1 6];
b = [12;11;6];
itmax = 100;
toll = 1.e-5;
x0 = zeros(3,1);
n = size(A,1);
% Inizio Seidel_2
iter = 0;
scarto = 2 * toll;
scarto_old = scarto;
x_old = x0;
x_new = zeros(n,1);
% xkp1 = xk + (L+D)^-1*rk = Es*xk + q
% con Es = I - (L+D)^-1*A e q = (L+D)^-1*b
Es = eye(n) - inv( tril(A) )*A;
q = inv( tril(A) )*b;
while scarto > toll && iter < itmax
iter = iter + 1;
xnew = Es*x_old + q;
scarto = norm(xnew - x_old);
rad = scarto/scarto_old;
x_old = x_new;
scarto_old = scarto;
fprintf('iter: %d | scarto %e | raggio %e\n',iter,scarto,rad);
end
ESERCIZI TEORICI
NORMA EUCLIDEA
NormaEuc.m
clear
clc
n = 10;
E = rand(n);
r = rand(n,1);
% Metodo 1
% s = (I + Et * E)*r = r + Et * v con v = E*r
v1 = E*r;
s1 = r + E'*v1;
norma_1 = norm(s1);
% Metodo 2
v2 = matvet(E,r);
s2 = r +
```matvet(E',v2); norma_2 = neuc(s2); fprintf('Ris 1: %e\n',norma_1); fprintf('Ris 2: %e\n',norma_2); matvet.m function y = matvet(A,x) [n,m] = size(A); y = zeros(n,1); for i = 1:n for j = 1:m y(i) = y(i) + A(i,j)*x(j); end end end neuc.m function alpha = neuc(x) n = size(x,1); alpha = 0; for i = 1:n alpha = alpha + x(i)^2; end alpha = sqrt(alpha); end NORMA ASSOLUTA DI UN VETTORE dati.txt 3 e3 n10 1 2 B 1 x -1 3 1 1 -1 2 2 1 1.e-4 toll 100 itmax main.m clear ifile = fopen('dati.txt','r'); l = fscanf(ifile,'%e',1); % Legge la potenza n = fscanf(ifile,'%e',1); % Legge la dimensione B = fscanf(ifile,'%e',[n,n]); % Legge la matrice B B = B'; x = fscanf(ifile,'%e',n); % Legge x for i = 1 : l z = matvet(B,x); x = z; end assoluta = normass(x); fprintf('Norma assoluta di x: %e\n',assoluta); matvet.m function v = matvet(A,x) nr = size(A,1); nc = size(A,2); for i = 1 : nr v(i,1) = 0.0; for j = 1 : nc v(i,1) = v(i,1) + A(i,j) * x(j,1); end end end```html
normass.m
function norma = normass(x)
n = size(x,1);
norma = 0;
for i = 1 : n
norma = norma + abs(x(i,1));
end
end
METODO DELLE POTENZE PER AUTOVALORE MAX
dati.txt
3
n
10
1
2
A
1
x0
-1
3
1
1
-1
2
2
1
1.e-4
toll
100
itmax
main.m
clear
ifile = fopen('dati.txt','r');
n = fscanf(ifile,'%e',1); % Legge la dim
A = fscanf(ifile,'%e',[n,n]); % Legge matr A
A = A';
z0 = fscanf(ifile,'%e',n); % Legge z0, toll, itmax
toll = fscanf(ifile,'%e',1);
itmax = fscanf(ifile,'%e',1);
iter = 0;
residuo = 2 * toll;
z_old = z0;
while residuo > toll && iter < itmax
iter = iter + 1;
% Tre passi delle potenze
y = matvet(A,z_old);
lambda = eucl(y);
z_new = y / lambda;
% Calcolo residuo
num = eucl(y - lambda * z_old);
den = eucl(z_old);
residuo = num / den;
% Passo all'iterazione successiva
z_old = z_new;
```