答案1
如果你使用 Mathematica 等计算机代数系统 (CAS) 进行计算,那么自然的选择是使用名为 SAGE 的开源 CAS,它可以通过以下方式链接到 LaTeXsagetex
文档是这里。您可以在文档中快速绘制 SAGE 图,但如果您想要获得更漂亮的图,则可以强制 SAGE 进行图计算并将数据推送到 tikz。快速简便绘图的一个例子是我答案中的 zeta 函数的第二个图这里在该示例中,zeta 函数绘制在一行中:\sageplot[width=6cm]{plot(zeta(x), (x, -3, 3),ymin=-4, ymax=5,detect_poles=True)},而强制将输出放入 tikz(第一个图)则需要更多的编码。
函数中的不连续性使我想要绘制成点的集合,就像我为Thomae 函数。还有一个额外的困难,即为了使输出看起来不像点,必须有很多点组合在一起才能呈现出一条线的外观。通过将函数分成 4 个图并减少绘制点之间的距离可以解决这个问题。请注意,过多地减少步长会产生比 LaTeX 可以处理的更多的点,因此这种方法需要进行一定程度的调整,以确保有足够的点,使图形看起来平滑,但又不能太多,以免 TeX 的内存超载。
\documentclass[border=5pt]{standalone}
\usepackage{sagetex}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{sagesilent}
LowerX = 0
UpperX = .85
LowerY = 0
UpperY = .01
step = .001
Scale = 1.2
xscale=1
yscale=1
x_coords = [t for t in srange(LowerX,.25,step)]
y_coords = [(t^(ceil(log(.01)*(1/(t-1)+1/2)))).n(digits=5) for t in srange(LowerX,.25,step)]
output = r""
output += r"\begin{tikzpicture}[scale=1]"
output += r"\begin{axis}[xmin=%f,xmax=%f,ymin= %f,ymax=%f]"%(LowerX,UpperX,LowerY, UpperY)
output += r"\addplot[red,only marks,mark options={mark size=.5pt}] coordinates {"
for i in range(0,len(x_coords)-1):
if (y_coords[i])<LowerY or (y_coords[i])>UpperY:
output += r"(%f , inf) "%(x_coords[i])
else:
output += r"(%f , %f) "%(x_coords[i],y_coords[i])
output += r"};"
################# SECOND PART
step = .0005
x_coords = [t for t in srange(.24,.48,step)]
y_coords = [(t^(ceil(log(.01)*(1/(t-1)+1/2)))).n(digits=5) for t in srange(.24,.48,step)]
output += r"\addplot[red,only marks,mark options={mark size=.5pt}] coordinates {"
for i in range(0,len(x_coords)-1):
if (y_coords[i])<LowerY or (y_coords[i])>UpperY:
output += r"(%f , inf) "%(x_coords[i])
else:
output += r"(%f , %f) "%(x_coords[i],y_coords[i])
output += r"};"
################# THIRD PART
x_coords = [t for t in srange(.47,.57,step)]
y_coords = [(t^(ceil(log(.01)*(1/(t-1)+1/2)))).n(digits=5) for t in srange(.47,.57,step)]
output += r"\addplot[red,only marks,mark options={mark size=.5pt}] coordinates {"
for i in range(0,len(x_coords)-1):
if (y_coords[i])<LowerY or (y_coords[i])>UpperY:
output += r"(%f , inf) "%(x_coords[i])
else:
output += r"(%f , %f) "%(x_coords[i],y_coords[i])
output += r"};"
###########FOURTH PART
step = .0001
x_coords = [t for t in srange(.56,UpperX,step)]
y_coords = [(t^(ceil(log(.01)*(1/(t-1)+1/2)))).n(digits=5) for t in srange(.56,UpperX,step)]
output += r"\addplot[red,only marks,mark options={mark size=.5pt}] coordinates {"
for i in range(0,len(x_coords)-1):
if (y_coords[i])<LowerY or (y_coords[i])>UpperY:
output += r"(%f , inf) "%(x_coords[i])
else:
output += r"(%f , %f) "%(x_coords[i],y_coords[i])
output += r"};"
output += r"\end{axis}"
output += r"\end{tikzpicture}"
\end{sagesilent}
\sagestr{output}
\end{document}
由于 SAGE 不是 LaTeX 的一部分,你需要在你的机器上本地安装它,或者更好的选择是通过免费的 Cocalc 帐户访问它,你可以在这里。使用 Cocalc 帐户启动并运行不应超过 10 分钟;本地安装 SAGE 将花费更长时间。互联网上有大量有关 SAGE 的文档。以下是2D 绘图。