我是一名新手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}