是否有可能psplot
自动忽略无效范围?
例子:
x 2 sub sqrt
这无法通过请求来绘制\psplot{0}{10}
,但只能在使用时绘制\psplot{2}{10}
。
当然,我的公式比这更复杂,而且可能存在几个区间的情况(negative number) sqrt
。
除此之外,我还在使用\multido
,所以如果我必须找到每个出现这种情况的点,那将会非常烦人-1 sqrt
......
我希望它应该如何表现:它应该只绘制函数的真实值并跳过虚数。
编辑:MWE(由于负平方根而不起作用):
\documentclass[pstricks]{standalone}
\standaloneconfig{border=1cm}
\usepackage{pstricks,multido,pst-func}
\begin{document}
\begin{pspicture}(10,6)
\psaxes[labels=none]{->}(0,0)(10,6)
\multido{\n=1.1+.1}{20}{%
\psplot[linecolor=red,linewidth=.5mm]{0}{9}{5 2 3.1416 mul div \n\space 2 exp x 10 mul sin 2 exp mul 1 sub sqrt mul}
}
\end{pspicture}
\end{document}
答案1
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}
\pstVerb{/mySQRT { dup 0 lt { 0 }{ sqrt } ifelse } bind def }%
\begin{document}
\begin{pspicture}(10,6)
\psaxes[labels=none]{->}(0,0)(10,6)
\multido{\n=1.1+.3}{20}{%
\psplot[linecolor=red]{0}{9}{5 2 Pi mul div \n\space 2 exp x 10 mul sin 2 exp mul 1 sub mySQRT mul}}
\end{pspicture}
\end{document}
编辑:
我刚刚得到了以下启示。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}
\pstVerb{/mySQRT { dup 0 lt { neg sqrt neg }{ sqrt } ifelse } bind def }%
\psset{plotpoints=200}
\begin{document}
\begin{pspicture}(10,6)
\psclip{\psframe[linestyle=none,linewidth=0](9,6)}
\multido{\n=1.1+.3}{20}{%
\psplot[linecolor=red]{0}{9}{5 2 Pi mul div \n\space 2 exp x 10 mul sin 2 exp mul 1 sub mySQRT mul}}
\endpsclip
\psaxes[labels=none]{->}(0,0)(10,6)
\end{pspicture}
\end{document}
请注意,也可以按以下形式mySQRT
调用。algebraic
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}
\pstVerb{/mySQRT { dup 0 lt { neg sqrt neg }{ sqrt } ifelse } bind def }%
\psset{plotpoints=200,algebraic}
\begin{document}
\begin{pspicture}(10,6)
\psclip{\psframe[linestyle=none,linewidth=0](9,6)}
\multido{\n=1.1+.3}{20}{%
\psplot[linecolor=red]{0}{9}{5*mySQRT((\n*sin(10*x/180*Pi))^2-1)/(2*Pi)}}
\endpsclip
\psaxes[labels=none]{->}(0,0)(10,6)
\end{pspicture}
\end{document}
但不要忘记将度数转换为弧度。
答案2
\documentclass[pstricks]{standalone}
\standaloneconfig{border=1cm}
\usepackage{pst-plot,multido}
\begin{document}
\psset{yunit=2}
\begin{pspicture}(10,3)
\psaxes[labels=none]{->}(0,0)(10,3)
\multido{\n=1.1+.1}{20}{%
\psplot[linecolor=red,linewidth=.5mm,plotpoints=500]{0}{9}{5 2 3.1416 mul div \n\space 2 exp x 10 mul sin 2 exp mul 1 sub
dup 0 lt % negative value??
{ pop pop 0 /L /moveto load def } % if yes then use moveto
{ sqrt mul /L /lineto load def } % if not then go on
ifelse }%
}
\end{pspicture}
\end{document}