函数组合问题的 Pgfplots

函数组合问题的 Pgfplots

我是一名新手pgfplots

这是我想要绘制函数的代码$\sin(2x-5/3)$

问题是的绘图$c(a(x))$不起作用。我尝试了不同的组合函数,但都一样。此外,绘图是直线。

重新编译的结果

\usepackage{amsmath}
\usepackage{pgfplots}
\usepackage{tkz-fct}
\pgfplotsset{compat = newest}
\pgfmathdeclarefunction{a}{1}{\pgfmathparse{(2*x-5/3)}}
\pgfmathdeclarefunction{c}{1}{\pgfmathparse{(sin(x))}}

\begin{document}
\begin{tikzpicture}
                \begin{axis}[
                    axis lines = middle,
                    xmin=-10,
                    xmax=10,
                    every axis x label/.style={at={(current axis.right of origin)},anchor=west},
                    width = 0.8\textwidth,
                    height = 0.8\textwidth,
                    xlabel = {$x$},
                    ylabel = {$f(x)$},]
                    \addplot[
                    samples=200, 
                    smooth,
                    color=blue,
                    ]{c(x)};
                    \addplot[
                    samples=200, 
                    smooth,
                    color=red,
                    ]{c(a(x))};
                \end{axis}
\end{tikzpicture}
\end{document}

答案1

首先,pgf三角函数假设输入为度,我猜你想输入的是弧度。因此,你需要将输入转换为sin度,例如使用sin(deg(x))

其次,当使用时\pgfmathdeclarefunction,函数的输入不是由x函数定义中的表示,而是由#1第一个参数、#2第二个参数(如果有的话)等表示。

这意味着您的函数需要像这样声明:

\pgfmathdeclarefunction{a}{1}{\pgfmathparse{2*#1-5/3}}
\pgfmathdeclarefunction{c}{1}{\pgfmathparse{sin(deg(#1))}}

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{amsmath}
\usepackage{pgfplots}
\pgfplotsset{compat = newest}
\pgfmathdeclarefunction{a}{1}{\pgfmathparse{2*#1-5/3}}
\pgfmathdeclarefunction{c}{1}{\pgfmathparse{sin(deg(#1))}}

% alternative method for declaring functions
%\tikzset{
%  declare function={
%    a(\x) = 2*\x - 5/3;
%    c(\x) = sin(deg(\x));
%  }
%}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        axis lines = middle,
        xmin=-10,
        xmax=10,
        every axis x label/.style={
           at={(current axis.right of origin)},
           anchor=west
        },
        width = 0.8\textwidth,
        height = 0.8\textwidth,
        xlabel = {$x$},
        ylabel = {$f(x)$}
        ]
        
        \addplot[
           samples=200, 
           smooth,
           color=blue,
           ] {c(x)};
        
        \addplot[
           samples=200, 
           smooth,
           color=red,
           ] {c(a(x))};
     \end{axis}
\end{tikzpicture}
\end{document}

相关内容