Algoritmi calcolo numerico
A cura di PeX - quelli di informatica – informatici.altervista.org
Calcolo di min
function ris=minpex
x=1;
while (x>0)
ris=x; %il risultato va salvato perchè l'ultimo utile a non generare underflow.
Minpex/2 sarebbe=0
x=x/2;
end
Calcolo di epsilon macchina
function s=pexilon
s=1;
while(1+s~=1)
s=s/2;
end
s=2*s;
Calcolo esponenziale (versione pluridimensionale linearizzata)
function e=pexp(x,tol)
if (nargin==0)
error('Attenzione nessun imput specificato');
end
dim=prod(size(x));
for a=1:dim
if(x(a)==0)
e(a)=1
end
if (isreal(x(a)))
if (nargin==1)
e(a)=pexp(x(a),eps);
end
if (nargin==2)
Questi algoritmi (non esenti da errori) sono divulgati con il solo fine di fornire un valido spunto iniziale per una personale elaborazione degli algoritmi implementati. Non si autorizza la divulgazione. A cura di PeX - quelli di informatica – informatici.altervista.org
A cura di PeX - quelli di informatica – informatici.altervista.org
Verifica TOL underflow
if ((tol<0)|(tol>0))
if (abs(x(a))>realmin/tol)
tol=abs(x(a))*tol;
else
tol=realmin;
end
end
Verifica per valori di tol impossibili
tol=max(tol,eps);
Calcolo di e^x con tol
e(a)=1;
n=1;
temp=(abs(x(a)/n));
while (abs(temp)>=e(a)*tol)
e(a)=e(a)+temp;
n=n+1;
temp=temp*(abs(x(a))/n);
end
Verifica esponente negativo
if(x(a)<0)
e(a)=1/e(a);
end
end
else %else per x complesso
j=real(x(a));
k=imag(x(a));
if(nargin==1)
e(a)=pexp(j,eps)*(cos(k)+sin(k)*i);
else e(a)=pexp(j,tol)*(cos(k)+sin(k)*i);
end
end
end
Fattorizzazione LU con PIV virtuale
function [a,piv]=lufat(a)
Controllo errore per dimensioni nulle
if isempty(a)
error ('La matrice è vuota,nulla da calcolare')
end
if ndims(a)>2
Controllo errore per dimensioni superiori a 2
error ('La matrice immessa deve essere in 2 dimensioni')
end
if cond(a)>1e15
Controllo condizionamento
error('La matrice è sufficientememnte malcondizionata')