我从手册中得知pstricks-add
,我可以像这样得到黎曼积分的上下和的可视化:
\documentclass{standalone}
\usepackage{auto-pst-pdf}
\usepackage{pst-func}
\psset{xunit=0.7cm,yunit=0.7cm}
\psset{algebraic,plotpoints=100}
\begin{document}
\def\f(x){-1*(-x-1)*(x-5)*x/30*(x-7)}
\begin{pspicture}(0,-2.5)(7.7,4) \psStep[StepType=infimum,linewidth=1.5pt](0,7){15}{\f(x)}
\psplot[linewidth=1.5pt]{0}{7.7}{\f(x)}
\psaxes[Dy=2]{->}(0,0)(0,-2)(7.7,4.7)[$x$,0][$y$,90]
\end{pspicture}
\begin{pspicture}(0,-2.5)(7.7,4) \psStep[StepType=supremum,linewidth=1.5pt](0,7){15}{\f(x)}
\psplot[linewidth=1.5pt]{0}{7.7}{\f(x)}
\psaxes[Dy=2]{->}(0,0)(0,-2)(7.7,4.7)[$x$,0][$y$,90]
\end{pspicture}
\end{document}
输出如下:
但是我怎样才能得到没有垂直线的图片呢?即我怎样才能自动得到近似阶跃函数的图呢?
该解决方案应该与上面的图片兼容,因为我还希望能够在第二张图片中添加不同颜色的垂直线。
答案1
需要最新pstricks-add.tex
的http://texnik.dante.de/tex/generic/pstricks-add/
\documentclass{standalone}
\usepackage{pstricks-add}
\psset{xunit=0.7cm,yunit=0.7cm}
\psset{algebraic,plotpoints=100}
\begin{document}
\def\f(x){-1*(-x-1)*(x-5)*x/30*(x-7)}
\psset{noVerticalLines}%%%%%%%%%%%%%%
\begin{pspicture}(-1,-2.5)(8,5)
\psStep[StepType=infimum,linewidth=1.5pt,linecolor=red](0,7){15}{\f(x)}
\psplot[linewidth=1.5pt]{0}{7.7}{\f(x)}
\psaxes[Dy=2]{->}(0,0)(0,-2)(7.7,4.7)[$x$,0][$y$,90]
\end{pspicture}
\qquad
\begin{pspicture}(0,-2.5)(7.7,4)
\psStep[StepType=supremum,linewidth=1.5pt,linecolor=red](0,7){15}{\f(x)}
\psplot[linewidth=1.5pt]{0}{7.7}{\f(x)}
\psaxes[Dy=2]{->}(0,0)(0,-2)(7.7,4.7)[$x$,0][$y$,90]
\end{pspicture}
\end{document}
答案2
只是一个更干净的代码。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot,pst-node}
\psset{algebraic}
\def\f(#1){(#1+1)*(#1-5)*#1/35*(#1-7)}
\def\Left#1{%
\begin{pspicture}(-3,-1)(6,4)
\psplot{-2}{5}{\f(x)}
\psset{linecolor=red,showpoints}
\curvepnodes[plotpoints=#1]{-1.8}{4.8}{t|\f(t)}{A}
\multido{\il=0+1,\ir=1+1}{\Anodecount}{\psline(A\il)(A\ir|A\il)}
\rput[t](1.5,4){Left}
\end{pspicture}}
\def\Right#1{%
\begin{pspicture}(-3,-1)(6,4)
\psplot{-2}{5}{\f(x)}
\psset{linecolor=green,showpoints}
\curvepnodes[plotpoints=#1]{-1.8}{4.8}{t|\f(t)}{A}
\multido{\il=0+1,\ir=1+1}{\Anodecount}{\psline(A\il|A\ir)(A\ir)}
\rput[t](1.5,4){Right}
\end{pspicture}}
\def\Center#1{%
\begin{pspicture}(-3,-1)(6,4)
\psplot{-2}{5}{\f(x)}
\psset{linecolor=blue,showpoints}
\curvepnodes[plotpoints=#1]{-1.8}{4.8}{t|\f(t)}{A}
%\multido{\il=0+1,\ir=1+1}{\Anodecount}{\psxline(A\il){.5(A\il)-.5(A\ir|A\il)}{.5(A\ir|A\il)-.5(A\il)}}
\multido{\il=0+1,\ir=1+1}{\Anodecount}{\rput(A\il){\psline(!dt 2 div neg 0)(!dt 2 div 0)}}
\rput[t](1.5,4){Center}
\end{pspicture}}
\begin{document}
\foreach \macro in {Left,Right,Center}{\multido{\i=2+1}{5}{\csname\macro\endcsname{\i}}}
\end{document}
笔记
下列
\psxline(A\il){.5(A\il)-.5(A\ir|A\il)}{.5(A\ir|A\il)-.5(A\il)}
可以简化为
\rput(A\il){\psline(!dt 2 div neg 0)(!dt 2 div 0)}
我们有一个显然dt
提供的可访问的\curvepnodes
,请参阅Christoph 的评论。