domingo, 16 de marzo de 2008

Graficando funciones discontinuas con Mathematica

Mientras estaba tratando de ilustrar el comportamiento de las funciones racionales elípticas dentro de la Tesis, me encontré con uno de los problemas del comando Plot[] del Mathematica. Este comando, al ir conectando puntos donde evalúa a la función, termina dibujando una línea en donde debería haber una discontinuidad. Por ejemplo, si uno ejecuta el comando Plot[1/(x-1),{x,-3,3}] obtiene el siguiente resultado:












Puede verse claramente que hay una línea vertical en x = 1.

Después de encontrar en la Web varias opciones que no me resultaban satisfactorias, tales como actualizar a la versión 6 o dividir el gráfico en segmentos con dominios donde la función es continua (estaba trabajando con una función con 4 polos), decidí acotar el valor de la función y reemplazar los valores superiores con valores indeterminados.

Esta solución aplicada al problema de mostrar correctamente al gráfico anterior quedaría como:

f[x_]:=1/(x-1);
fp[x_]:=Module[{},
ret=f[x];
If[Abs[ret]>30,Indeterminate,ret]];
Off[Plot::plnr];
Plot[fp[x],{x,-3,3}];
On[Plot::plnr];












Los comandos Off[] y On[] desactivan y activan respectivamente la emisión del error Plot::plnr, producido por la función Plot[] al encontrarse con valores no numéricos.

En otros temas, más allá de las funciones elípticas, dos interesantes fotos de objetos de oro sólido (particularmente apropiados con el oro a más de $100000 el kg :-)
  1. Una pepita de oro de más de 4 kg.
  2. Un ladrillo de 220 kg de oro (más de $22000000 en la actualidad).
Una cosa a destacar es que 220 kg de oro solo tienen un volumen de 11.4 litros, ya que el oro es uno de los elementos más densos (si, más que el plomo). O sea que podríamos meter $22000000 en un cubo de 23 cm de arista... aunque sería algo difícil de levantar.

2 comentarios:

Mariano M. Chouza dijo...

Error corregido en la segunda aparición de "$22000000".

Laura Dilcab dijo...

Mariano, gracias por publicar esta ayuda para graficar las discontinuas.

Aquí, te copio otro intento para graficar. Podrías decirme cómo hago para desactivar el primer gráfico que me aparece?

Saludos! Laura.

f[x_] := 1/(x - 1);
fp[x_] := Module[{},
ret = f[x];
If[Abs[ret] > 30, Indeterminate, ret]];
Off[Plot::plnr];
xmin := -3;
xmax := 3;
grafica = Plot[fp[x], {x, xmin, xmax},
PlotStyle -> {{Thickness[0.01], Hue[.71]}}];
Off[Plot::plnr];

Clear[x];
Clear[y];
Show[grafica,
AspectRatio -> Automatic,
GridLines -> Automatic,
Axes -> Automatic,
AxesLabel -> {x, y},
AxesOrigin -> Automatic,
AxesStyle -> Automatic,
PlotRange -> {{xmin, xmax}, {-6, 4}}]
On[Plot::plnr];