vuoi
o PayPal
tutte le volte che vuoi
Parametri: - x è il valore a cui si vuole calcolare epsilon. È un parametro di ingresso.
- e è il valore restituito dalla funzione, cioè l’epsilon macchina o l’epsilon relativo a x.
È un parametro di uscita.
Descrizione: se viene inserito il parametro di ingresso(x) la funzione calcolerà l’epsilon macchina,
altrimenti calcolerà l’epsilon relativo a x.
Indicatori di errore: Too many input arguments= avviene se si inseriscono più parametri di
ingresso.(Questo indicatore di errore è definito dal Matlab)
Formato non corretto di x. Inserirlo come numero reale = indica che è stato
inserito un carattere
Esempio d’uso: >> x=4
>> e=epsilon(x)
e = 8.881784197001252e-016
Situazioni di errore: >> epsilon(3,5)
??? Error using ==> epsilon
Too many input arguments.
>> epsilon('a')
??? Error using ==> epsilon
Formato non corretto di x. Inserirlo come numero reale
Test dei casi funzionanti: come già detto, la funzione può essere utilizzata per due diversi motivi.
Per calcolare l’epsilon macchina: >> e=epsilon
e = 2.220446049250313e-016
O per calcolare l’epsilon relativo a x: >> x=4
>> e=epsilon(x)
e = 8.881784197001252e-016
Confronto con Matlab: con la funzione EPSILON si ha che l’epsilon macchina è
2.220446049250313e-016 con la funzione EPS del Matlab si ha che
l’epsilon macchina è 2.220446049250313e-016.
M-FILE:
function e=epsilon(x)
% EPSILON funzione che calcola l'epsilon macchina o l'epsilon relativo a x.
% parametri di ingresso:
% x=valore a cui si vuole calcolare epsilon
% parametri di uscita:
% e=epsilon macchina o epsilon relativo a x
% note:
% se non c'è input la funzione calcolerà l'epsilon macchina
% esempio d'uso:
% 1) >> e=epsilon
% e = 2.220446049250313e-016
%
% 2) >> x=4
% >> e=epsilon(x)
% e = 8.881784197001252e-016
if (nargin==0) %controlla se c'è input
e=1;
while(1+e~=1)
e=e/2;
end
e=2*e;
else %se c'è input calcola l'epsilon relativo a x
if (ischar(x)==1) %Controlla se x è un numero reale
error('Formato non corretto di x. Inserirlo come numero reale');
end
e=eps*abs(x);
end
Scopo: la funzione restituisce il più piccolo numero floating point rappresentabile per l'aritmetica
del computer sul quale è eseguita.
Specifica: l’intestazione della funzione è m=minr.
Parametri: come si nota dall’intestazione la funzione non prevede parametri di ingresso. Invece
come parametro d’uscita c’è m, che è il più piccolo numero floating point
rappresentabile per l'aritmetica del computer sul quale è eseguita(minr).
Descrizione: come già spiegato, la funzione calcola minr ma si deve tener conto che il risultato
differisce dalla funzione matlab di epsilon macchina(eps): minr/realmin=eps.
Indicatori di errore: Too many input arguments = indica che sono stati inseriti parametri di
ingresso. (Questo indicatore di errore è definito dal Matlab)
Esempio d’uso: >> m=minr
m = 4.940656458412465e-324
Situazioni di errore: >> minr(5)
??? Error using ==> minr
Too many input arguments.
Test dei casi funzionanti: >> m=minr
m = 4.940656458412465e-324
Confronto con Matlab: Prendendo in considerazione l’esempio precedente:
>> m=minr
m = 4.940656458412465e-324
si ha che il risultato differisce dalla funzione matlab epsilon
macchina(eps): minr/realmin=eps.
>> minr/realmin
ans = 2.220446049250313e-016
che è proprio il valore dell’epsilon macchina(eps), quindi si verifica che il
risultato di minr è corretto
M-FILE:
function m=minr
% MINR funzione che restituisce il più piccolo numero floating point
% rappresentabile per l'aritmetica del computer sul quale è eseguita.
% parametri di ingresso: nessuno
% parametri di uscita: m=valore di minr
% note: il risultato differisce dalla funzione matlab di epsilon macchina(eps):
% minr/realmin=eps
% esempio d'uso: >> m=minr
% m = 4.940656458412465e-324
x=1;
while (x~=0)
m=x;
x=x/2;
end x x
Scopo: la funzione calcola e , nel caso in cui x è negativo calcolerà 1/e . In più restituisce un altro
x
valore, il numero delle somme effettuate dall’algoritmo nel calcolo di e
Specifica: l’intestazione della funzione è [y,n]=espo(x,tol)
Parametri di ingresso: - x è valore dell'esponente. È di tipo reale.
- tol è la tolleranza, numero di cifre esatte richieste.
Che in realtà tol=10^-k (k=cifre esatte richieste), ma ciò è calcolato
già dalla funzione. È di tipo intero positivo.
Parametri di uscita: - y è il risultato della funzione e^x oppure di 1/e^x.È di tipo reale positivo.
- n è il numero delle somme effettuate dall'algoritmo usando la serie di
Taylor. È di tipo intero positivo.
- err indicatore di errore che visualizza dei messaggi di errore specifico.
- tol accuratezza richiesta dall’utente (parametro omesso all’uscita perché
inserito già in ingresso).
x
Descrizione: la funzione calcola e data una certa tolleranza. Se essa non viene inserita, la funzione
x
calcola e con la massima precisione(tol=epsilon macchina). Inoltre se x=0 il risultato
sarà e=1.
Indicatori di errore: - Too many input arguments = indica che sono stati inseriti più parametri di
ingresso da quelli consentiti. (Questo indicatore di errore è definito dal
Matlab)
- Too many output arguments = indica che sono stati inseriti più parametri di
uscita da quelli consentiti. (Questo indicatore di errore è definito dal
Matlab)
- Attenzione nessun input specificato = cioè non sono stati inseriti parametri
di ingresso.
- Formato non corretto di x. Inserirlo come numero reale = compare quando
si da a x il valore di un carattere o di una parola.
- Formato non esatto. Inserire uno scalare = visualizza questo errore se in x
vi è un vettore.
- Formato non corretto di tol. Inserirlo come numero naturale = indica che
tol è stato inserito in modo errato(es.: negativo, carattere)
- Attenzione! Situazione di overflow = si verifica se il risultato è in overflow
- Attenzione! Situazione di underflow = si verifica se il ris. è in underflow
Esempio d’uso: 1)esempio con tolleranza
>>[y,n]=espo(59,12)
y = 4.201210403483852e+025
n = 115
2)esempio senza tolleranza cioè a precisione massima
>> [y,n]=espo(32)
y = 7.896296018268023e+013
n = 85
Situazioni di errore: 1) >> [y,n]=espo(3,7,6)
??? Error using ==> espo
Too many input arguments.
2) >> [y,n,m]=espo(3,7)
??? Error using ==> espo
Too many output arguments.
3) >> [y,n]=espo
??? Error using ==> espo
Attenzione nessun input specificato
4) >> [y,n]=espo('a',10)
??? Error using ==> espo
Formato non corretto di x. Inserirlo come numero reale
5) >> [y,n]=espo([2 3 4; 5 6 7],10)
??? Error using ==> espo
Formato non esatto. Inserire uno scalare
6) >> [y,n]=espo(10,'a')
??? Error using ==> espo
Formato non corretto di tol. Inserirlo come numero naturale
7) >> [y,n]=espo(10,-10)
??? Error using ==> espo
Formato non corretto di tol. Inserirlo come numero naturale
8) >> [y,n]=espo(730,13)
??? Error using ==> espo
Attenzione! Situazione di overflow
9) >> [y,n]=espo(-730,13)
??? Error using ==> espo
Attenzione! Situazione di underflow
x
Test dei casi funzionanti: 1) >> [y,n]=espo(32,13) (e con tolleranza>epsilon macchina)
y = 7.896296018230850e+013
n = 78 x
2) >> [y,n]=espo(-32,14) (1/e con tolleranza>epsilon macchina)
y = 1.266416554909790e-014
n = 81
3) >> [y,n]=espo(32) (senza tolleranza)
la funzione è stata calcolata con la massima precisione
y = 7.896296018268023e+013
n = 85
4) >> [y,n]=espo(0) (con x=0)
y = 1
n = 1
5) >> [y,n]=espo(4,18) (con tolleranza<epsilon macchina)
y = 54.59815003314422
n = 29
6) >> [y,n]=espo(10^-309) (quando x è più piccolo di realmin viene
y = 1 approssimato ad esso per non causare
n = 1 underflow, ma poi è talmente
piccolo . perciò è come se fosse 0 e
quindi e=1)
Confronto con Matlab:
Funzioni per il ESPO EXP di Matlab
x (senza tolleranza)
calcolo di e
X=1 2.71828182845905 2.71828182845905
X=5 1.484131591025765e+002 1.484131591025766e+002
X=30 1.068647458152442e+013 1.068647458152446e+013
x=100 2.688117141816041e+043 2.688117141816136e+043
x=350 1.007090887027834e+152 1.007090887028080e+152
x=710 overflow (inf.) infinito
x=-710 underflow (0) 4.476286225675130e-309
Come si può notare dalla tabella, con l’aumentare di x le cifre esatte della ESPO diminuiscono
rispetto alla funzione del Matlab. Inoltre la funzione ESPO nel caso x=-710 da underflow mentre la
funzione EXP da un determinato valore perchè quest’ultima gestisce i subnormal number.
M-FILE:
function [y,n]=espo(x,tol)
% ESPO calcola l'esponenziale di x, nel caso in cui x è
% negativo la funzione calcolerà 1/e^x.
% parametri di ingresso:
% x=valore dell'esponente
% tol=tolleranza, numero di cifre esatte richieste.
% In realtà tol=10^-k (k=cifre esatte richieste)
% ma ciò è calcolato già dalla funzione
% parametri di uscita:
% y=risultato della funzione e^x oppure di 1/e^x
% n=numero delle somme effettuate dall'algoritmo usando
% la serie di Taylor
% esempio d'uso: tenendo conto di [y,n]=espo(x,tol) si può avere:
% 1)l'esponenziale con tolleranza
% >>[y,n]=espo(59,12)
% y = 4.201210403483852e+025
% n = 115
% 2)l'esponenziale con la massima precisione
% >> [y,n]=espo(32)
% y = 7.896296018268023e+013
% n = 85
format long;
if (nargin==0) %Visualizza un errore se non c'è input
error('Attenzione nessun input specificato');
end
if (ischar(x)==1) %Controlla se x è un numero reale
error('Formato non corretto di x. Inserirlo come numero reale');
end
dim=prod(size(x));
if (dim~=1) %Visualizza un errore se non si inserisce uno scalare
error('Formato non esatto. Inserire uno scalare');
end
if (nargin==1)
disp('la funzione è stata calcolata con la massima precisione');
tol=eps;
else
if (ischar(tol)==1)|