如何绘制这个修改后的贝塞尔函数?

如何绘制这个修改后的贝塞尔函数?

我是 TeX 新手,我想在我的硕士论文中绘制函数 $E_2:\mathbb{R}^2 \setminus{0} \to \mathbb{R}$ 的图形,该函数定义为

$$E_2(x,y)= (2 \pi)^{-1}K_0(\sqrt(x²+y²)), $$

其中K_0,是第二类零阶修正贝塞尔函数。

编辑:

我添加了图形渲染,以便更容易理解上述 TeX 代码的用途。为了显示 \sqrt 函数,我使用大括号代替上述代码中的圆括号。为了使“where”子句起作用,我使用 $ 符号代替反引号 (`)。在我看来,\setminus 的使用在数学上并不正确,但我没有更改它,因为我不知道作者的意图。

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

答案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

相关内容