PGFplots Tikz 绘制不同域中的两个或多个添加表达式

PGFplots Tikz 绘制不同域中的两个或多个添加表达式

基本上我想使用 PGFplots/tikzs 来绘制两个表达式的总和,但第一个表达式(我们将其命名为f(x))在内指定0<=x<=1000,第二个表达式(我们将其命名为g(x))应仅在内指定,100<=x<=200但不幸的是在 之外的区域不等于零100<=x<=200。我只想添加这两个函数并使用单个命令在完整域 内(f(x)+g(x))绘制结果,之外为零。\addplot0<=x<=1000g(x)100<=x<=200

您是否知道一种灵活而简单的方法,可以通过单个命令实现所需的行为\addplot[...][domain=0:1000]{...},因为我找到的唯一解决方案(但有点不喜欢 - 因为它迫使我绘制三个不同的函数)是绘制

1. \addplot ... f(domain: 0<=x<100)
2. \addplot ... f(domain: 200<x<=1000)
3. \addplot ... f+g(domain: 100<=x<=200)

作为一种解决方法。

附言:我想避免涉及 gnuplot 或必须将数据存储在文件中或类似的东西中的解决方案...我更喜欢有一个可以在序言中使用以下包/库的解决方案,\usepackage{tikz,pgfplots,grffile,amsmath}\usetikzlibrary{fpu}可以随意发布最简单的解决方案。

我希望您不介意我没有包含任何 MWE,并且我在描述中提供的语法实际上不是“完全有效的语法”,而只是提供理解我的问题的关键的某种符号摘录。

答案1

您可以在数学表达式中执行 pgfmath if then else。

\documentclass{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
\begin{axis}
% Cancel f(x) until 2 then after 4 shift it with 40
\addplot+[no marks,domain=0:6,samples=301] { -x^2 + ( x<2 ? x+x^2 : ( x>4 ? 40 : 0) ) };
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

您可以使用布尔乘数截断您的函数。

输出

在此处输入图片描述

代码

\documentclass[12pt,tikz,border=0pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\def\omeg{.1}
\def\A{1}
\begin{tikzpicture}
  [
    declare function=
    {
      f(\x) = 1/\omeg * (1.5+sin( .1 * \omeg * deg(\x)));
      g(\x) = (100<=\x) * (\x<=200) * \A/\omeg * (1+sin(\omeg*deg(\x)));
    }
  ]
  \begin{axis}
    [
      %{{{
      domain = 0:1000,
      samples = 201,
      axis lines = center,
      %}}}
    ]

    \addplot+[mark=none] {f(x)};
    \addplot+[mark=none, domain=100:200] {g(x)};
    \addplot+[mark=none] {f(x) + g(x)};

  \end{axis}
\end{tikzpicture}
\end{document}

相关内容