
これをプロットしたい
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\pgfplotsset{compat=newest}% <- set a compat!! (current version is 1.14)
%%%%%%%
\pgfkeys{/pgf/declare function={argsinh(\x) = ln(\x + sqrt(\x^2+1));}}
\pgfkeys{/pgf/declare function={argcosh(\x) = ln(x + sqrt(-1 + x)*sqrt(1 + x));}}
%%%%%%
\begin{document}
\begin{tikzpicture}
\begin{axis}[
cycle list name= color list,
tick align=center,
axis lines = left,
xmin = 0,
xmax = 2,
ymin = 0,
ymax = 1.1,
ylabel = {$\mathopen|H(j\Omega)\mathclose|$},
xtick = {1,1.2},
xticklabels = {1, $\Omega_s$},
ytick = {0,0.1, 0.5, 1},
yticklabels = {0, $\frac{1}{1+\varepsilon^2/k_1^2}$,$\frac{1}{1+\varepsilon^2}$,1},
]
\foreach \n in {5,6} {
\addplot+[domain=0:1,samples=201]{1/(1+1^2*(cos(\n*(acos(\x))))^(2))};
\addplot+[domain=1:2,samples=201]{1/(1+1^2*(cosh(\n*(argcosh(\x))))^(2))};
}
\addplot[black,dotted] coordinates {
(1.2,1)
(1.2,.1)
(2,.1)
};
\addplot[black,dotted] coordinates {
(0,.5)
(1,.5)
(1,0)
};
\end{axis}
\end{tikzpicture}
\end{document}
しかし、私はこれらの4色を避け、両方に2色だけを使用する必要があります。その後、新しい単一の区分関数を定義することでそれが可能であることに気付きました。
%%%%%%
\begin{tikzpicture}[
\declare function={
chebyshev(\x)= (\x<=1) * (1/(1+1^2*(cos(\n*(acos(\x))))^(2)))+
and(\x>1) * (1/(1+1^2*(cosh(\n*(argcosh(\x))))^(2)));
}]
%%%%%% ...
\foreach \n in {5,6} {
\addplot+[domain=0:2,samples=400]{chebyshev(\x)};
}
しかし、毎回エラーが発生し、どこに問題があるのか全くわかりません。助けてもらえますか?
答え1
問題は、acos(x)
が に対してのみ定義されておりx \in [0,1]
、 に対してプロットしようとしていることx \in [0,2]
です。最も簡単な方法は、 の 2 つの関数バリアントを使用し、カラー インデックスを 1 つ戻してから、 を使用して 2 番目をプロットすることです\pgfplotsset{cycle list shift=-1}
。
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\pgfplotsset{compat=newest}% <- set a compat!! (current version is 1.14)
%%%%%%%
\pgfkeys{/pgf/declare function={argsinh(\x) = ln(\x + sqrt(\x^2+1));}}
\pgfkeys{/pgf/declare function={argcosh(\x) = ln(x + sqrt(-1 + x)*sqrt(1 + x));}}
%%%%%%
\begin{document}
\begin{tikzpicture}
\begin{axis}[
cycle list name= color list,
tick align=center,
axis lines = left,
xmin = 0,
xmax = 2,
ymin = 0,
ymax = 1.1,
ylabel = {$\mathopen|H(j\Omega)\mathclose|$},
xtick = {1,1.2},
xticklabels = {1, $\Omega_s$},
ytick = {0,0.1, 0.5, 1},
yticklabels = {0, $\frac{1}{1+\varepsilon^2/k_1^2}$,$\frac{1}{1+\varepsilon^2}$,1},
]
\foreach \n in {5,6} {
\addplot+[domain=0:1,samples=201]{1/(1+1^2*(cos(\n*(acos(\x))))^(2))};
\pgfplotsset{cycle list shift=-1}
\addplot+[domain=1:2,samples=201]{1/(1+1^2*(cosh(\n*(argcosh(\x))))^(2))};
}
\addplot[black,dotted] coordinates {
(1.2,1)
(1.2,.1)
(2,.1)
};
\addplot[black,dotted] coordinates {
(0,.5)
(1,.5)
(1,0)
};
\end{axis}
\end{tikzpicture}
\end{document}