如何绘制高度递归函数的彩色标记图?

如何绘制高度递归函数的彩色标记图?

我正在尝试根据很久以前上过的一门课程的笔记写一些个人笔记。在这些笔记中,教授有以下图表:

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

这些图很漂亮,是用可缩放矢量图形制作的。此外,它们表示样条函数的基函数,除非您去实现动态规划算法,否则这是一种非常递归的结构,这对于绘制静态图像来说似乎有点大材小用。

关于我可以使用哪些包或工具来实现这一点,有什么建议吗?

答案1

我真的不知道为什么问题的标题带有“高度递归”,但你可以用标准 TeX 包(如 MetaPost、PSTricks 和 Ti)轻松地绘制它们Z.这是一个Ti您的图表的 Zy 版本。

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[font=\sffamily,transform shape,line cap=round]
 \begin{scope}[scale=2]
  \draw[help lines] (-1,-1) grid (7,2);
  \draw[thick] (0,-1) -- (0,2) node[below left] {2};
  \draw[thick] (-1,0) -- (7,0) foreach \X in {1,...,7}
  { (\X,0) node [below left] {\X}};
  \foreach \Y [count=\X starting from 0] in {red,orange,green!60!black,cyan,brown!50!black,magenta}
  {\draw[line width=1mm,\Y] (\X,1)
     --node[black,above]{$\scriptstyle\mathsf{N}_{\mathsf{\X},\mathsf{1}}(u)$} (\X+1,1);}
 \end{scope}    
 %
 \begin{scope}[yshift=-5cm,scale=1.8]
  \foreach \Y [count=\X starting from 0] in {brown!50!black,red,orange,green!60!black,cyan} 
  {\draw[very thick,\Y] (\X,0) -- ++ (1,1) -- ++ (1,-1); }
  \draw[dashed,gray] foreach \X in {-1,5}
      {(\X,0) -- ++ (1,1) -- ++ (1,-1)};
  \draw[thick] (-0.1,0) -- (6.1,0) foreach \X in {0,...,6}
   { (\X,0) node [below] {\X}};  
 \end{scope}
 %
 \begin{scope}[yshift=-10cm,scale=1.8,declare
     function={gauss(\x)=exp(-\x*\x/0.25);}]
  \foreach \Y [count=\X starting from 0] in 
  {red,brown!50!black,green!60!black,orange,cyan,gray!50} 
  {\draw[very thick,\Y] plot[variable=\x,domain=-1.2:1.2,smooth] 
  ({0.5+\x+0.5*\X+ifthenelse(\X>2,2.5,0)},{gauss(\x)}); }
  \draw[thick] (-1,0) -- (7,0) foreach \X in {0,...,3}
   { ({-0.5+0.5*\X+ifthenelse(\X==3,0.5,0)},0) node [below] 
    {$\scriptstyle\mathsf{u}_{\mathsf{\X}}$}}
   foreach \Y [count=\X starting from 0] in {m,m+k-2,m+k-1,m+k}
   { ({5+0.5*\X-ifthenelse(\X==0,0.5,0)},0) node [anchor=north west,rotate=-45] 
   {$\scriptstyle\mathsf{u}_{\mathsf{\Y}}$}};  
 \end{scope} 
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容