我正在绘制函数,这些函数在接近 0 时会快速振荡。振荡似乎无法识别,我得到的是该函数的简化版本。我怎样才能至少让一些振荡出现?
这是一个有效的例子:
\begin{tikzpicture}[
declare function={
func(\x)= (\x<-1) * (0) +
and(\x>= -1, \x<= 0) * ((\x-1)/2) +
and(\x>0, \x<=0.5) * (\x-0.5*sin(pi/\x)) +
and(\x>0.5, \x<=1) * (\x) +
(\x>1) * (0);
}
]
\begin{axis}[
axis x line=middle, axis y line=middle,
ymin=-1, ymax=1, ytick={-1,0,1}, ylabel=$y$,
xmin=-1, xmax=1, xtick={-1,0,1}, xlabel=$x$,
]
\pgfplotsinvokeforeach{-1, 0, 0.5, 1}{
\draw[dashed] ({rel axis cs: 0,0} -| {axis cs: #1, 0}) -- ({rel axis cs: 0,1} -| {axis cs: #1, 0});}
\addplot[blue, domain=-1:1]{func(x)};
\end{axis}
\end{tikzpicture}
答案1
你正在紧张的 tex 算术,你最好使用 gnuplot 或其他数值系统来生成数据,然后只使用 pgfplots 来绘制最终的图,但如果我使用 fp lib 来获得更好的算术并增加样本数量,我几乎可以得到两个振荡
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{fixedpointarithmetic}
\begin{document}
\begin{tikzpicture}[
declare function={
func(\x)= (\x<-1) * (0) +
and(\x>= -1, \x<= 0) * ((\x-1)/2) +
and(\x>0, \x<=0.5) * (\x-0.5*sin(pi/\x)) +
and(\x>0.5, \x<=1) * (\x) +
(\x>1) * (0);
}
]
\begin{axis}[
axis x line=middle, axis y line=middle,
samples=1600,
ymin=-1, ymax=1, ytick={-1,0,1}, ylabel=$y$,
xmin=-1, xmax=1, xtick={-1,0,1}, xlabel=$x$,
]
\pgfplotsinvokeforeach{-1, 0, 0.5, 1}{
\draw[dashed] ({rel axis cs: 0,0} -| {axis cs: #1, 0}) -- ({rel axis cs: 0,1} -| {axis cs: #1, 0});}
\addplot[blue, domain=-1:1]{func(x)};
\end{axis}
\end{tikzpicture}
\end{document}