绘制$(e^xx)^{\frac1{x^2}}$

绘制$(e^xx)^{\frac1{x^2}}$

我需要在 tikzpicture 中绘制函数(e^x-x)^(1/(x)^2),但接近 0,显然乳胶无法确定它,无法绘制它的图形。

这是我正在使用的代码:

\documentclass[1cm]{standalone}
\usepackage{pgfplots}

\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
    scale=1,
    xlabel=$x$,
    ylabel=$y$,
    axis x line=middle,
    axis y line=middle,
    xtick={-2,-1,1,2,3,4,5,6},
    xticklabels={},
    ytick={-2,-1,1,2,3,4,5,6,7},
    yticklabels={},
    xmin=-0.7, xmax=4.7,
    ymin=-0.5, ymax=4.7,
    %xmajorgrids=true,
    %ymajorgrids=true,
    grid style=dashed
    ]
    \addplot[domain=0.015:2,smooth,no marks,blue,samples=1000,line width=0.5] {(e^x-x)^(1/(x)^2)};
    \end{axis}
    \end{tikzpicture}
\end{document}

答案1

e未定义 --- 您必须使用exp(x)。在这种情况下,它“有效”。(在这种情况下,会出现大量数值噪声,这是预料之中的……)

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,positioning,calc}
\usepackage{pgfplots}\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        scale=1,
        xlabel=$x$,
        ylabel=$y$,
        axis x line=middle,
        axis y line=middle,
        xtick={-2,-1,1,2,3,4,5,6},
        xticklabels={},
        ytick={-2,-1,1,2,3,4,5,6,7},
        yticklabels={},
        xmin=-0.7, xmax=4.7,
        ymin=-0.5, ymax=4.7,
        %xmajorgrids=true,
        %ymajorgrids=true,
        grid style=dashed
        ]
        \addplot[domain=0.015:2,no marks,blue,samples=1000,line width=0.5] {(exp(x)-x)^(1/(x)^2)};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

Asymptote 适合这种情况。编译于http://asymptote.ualberta.ca/

import graph;
size(6cm);

//real f(real x) {return (x != 0.0) ? (exp(x)-x)^(1/(x)^2) : 1.0;}
real f(real x) {return (exp(x)-x)^(1/(x)^2);}
pair F(real x) {return (x,f(x));}

xaxis("$x$",xmin=-0.1,xmax=2.3, Ticks(Step=1, step=0.5, Size=3,NoZero),Arrow);
yaxis("$y$",ymin=-0.1,ymax=2, Ticks(Step=1, step=0.5,
                                    Size=3,NoZero,end=false,endlabel=false),Arrow);
label("$0$",(0,0),2dir(-135));
draw(graph(f,2*sqrtEpsilon,2,300),blue+.7bp);
label("$ (e^x-x)^{\textstyle \frac{1}{x^2}}$",F(2),SW);
write(f(realEpsilon)); // 1
write(f(2*sqrtEpsilon)); // 1.64872127070013
write(2*sqrtEpsilon); // 2.98023223876953e-08

在此处输入图片描述

答案3

正如@hpekristiansen提到的,你可以使用泰勒展开来巧妙地解决这个问题。如果你不这样做,那么正如@Rmano指出的那样,存在“数值噪声”破坏图形外观的问题。类似的问题出现在这里。有 Asymptote 或 LuaTex 等选项可以提供您想要的数值精度。还有一个软件包sagetex为您提供开源 CAS Sage。使用 Sage,您可以获得从矩阵到导数到积分、图论等的数学知识,以及数值精确的结果。请参阅这里了解更多信息。您还可以获得 Python。使用 Python、CAS 和 LaTeX,您可以解决各种问题。搜索此网站,您会发现各种问题都可以用sagetex。例如,这里Sage 即时确定素数并绘制它们。无需文件。

正如我在文章中提到的那样,我们可以强制 Sage 进行计算并将数据推送到 LaTeX,这样您就可以获得准确的点数pgfplots。我所做的就是更改点数之间的步长。由于step = .10将包括 0,我将其更改为step = .13。以下是针对您的函数改编的代码:

\documentclass[11pt,border=1mm]{standalone}
\usepackage{sagetex}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{sagesilent}
LowerX = -1
UpperX = 3
LowerY = -1
UpperY = 3
step = .13
t = var('t')
g(x)= (e^x-x)^(1/(x)^2)

x_coords = [t for t in srange(LowerX,UpperX,step)]
y_coords = [g(t).n(digits=6) for t in srange(LowerX,UpperX,step)]

output = r"\begin{tikzpicture}"
output += r"\begin{axis}[xmin=%f,xmax=%f,ymin= %f,ymax=%f,"%(LowerX,UpperX,LowerY, UpperY)
output += r"xlabel=$x$,ylabel=$y$,axis x line=middle,axis y line=middle,"
output += r"grid style=dashed]"
output += r"\addplot[thin, blue, unbounded coords=jump] 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 了。这可能更具挑战性,具体取决于您的计算机。

编辑:与您的评论相关,如果您运行我发布的代码然后注释掉,\pgfplotsset{compat=1.16}那么当您构建文件时,警告区域会告诉您它不喜欢什么: 在此处输入图片描述 Cocalc 应该会给你一些关于问题所在。

相关内容