Tikz/PGF 中具有不同边界的 3D 分段图

Tikz/PGF 中具有不同边界的 3D 分段图

要绘制的函数如下

在此处输入图片描述

其中,这些约束成立:

在此处输入图片描述

如果绘制出来看起来像

在此处输入图片描述

请原谅不同的符号,我会解释:p/p_0等同于\Pi并且\gamma等同于\kappa

该图是使用 Matlab 中的数据生成的,并通过 CSV 文件输入到 LaTeX/PGF 中。这很好用,但当然数据不能再修改了,所以我想自然而然地把所有数据都放在 Latex 中。另外,在 Latex 中做东西很有趣。

我使用 Tikz/PGF 库定义了一个函数,math例如

\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{math}
\tikzmath{%
function prcrit(\x) {%
    return (2/(\x+1))^(\x/(\x-1));
};
function psimax(\x) {%
    return (sqrt(\x/(\x+1))) * (2/(\x+1))^(1/(\x-1));   
};
function psi(\x,\y) {%
    \psimax = psimax(\x);%maximum psi only dependent on kappa / k
    \prcrit = prcrit(\x);%critical pressure ratio only dependent on kappa / k
        if \y<\prcrit then {\efflux = \psimax;} else {\efflux = sqrt(\x/(\x-1))*(\y)^(1/\x)*sqrt(1-\y^((\x-1)/\x));};
    return \efflux;
};
}%

其中prcrit(压力比 Pi) 代表$\Pi_{mathrm{crit}}$上图中的,psimax代表的最大值\Psi(参见初始方程的两个情况中的第一种)。因此,对于任何低于临界值的压力比,该函数\Psi都设置为其各自的最大值。\Psi_{\mathrm{max}}

问题在于,定义分段三维函数的边界本身是两个输入变量之一的函数,即\kappa,参见第二个方程。

所以,此主题 和这个没有帮助我。这个答案看起来与我的尝试非常接近,但它似乎不适用于两个变量。它也没有利用环境axis,只是绘制了一张普通的 tikz 图片。这也是我在包的文档中找到的方法。

理想情况下,最终结果可能类似于此:

\begin{tikzpicture}
    \begin{axis}
         \addplot3[domain=1.3:1.7,y domain=0:1,surf] {psi(\x,\y)};
    \end{axis}
\end{tikzpicture}

但我无法开始工作。问题本质上是将function序言中迄今为止的功能声明与surf使用axis环境的常规图结合起来。我还没有找到这样的解决方案。

该函数还需要包含在\Pi和的相当狭窄的边界内\kappa,即分别为 0 到 1 和大约 1.3 到 1.7。这就是我试图通过分配相应的domain边界来实现的。对于 的 0 和 1 \Pi,该函数也具有无限梯度(可以在上面的函数图中清楚地看到),因此 pgfplots 过去也在那里出现过一些问题;但情况还不算太糟。

答案1

declare function可能更容易(因为你无法tikzmath轻松使用fpu)。这个值y=0有点棘手,但由于对的真正依赖性y不是太强,我想说它足以开始绘制y=0.01左右的图。

\documentclass[border=3.14mm,tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}[declare function={%
prcrit(\x)=(2/(\x+1))^(\x/(\x-1));
psimax(\x)=(sqrt(\x/(\x+1))) * (2/(\x+1))^(1/(\x-1));
psi(\x,\y)=ifthenelse(\y<prcrit(\x),psimax(\x),
sqrt(\x/(\x-1))*((\y)^(1/\x))*sqrt(1-\y^((\x-1)/\x)));}]
\begin{axis}[view={45}{45},xlabel={$\gamma$},ylabel={$p/p_0$},zlabel={$\Psi(\gamma,p/p_0)$},
point meta min=-1]
  \addplot3[opacity=0.6,colormap/viridis,domain=1.3:1.7,y domain=0.01:1,surf] {psi(\x,\y)};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容