答案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 代码中。如果你的工作涉及数学,那么这是一个非常方便学习的软件包。