答案1
计算机代数系统 (CAS) Sage 知道贝塞尔函数并通过鼠尾草包它可以用该包计算LaTeX需要绘图的点tikz
。
我没有使用过贝塞尔函数,所以在阅读文档后,我去了Sage 单元服务器看看结果应该是什么样的。将以下代码复制/粘贴到 Sage Cell 服务器中:
var('x,y')
f = (1/(2*pi))*Bessel(0,type='K')(sqrt(x^2+y^2))
plot3d(f,(x,-20,20),(y,-20,20))
#plot3d(f,(x,-20,20),(y,-20,20),aspect_ratio=[1,1,25])
然后按下Evaluate
,你会得到一个图,如果你伸手进去并旋转它,它将看起来像这样:
现在删除第 4 行之前的 ## 标签,并在第 3 行之前添加一个 ## 标签。按Evaluate
,旋转图表,您可以得到如下内容:
总之,准确的情节将具有较小的高度,并且使用纵横比将显示有用的细节。
考虑到这一点,下面的 LaTeX 代码将绘制修改后的贝塞尔函数。
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{sagetex}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{sagesilent}
var('x,y')
minX = -20
maxX = 20
minY = -20
maxY = 20
xcoords = [i for i in srange(minX,maxX,1)]
ycoords = [i for i in srange(minY,maxY,1)]
f = (1/(2*pi))*Bessel(0,type='K')(sqrt(x^2+y^2))
output = ""
output += r"\begin{tikzpicture}[scale=1.0]"
output += r"\begin{axis}[view={20}{45},xmin=%d, xmax=%d, ymin=%d, ymax=%d]"%(minX,maxX,minY,maxY)
output += r"\addplot3[colormap/viridis,surf,opacity=0.5,mesh/rows=%d] coordinates {"%(len(ycoords))
# the length of ycoords is the number of y values
for y in ycoords:
for x in xcoords:
output += r"(%f, %f, %f) "%(x,y,f(x=x,y=y))
output += r"};"
output += r"\end{axis}"
output += r"\end{tikzpicture}"
\end{sagesilent}
\sagestr{output}
\end{document}
我们知道此图夸大了 z 轴。可以通过强制最大 z 值将其更正为您想要的值。例如,我zmax=2
在第 18 行添加以得到:
Sage 不是 LaTeX 的一部分,因此您必须从 Sagemath 网站下载它,或者打开一个免费的可钙帐户。使用 Cocalc 帐户,您可以在 5-10 分钟内启动并运行;您需要做的就是创建一个 LaTeX 文档,复制/粘贴代码,然后按下按钮Build
。
编辑:关于您下面的评论,有几种方法可以获取 .png 输出。使用 Sage,这很简单。来自 Sage Cell 服务器的图片在图片右下角有一个圆圈内的“i”。如果您左键单击它,则会打开一个菜单,其中包含创建 .png 的选项。
对于 LaTeX,您可以使用以下代码获得类似的外观:
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{sagetex}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{sagesilent}
var('x,y')
minX = -7
maxX = 7
minY = -7
maxY = 7
xcoords = [i for i in srange(minX,maxX,.5)]
ycoords = [i for i in srange(minY,maxY,.5)]
f = (1/(2*pi))*Bessel(0,type='K')(sqrt(x^2+y^2))
output = ""
output += r"\begin{tikzpicture}[scale=1.0]"
output += r"\begin{axis}[hide axis,view={20}{45},xmin=%d, xmax=%d, ymin=%d, ymax=%d]"%(minX,maxX,minY,maxY)
output += r"\addplot3[surf,fill=white,faceted color = black,opacity=0.7,mesh/rows=%d] coordinates {"%(len(ycoords))
# the length of ycoords is the number of y values
for y in ycoords:
for x in xcoords:
output += r"(%f, %f, %f) "%(x,y,f(x=x,y=y))
output += r"};"
output += r"\end{axis}"
output += r"\end{tikzpicture}"
\end{sagesilent}
\sagestr{output}
\end{document}
您必须尝试使用代码才能获得所需的外观。 pdf 可以通过外部程序转换为 png,例如GIMP。