在 tikz/pgfplots 中使用 2 个变量绘制函数

在 tikz/pgfplots 中使用 2 个变量绘制函数

使用Tikz/ pgfplots,如何绘制具有两个变量的函数,例如:
|x| + |y| <= 1 / sqrt(2)

如果该函数只有一个输入,X则很容易绘制:

\begin{figure}[!hb]
\centering
\begin{tikzpicture}[scale=1.0]
\begin{axis}
    \addplot[domain=-10000:10000, blue, ultra thick] {abs(x)};
    \end{axis}
\end{tikzpicture}
\caption{Plot of $\abs(x)$}
\end{figure}

但是,以下会产生错误

\addplot[domain=-10000:10000, blue, ultra thick] {abs(x) + abs(y) <= 1 / sqrt(2)};

答案1

您可以使用参数化(在本例中是两个):

\documentclass{article}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
axis lines=middle,
domain=-1/sqrt(2):1/sqrt(2),
samples=400,
xmin=-1.5,
xmax=1.5,
ymin=-1.5,
ymax=1.5,
axis on top=true
]
\addplot+[mark=none,cyan,fill] ({x},{max(1/sqrt(2)-abs(x),0)}) \closedcycle;
\addplot+[mark=none,cyan,fill] ({x},{min(abs(x)-1/sqrt(2),0)}) \closedcycle;
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

使用 PSTricks 的隐式情节宏:

\psplotImp[<options>](-2,-2)(2,2){abs(x)+abs(y)-const}

最小工作示例:

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-func}
\begin{document}
\begin{pspicture}(-2,-2)(2,2)
    \pstVerb{/const 1 2 sqrt div def}%
    \pspolygon*[linecolor=cyan](!const 0)(!0 const)(!const neg 0)(!0 const neg)
    \psplotImp[linecolor=red,algebraic,stepFactor=0.1](-2,-2)(2,2){abs(x)+abs(y)-const}
    \psaxes{->}(0,0)(-2,-2)(2,2)[$x$,0][$y$,90]
\end{pspicture}
\end{document}

在此处输入图片描述

算法

\psplotImp下面的动画揭示了幕后使用的机密算法。

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-func}
\begin{document}
\multido{\r=1.5+-0.1}{15}{%
\begin{pspicture}(-1,-1)(1,1)
  \pstVerb{/const 1 2 sqrt div def}%
  \psplotImp[linecolor=red,algebraic,stepFactor=\r](-1,-1)(1,1){abs(x)+abs(y)-const}
\end{pspicture}}
\end{document}

在此处输入图片描述

答案3

在此处输入图片描述

MWE使用Asymptote,使用contour模块。

一些注释:边界构造为 guide g=(contour(f,(-1,-1),(1,1), new real[]{1/sqrt(2)}))[0][0];,其中表达式new real[]{1/sqrt(2)}代表级别值的内联数组(在本例中只有一个1/sqrt(2))。尾随[0][0]意味着通常返回一个曲线矩阵,其中第一个索引对应于级别数组中的索引,第二个索引计数对应于特定级别值的曲线。

% imp.tex :
\documentclass{article}
\usepackage[inline]{asymptote}
\usepackage{lmodern}
\begin{document}
\begin{figure}
\begin{asy}
size(300);
import graph;
import contour;
defaultpen(fontsize(10pt));
pen bgColor=paleyellow;
real f(pair v){return abs(v.x)+abs(v.y);};
guide g=(contour(f,(-1,-1),(1,1), new real[]{1/sqrt(2)}))[0][0];
pen linePen=deepblue+1bp;
pen fillPen=deepblue+opacity(0.3);
pen xyPen=darkblue+0.4bp;
filldraw(g,fillPen,linePen);
real du=0.02;
xaxis(-0.8-du,0.8+du,xyPen, LeftTicks(OmitTick(0),Step=0.2,step=0.1),above=true);
yaxis(-0.8-du,0.8+du,xyPen,RightTicks(OmitTick(0),Step=0.2,step=0.1),above=true);
shipout(bbox(Fill(bgColor)));
\end{asy}
\end{figure}
\end{document}
%% Process:
%
% pdflatex imp.tex 
% asy -f pdf imp-*.asy     
% pdflatex imp.tex

相关内容