Trazar flujos de campos vectoriales

Trazar flujos de campos vectoriales

Tengo el campo vectorial ${x^2+2*x*y,y^2+2*x*y}y me gustaría trazar 'corrientes'. quiverfrom pgfplotsproduce flechas (que normalizo) pero creo que las secuencias harían las cosas más fáciles de entender. Aquí hay uno StreamPlotque crea Mathematica.

Trazado de campo vectorial en Mathematica

ingrese la descripción de la imagen aquí

Me gustaría poder hacer algo como esto para pgfplotspoder mantener la coherencia del estilo. Quizás si pudiera extraer los puntos que producen las curvas, entonces podría trazarse con pgfplots.

Respuesta1

Usé esto:https://mathematica.stackexchange.com/questions/19859/plot-extract-data-to-a-fileinicialmente. El primer elemento de la trama dynamicalStreamera una cadena vacía más un objeto.GraphicsComplex. Extraje los puntos de la trama con points = dynamicalStream[[1]][[2]][[1]]. Puede que sea diferente para otra persona. Los Lineobjetos de este GraphicsComplexobjeto fueron extraídos (y pido disculpas por la forma en que lo hice, probablemente haya mejores métodos)

lines = dynamicalStream[[1]][[2]][[2]][[2]][[3]][[2 ;; Length[ dynamicalStream[[1]][[2]][[2]][[2]][[3]]]] ].

Yo diría que es poco probable que esto sea útil, así que o buscas un método más general o haces lo que yo hice, que es encontrar manualmente la parte correcta de la lista para extraerla.

Luego creé una lista donde cada elemento es en sí mismo una lista de puntos para cada línea. Esto se hizo con pointstable = Table[points[[#[[1]][[i]]]], {i, 1, Length[#[[1]]]}] & /@ lines. La lista interna se creó revisando cada elemento del Lineobjeto (esta es la posición de un punto en la pointslista) y extrayendo el punto correcto. De esta forma se hace una lista de puntos correspondientes al Line. Luego, esto se asigna a cada Lineobjeto linespara que la lista final tenga la forma descrita.

Luego guardé cada lista en un archivo de texto separado: Export["line" <> IntegerString[#2] <> ".txt", #,"Table"] &~MapIndexed~pointstable como se describe en el enlace.

Tracé con:

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{decorations.markings}
\tikzset{->-/.style={decoration={
  markings,
  mark=at position #1 with {\arrow{>}}},postaction={decorate}}}
  \tikzset{-<-/.style={decoration={
  markings,
  mark=at position #1 with {\arrow{<}}},postaction={decorate}}}

\begin{document}
    \begin{tikzpicture}[scale=1.5]
        \begin{axis}[axis lines=none]
            \foreach \i in {1,2,3,4,...,107}{
                \addplot[black,->-=0.5] table[]{line\i.txt};
            }
        \end{axis}
    \end{tikzpicture}
\end{document}

El resultado

Después de mirar ese enlace correctamente, una forma más sencilla de hacerlo sería:

points  = Cases[dynamicalStream, GraphicsComplex[data__] :> data, -3, 1][[1]]
lines = Cases[dynamicalStream, Line[data__] :> data, -3];
pointstable = Table[points[[#[[i]]]], {i, 1, Length[#]}] & /@ lines

información relacionada