Tikz 上的“max”功能很烦人,有帮助吗?

Tikz 上的“max”功能很烦人,有帮助吗?

我使用 Tikz 绘制了以下函数图表。

在此处输入图片描述

这没问题,只是我希望函数等于 0 而不是负值。因此我尝试使用“max(0,f(x))”,其中 f(x) 是我的函数(如下所示):

\documentclass[11pt]{article}
    \usepackage{tikz} 
    \usepackage{fp} 
    \usetikzlibrary{fixedpointarithmetic} 
    \begin{document} 
    \begin{tikzpicture} 
    \draw (0,0) rectangle (4,4); 
    \draw[
            samples=100,
            fixed point arithmetic,
            scale=1.3,domain=0.001:4,smooth,variable=\x,blue] plot
                ({\x},{max(0,(\x*(0.005*\x)^0.5-0.005)/((0.33*\x+(0.005*\x)^0.5)))});  
    \end{tikzpicture}   
    \end{document}

但此代码无法运行。我做错了什么?

答案1

删除fixed point arithmetic应该可以确保你得到你想要的。因为,当你指定约束时fixed pointmax(.)假设它的域是整数(我认为)。但是,你的函数返回实值。因此,这将导致内部矛盾,因此你会看到错误。如果你现在删除约束,一切都应该如你所愿。下面是该MWE问题的基础解决方案。

\documentclass[11pt]{article}
\usepackage{tikz} 
\usepackage{fp} 
\begin{document} 
    \begin{tikzpicture} 
    \draw (0,0) rectangle (4,4); 
    \draw[
    samples=100,
    scale=1.3,domain=0.001:4,smooth,variable=\x,blue] plot ({\x},{max(0,(\x*(0.005*\x)^0.5-0.005)/((0.33*\x+(0.005*\x)^0.5)))});
    \end{tikzpicture}   
\end{document}

这将给你:

在此处输入图片描述

答案2

使用ifthenelse条件,无论有没有 ,结果都是好的fixed point arithmetic。我猜这支持@marmot对该max功能的询问。

按照@marmot 的建议,我还重新定义了该max函数,以Max(x,y)避免ifthenelse重复测试该函数。

\documentclass[11pt]{article}
    \usepackage{tikz} 
    \usepackage{fp} 
    \usetikzlibrary{fixedpointarithmetic} 
    \begin{document} 
    \tikzset{declare function={Max(\X,\Y)=ifthenelse(\X>\Y,\X,\Y);}}
    \begin{tikzpicture} 
    \draw (0,0) rectangle (4,4); 
    \draw[
            samples=100,
            fixed point arithmetic,
            scale=1.3,domain=0.001:4,
            smooth,
            variable=\x,blue] plot
                ({\x},{Max(((\x*(0.005*\x)^0.5-0.005)/((0.33*\x+(0.005*\x)^0.5))),
                                  0)});  
    \end{tikzpicture}   
    \end{document}

在此处输入图片描述

相关内容