绘制托马函数

绘制托马函数

有人能指导我如何绘制这个特殊函数吗?老实说,我根本不知道从哪里开始(我从来没有真正\tikzpicture从头开始做过)。

\[
f(x) = \left\{\begin{array}{lr}
    0, &x \ \text{irrational}\\
    \frac{1}{q}, &x = \frac{p}{q} \  \text{in lowest form}\\[10pt]
    \end{array}\right\}

]

它看起来应该是这样的:

在此处输入图片描述

答案1

欢迎来到 TeX.SE!这是一份提案。当然,这只是一幅漫画,因为我不得不剪掉q,就像您的屏幕截图中所做的那样。

编辑:我之前的版本存在一个巨大的概念缺陷。非常感谢 Peter Grill 提醒我注意这个问题!

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}[scale=8]
\draw [-stealth] (-0.1,0) -- (1.1,0);
\draw [-stealth] (0,-0.1) -- (0,0.6);
\foreach \X in {1,...,7}
{\ifnum\X=1
\else
\draw (0.02,1/\X) -- (-0.02,1/\X) node[left,xshift={(-(1+pow(-1,\X)))*3pt}]{$\frac{1}{\X}$};
\fi
}
\foreach \X [evaluate=\X as \Ymax using {int(\X-1)}]in {25,24,...,2}
{\foreach \Y in {1,...,\Ymax}
 {\ifnum\X<6
 \draw (\Y/\X,0.02) -- (\Y/\X,-0.02) node[below,fill=white]{$\frac{\Y}{\X}$};
 \else
 \draw[ultra thin] (\Y/\X,0.01) -- (\Y/\X,-0.01);
 \fi
 \pgfmathtruncatemacro{\TST}{gcd(\X,\Y)}
 \ifnum\TST=1
 \fill ({\Y/\X},1/\X) circle(0.2pt); 
 \fi
 }
}
\foreach \X in {0,1,...,80}
{\fill (\X/80,0) circle(0.2pt); }
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

这是sagetex使用计算机代数系统 SAGE 进行计算的解决方案。

\documentclass[border=3pt]{standalone}
\usepackage{sagetex}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{sagesilent}
xvalue = []
yvalue = []
for q in range(1,101):
    for p in range(1,q):
        xvalue += [(p*1.0/q*1.).n(digits=2)]
        yvalue += [(1/(q/gcd(p,q))).n(digits=2)]
output = r""
output += r"\begin{tikzpicture}"
output += r"\begin{axis}["
output += r"title={Thomae's function},"
output += r"xlabel=$x$,"
output += r"ylabel=$f(x)$,"
output += r"]"
output += r"\addplot[only marks,mark options={mark size=.5pt}] coordinates {"
for i in range(0,len(xvalue)):
    output += r"(%s, %s)"%(xvalue[i],yvalue[i])
output += r"};"
output += r"\end{axis}"
output += r"\end{tikzpicture}"
\end{sagesilent}
\sagestr{output}
\end{document}

结果运行可钙如下所示: 在此处输入图片描述

通过将 q 的值从 101 更改为更大的值,您将获得更多积分。SAGE 不是 LaTeX 发行版的一部分,因此您需要将其安装在您的计算机上,或者,为避免这种情况,请获取免费的 Cocalc 帐户。SAGE 的文档是这里并且文档sagetex这里在 CTAN 上。SAGE 编程涉及将 SAGE 命令混合到 Python 代码中。如果你的工作涉及数学,那么这是一个非常方便学习的软件包。

相关内容