1
2 LA FUNCION DE EULER
Metodo 1 (El mas facil y preciso, pero caradura). Consiste en usar el comando de MATLAB gamma:
>> p=linspace(0,1,100);
>> G=gamma(p);
>> plot(p,G)
>> axis([0 1 0 10]);
>> xlabel(p)
>> ylabel(G)
>> title(Funcion Gamma de Euler);
Metodo 2 (Ni facil, ni preciso). Escribimos la integral impropia (p) como la suma de dos integrales:
Z M Z +
(p) = xp1 ex dx + xp1 ex dx.
0 M
La segunda integral tiende a cero cuando M +. Efectivamente, pues si M 1, entonces
Z + Z +
x=+
xp1 ex dx ex dx = ex x=M = eM .
0
M M
Por tanto, fijada cualquier pequena tolerancia 0 < 1, podemos encontrar un valor M 1 de
forma que la segunda integral sea menor que . Concretamente, basta tomar M = log(). Despues
calculamos la primera integral usando el comando de MATLAB quadl con la misma tolerancia . Es
importante observar que aunque el intervalo [0, M ] es compacto, la funcion f (x) = xp1 ex tiene una
singularidad en x = 0, luego el metodo puede fallar.
>> epsilon = 1.e-5;
>> p=linspace(0,1,100);
>> G=Gamma_cutre(p,epsilon);
>> plot(p,G)
>> axis([0 1 0 10]);
>> xlabel(p)
>> ylabel(G)
>> title(Funcion Gamma de Euler);
El fichero Gamma cutre.m contiene las instrucciones para calcular (p):
function G=Gamma_cutre(p,epsilon)
M=-log(epsilon);
G=quadl(@(x) x.^(p-1).*exp(-x),0,M,epsilon);
Advertencia: Si escogemos una tolerancia demasiado pequena (por ejemplo, si p = 1/2 y = 1010 ),
la funcion Gamma cutre.m se queja debido a la singularidad que tiene f (x) = xp1 ex en x = 0.
Metodo 3 (Relativamente preciso, pero no facil). Escribimos que
1 + p x 1 M p x 1 + p x
Z Z Z
(p + 1)
(p) = = x e dx = x e dx + x e dx.
p p 0 p 0 p M
El nuevo integrando g(x) = xp ex ya no es singular en x = 0 (recordemos que p > 0) y la segunda
integral sigue tendiendo a cero cuando M +. Por tanto, fijada cualquier pequena tolerancia
0 < 1, podemos encontrar un valor M 1 de forma que la segunda integral sea menor que . Se
puede probar (ejercicio para el lector, no es facil) que el cero de la funcion
x
h(x) := 1 + xp1 ex
p
que esta cerca de la aproximacion inicial x0 := log() es un valor adecuado M .
As pues, crearemos un fichero Gamma mejor.m con las siguientes instrucciones para calcular (p):
function G=Gamma_mejor(p,epsilon)
M=fzero(@(x) (1+x/p).*x.^(p-1).*exp(-x)-epsilon,-log(epsilon));
G=quadl(@(x) x.^p.*exp(-x),0,M,epsilon)/p;
Dibujaremos la funcion gamma con las mismas instrucciones de los metodo anteriores, pero usando
la nueva funcion Gamma mejor.m, en vez del comando gamma o de la vieja funcion Gamma cutre.m.