Я написал этот скрипт для создания функции, которая скользит вправо и всегда имеет две точки графика, обозначенные черными точками:
\documentclass[tikz]{standalone}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.16}
\pgfplotsset{ticks=none}
\begin{document}
\tikzset{declare function={bellshape(\x,\mu,\sigma)=exp(-(\x-\mu)^2/(2*\sigma^2));}}
\usetikzlibrary{intersections}
\foreach \center in {-5,-4.9,...,5}
{
\begin{tikzpicture}
\begin{axis}[scale=3,
width=4cm,
xmin=-3, xmax=3,
ymin=-.05, ymax=1.4,
axis line style={draw=none},
]
\addplot [only marks, samples at={-3,3}]
{bellshape(x,\center,.5)};
\addplot [domain=-5:5, samples=300,color=blue, name path=A]
{bellshape(x,\center,.5)};
\end{axis}
\end{tikzpicture}
}
\end{document}
Это именно то, что я имел в виду:
Но я также пытаюсь сделать что-то подобное для волнового пакета ниже.
\documentclass[tikz]{standalone}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.16}
\pgfplotsset{ticks=none}
\begin{document}
\tikzset{declare function={bellshape(\x,\mu,\sigma)=exp(-(\x-\mu)^2/(2*\sigma^2));}}
\usetikzlibrary{intersections}
\foreach \center in {-350,-320,...,350}
{
\begin{tikzpicture}
\begin{axis}[scale=3,
width=4cm,
xmin=-250, xmax=250,
ymin=-1, ymax=1,
axis line style={draw=none},
]
\addplot [only marks, samples at={-250,250}]
{.1*(bellshape(x,\center-100,25)+bellshape(x,\center-50,25)+bellshape(x,\ center,25)+bellshape(x,\center+50,25)+bellshape(x,\center+100,25))*sin( deg(20*pi*x))};
\addplot [domain=-600:600,samples=400,color=blue]
{.1*(bellshape(x,\center-100,25)+bellshape(x,\center-50,25)+bellshape(x,\ center,25)+bellshape(x,\center+50,25)+bellshape(x,\center+100,25))*sin( deg(20*pi*x))};
\end{axis}
\end{tikzpicture}
}
\end{document}
Я последовал той же идее (поместил ту же функцию синей линии в функцию только для двух черных точек), но не получаю никакого движения от двух черных точек. Когда я попытался убрать функцию "sin", черные точки переместились в функции "bellshape", поэтому я считаю, что ошибка должна быть с функцией sin? Есть ли у кого-нибудь идеи, как это исправить?
решение1
В вашем коде есть несколько вещей, которые я не понимаю, самое главное — параметризация волнового пакета. В вашем случае это сумма гауссианов, каждый из которых движется с одинаковой скоростью, умноженная на общуюстационарныйфаза. Почему? В любом случае, вот почему у вас есть эффект, который вы наблюдаете. График samples at
умножается на *sin(deg(20*pi*x))
, который равен нулю при x=-250
и x=250
.
Я бы выбрал, пожалуй, более физический волновой пакет.
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\pgfplotsset{ticks=none}
\begin{document}
\tikzset{declare function={bellshape(\x,\mu,\sigma)=exp(-(\x-\mu)^2/(2*\sigma^2));
wavepacket(\x,\mu,\sigma,\k)=bellshape(\x,\mu,\sigma)*sin(\k*(\x-\mu));}}
\foreach \X in {-350,-320,...,350}
{
\begin{tikzpicture}
\begin{axis}[%scale=3,
width=4cm,
xmin=-250, xmax=250,
ymin=-1, ymax=1,
axis line style={draw=none},
]
\addplot [only marks, samples at={-250,250}]
{0.1*(wavepacket(x,\X-100,25,4)+
wavepacket(x,\X-50,25,4)+
wavepacket(x,\X-25,25,4)+
wavepacket(x,\X+25,25,4)+
wavepacket(x,\X+50,25,4)+
wavepacket(x,\X+100,25,4))};
\addplot [domain=-250:250,samples=251,color=blue,smooth]
{0.1*(wavepacket(x,\X-100,25,4)+
wavepacket(x,\X-50,25,4)+
wavepacket(x,\X-25,25,4)+
wavepacket(x,\X+25,25,4)+
wavepacket(x,\X+50,25,4)+
wavepacket(x,\X+100,25,4))};
\end{axis}
\end{tikzpicture}
}
\end{document}