Archive for the ‘MatLab’ Category
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
Posted in MatLab, Programmazione, Scripts | No Comments »
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
Posted in MatLab, Programmazione, Scripts | No Comments »
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;
Posted in MatLab, Programmazione, Scripts | No Comments »
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;
Posted in MatLab, Programmazione, Scripts | No Comments »
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;
Posted in MatLab, Programmazione, Scripts | No Comments »