2010-12-31 30 views
33

I representa al azar una [x] función Sin en Mathematica 7 y esto es lo que muestra:Strange Sin [x] gráfico en Mathematica

http://i.stack.imgur.com/hizGw.png

Nota el defecto visible en aproximadamente x = -100.

Aquí es un zoom de la parte defecto, mostrando claramente que Mathematica por alguna razón utiliza una resolución mucho más baja entre los puntos allí:

mesh

Alguien sabe por qué sucede esto y por qué sólo a x = -100?

Nota: lo mismo sucede en Wolfram Alpha, por cierto.

+0

Parece un simple aliasing para mí. ¿Realmente crees que Mathematica tendría un error en algo tan fundamental como esto? –

+0

No, es por eso que estaba tan sorprendido. Si fuera un aliasing, ¿no tendrían tendencia a aparecer más si el intervalo se hiciera más grande? Si cambio xmin, xmax por -60 Pi/60 Pi, por ejemplo, desaparece. – houbysoft

+1

@houbysoft No tengo Mathematica, de hecho no sé nada al respecto, pero sugiero que intente variar los valores de la opción PlotPoints –

Respuesta

60

Respuesta corta: default trazado de precisión no es suficiente para esa función, por lo que aumenta la siguiente manera

Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100] 

Respuesta larga: Plot obras de la evaluación de la función en un conjunto finito de puntos, y la conexión de los puntos de lineas rectas. Se puede ver los puntos utilizados por Plot con el siguiente comando

Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, PlotStyle -> None, 
MeshStyle -> Black] 

plot

Se puede ver que para su función, los puntos en los que se evaluó la función "se perdió el pico" e introdujeron un gran error de aproximación El algoritmo utilizado para elegir ubicaciones de puntos es muy simple y esta situación puede ocurrir cuando dos picos están espaciados más estrechamente que PlotRange/PlotPoints.

Plot comienza con 50 puntos igualmente espaciados y luego inserta puntos extra en hasta MaxRecursion etapas. Puede ver cómo aparece este "agujero" si traza la región para varias configuraciones de MaxRecursion.

plot1 = Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100, 
    PlotStyle -> LightGray]; 
Table[plot2 = 
    Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, MeshStyle -> Thick, 
    PlotStyle -> Red, MaxRecursion -> k]; 
    Show[plot1, plot2, PlotRange -> {{-110, -90}, {-1, 1}}, 
    PlotLabel -> ("MaxRecursion " <> ToString[k])], {k, 0, 
    5}] // GraphicsColumn 

plot

Según el libro Mathematica de Stan carro, Plot decide si desea añadir un punto intermedio adicional entre dos puntos consecutivos si el ángulo entre dos nuevos segmentos de línea sería más de 5 grados . En este caso, la trama no tuvo suerte con el posicionamiento inicial del punto y la subdivisión no cumple ese criterio. Puede ver que al insertar un único punto de evaluación en el centro del orificio se obtendrá un plano de aspecto casi idéntico.

La manera de aumentar el ángulo utilizado para decidir cuándo subdividir utilizando Refinement opción (Me lo dio el libro, pero no parece ser documentados en el producto)

plot1 = Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100, 
    PlotStyle -> LightGray]; 
Show[plot1, 
Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, MeshStyle -> Thick, 
    PlotStyle -> Red, MaxRecursion -> 3, 
    Method -> {Refinement -> {ControlValue -> 4 \[Degree]}}], 
PlotRange -> {{-110, -90}, {-1, 1}}] 

Aquí se puede ver que aumentarlo en 1 grado desde el valor predeterminado 5 soluciona el agujero.

plot

+0

Ah, la parte de actualización de su respuesta es exactamente lo que he estado buscando (sabía el resto, habiendo implementado una calculadora gráfica que lo hice yo mismo, pero no he incluido un mecanismo similar al MaxRecursion, que explica el imprecisión). – houbysoft