En un libro sobre matplotlib encontré una gráfica de 1/sin(x) que se parece a esta que hice:
usé el dominio
input = np.mgrid[0 : 1000 : 200j]Lo que me confunde aquí en extremo es el hecho de que la función seno es solo periódica. No entiendo por qué el valor absoluto máximo está disminuyendo. Trazar la misma función en wolframio-alfa no muestra este efecto decreciente. Usando una cantidad de paso diferente
input = np.mgrid[0 : 1000 : 300j]ofrece un resultado diferente:
donde también tenemos esta tendencia decreciente en valor absoluto máximo.
Entonces mis preguntas son:
El período de la función seno es bastante más alto que lo que se grafica, por lo que lo que está viendo es un alias de la diferencia en la frecuencia de muestreo y algún múltiplo de la frecuencia real. Dado que una de las raíces está en 0, la discrepancia más pequeña que existe entre las primeras muestras y un múltiplo de π se aleja linealmente de 0, produciendo una envolvente 1/ x .
En este ejemplo, input[5] es 5(1000/(200-1))=8π−0.007113, por lo que la función es aproximadamente −141 allí, como se muestra. input[10] es, por supuesto, 16π−0.014226, por lo que la función es aproximadamente −70, y así sucesivamente siempre que la discrepancia sea mucho menor que π.
Es posible que alguna de las secuencias de muestras cuasi-periódicas finalmente aterrice aún más cerca de n π, produciendo un patrón más complicado como el de la segunda gráfica.
Tenga en cuenta que, en realidad, en cada múltiplo de pi , la función tiende a infinito. Y el tamaño del salto que se muestra en realidad solo refleja el valor más grande de los valores muestreados donde la función aún tenía sentido. Por lo tanto, obtiene un gran salto si muestra un valor donde la función es grande pero no demasiado grande para ser un flotador.
Para poder trazar cualquier cosa matplotlib descarta valores que no tienen sentido. Como el np.nan que obtienes en múltiplos de pi y ±np.infs que obtienes para valores muy cercanos a eso. Creo que lo que sucede es que, a un paso de distancia de cero, obtienes un valor lo suficientemente pequeño como para no tirarlo, pero aún así es muy grande. Mientras que cuando llegas a pi y sus múltiplos, el valor más grande se desecha.
Obtiene un comportamiento extraño en torno a los valores en los que su función se vuelve demasiado grande. Simplemente elija un ylimit para evitar trazar esos valores locos y grandes.
import numpy as np import matplotlib.pyplot as plt from matplotlib.transforms import Bbox x = np.linspace(10**-10,50, 10**4) plt.plot(x,1/np.sin(x)) plt.ylim((-15,15))