关于 pgfplot 分段语法的问题?

关于 pgfplot 分段语法的问题?

piece函数定义如下: 在此处输入图片描述

以下是代码片段:

\pgfmathdeclarefunction{func}{1}{%
  \pgfmathparse{%
    (and(#1>=0 , #1<=500)   * (300 + #1*(12/10))   +%
    (and(#1>500, #1<=1000)  *  (600 + #1*(12/10))    %
   }%
}

后面的星号“*”到底起什么作用(and..?末尾的“+”号。我重用了我在本网站找到的一些示例,但语法不太直观。有人能解释一下这个语法吗?提前谢谢。

编辑(添加完整示例)

\documentclass[10pt,letterpaper]{article}

\usepackage[left=1in,right=1in,top=1in,bottom=1in]{geometry} 
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{polynomial}
\usepackage{layouts}
\usepackage{enumerate}
\usepackage{syntax}
\usepackage{gensymb}
\usepackage{cancel}
\usepackage{calc}
\usepackage{xcolor}

\usepackage[version=0.96]{pgf}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,automata,backgrounds,petri,positioning}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.shapes}
\usetikzlibrary{decorations.text}
\usetikzlibrary{decorations.fractals}
\usetikzlibrary{decorations.footprints}
\usetikzlibrary{shadows}
\usetikzlibrary{calc}
\usetikzlibrary{spy}
\usetikzlibrary{matrix}

\usepackage{tikz-qtree}
\usepackage{pgfplots}

\begin{document}
\pgfmathdeclarefunction{func}{1}{%
  \pgfmathparse{%
    (and(#1>=0    ,#1<=500)  * (300 + #1*(12/10))   +%
    (and(#1>=500  ,#1<=1000) * (600 + #1*(12/10))   %
   }%
}

\begin{tikzpicture}[scale=0.8]
    \begin{axis}
        [title={$C(x)$},
            ylabel=$y$,
            xlabel=$x$,
            grid=both,
            minor xtick={0,100,...,1000},
            xtick={0,200,...,1000},
            ytick={0,400,...,3200}]

        \addplot[blue,domain=0:1000]{func(x)};
    \end{axis}
\end{tikzpicture}   
\end{document}

答案1

这是简单的数学。:) 但人们应该知道

and(<condition1>,<condition2>)

当两个条件都为真时返回 1,当至少一个条件为假时返回 0。因此,当计算150pgf的值时,它确实func

(and(150>=0 , 150<=500) * (300 + 150*(12/10)) + (and(150>500, 150<=1000) * (600 + 150*(12/10))

变成

1 * (300 + 150*(12/10)) + 0 * (600 + 150*(12/10))

那是,

(300 + 150*(12/10))

当它在 725 处评估时,情况同样适用,但结果是

0 * (300 + 725*(12/10)) + 1 * (600 + 725*(12/10))

那是,

(600 + 725*(12/10))

在两种情况下,该值都是所请求的。

如果您想要一个在不连续处有实际步骤的图形,则需要更正输入:

\begin{tikzpicture}[scale=0.8]
\begin{axis}
  [title={$C(x)$},
   ylabel=$y$,
   xlabel=$x$,
   grid=both,
   minor xtick={0,100,...,1000},
   xtick={0,200,...,1000},
   ytick={0,400,...,3200},
   samples=1000]
  \addplot[blue,domain=0:1000]{func(x)};
\end{axis}
\end{tikzpicture}

但计算时间会更长。函数定义也应该改变:

\pgfmathdeclarefunction{func}{1}{%
  \pgfmathparse{%
    (and(#1>=0  , #1<500)   * (300 + #1*(12/10)) +
    (and(#1>=500 , #1<=1000) * (600 + #1*(12/10))
  }%
}

这样正确的值就是 500(您决定应该=去哪里)。

在此处输入图片描述

相关内容