Archive for the ‘MatLab’ Category

[MatLab] Metodo di Jacobi

Monday, November 23rd, 2009

Descrizione L’algoritmo in questione risolve un sistema a matrice dei coefficienti quadrata non singolare tramite il metodo di Jacobi. Codice function [x, delta] = jacobi(n, A, b, toll, kmax, x) delta=1; if(det(A)==0) return else z=x; for k=1:kmax y=z(1,1); som=0; for i=2:n som=som+A(1,i)*x(1,i); end z(1,1)=(b(1,1)-som)/A(1,1) ermax=abs(y-z(1,1)); for i=2:n y=z(1,i); som=0; for j=1:(i-1) som=som+A(i,j)*x(1,j); end som1=0; for j=(i+1):n som1=som1+A(i,j)*x(1,j); end z(1,i)=(b(i,1)-som-som1)/A(i,i) er=abs(y-z(1,i)); if ermax<er ermax=er; end end x=z; if ermax<toll*norm(z,inf) delta=0; return end end end

[MatLab] Metodo di Gauss-Seidel

Monday, November 9th, 2009

Descrizione L'algoritmo in questione risolve un sistema a matrice dei coefficienti quadrata non singolare tramite il metodo di Gauss-Seidel. Codice function [x, delta] = GaussSeidel(n, A, b, toll, kmax, x) delta=1; if(det(A)==0) return else for k=1:kmax y=x(1,1); som=0; for i=2:n som=som+A(1,i)*x(1,i); end x(1,1)=(b(1,1)-som)/A(1,1) ermax=abs(y-x(1,1)); for i=2:n y=x(1,i); som=0; for j=1:(i-1) som=som+A(i,j)*x(1,j); end som1=0; for j=(i+1):n som1=som1+A(i,j)*x(1,j); end x(1,i)=(b(i,1)-som-som1)/A(i,i) er=abs(y-x(1,i)); if ermax<er ermax=er; end end if ermax<toll*norm(x,inf) delta=0; return end end end

[MatLab] Fattoriale

Monday, November 2nd, 2009

Descrizione Funzione la quale dato un intero strettamente positivo restituisce il suo fattoriale, altrimenti restituisce il valore 1. Codice function y = fattoriale(x) y=1; if x > 0 y= x*fattoriale(x-1); end;

[MatLab] Rapporto incrementale

Monday, October 19th, 2009

Descrizione Funzione per il calcolo del rapporto incrementale di una data funzione relativo ad un dato incremento in un determinato punto. Codice function [fprimo] = derivata(f,x0,toll) x=x0+toll; a=feval(inline(f),x); b=feval(inline(f),x0); fprimo=(a-b)/toll;

[MatLab] Algoritmo di bisezione

Monday, October 12th, 2009

Descrizione Function che utilizza l'algoritmo di bisezione per calcolare un'approssimazione (in base ad una data tolleranza relativa) di uno "zero" di una funzione in un dato intervallo. Codice function [x, delta]=bisezione(a0,b0,f,toll) x=0; delta = 0; fa=feval(inline(f),a0); fb=feval(inline(f),b0); if fa*fb>0 disp('La funzione deve soddisfare f(a)f(b)<0!') delta=1; end m=0; while (abs(b0-a0)>2*toll*abs(m) & delta==0), % toll è la tolleranza relativa m=(a0+b0)/2; fc=feval(inline(f),m); if fb*fc<0 a0=m; elseif fc==0 break else b0=m; end end x=m;