答案1
钛钾Z 附带tikzmath
库,允许人们递归定义函数。只需将其输入即可。在我的回答中,它使用了Christian Feuersänger 的精彩回答(顺便说一句,效果非常好),我使用了两种声明函数的方法:一种是 Christian 也使用的方法(尽管语法略有不同)用于定义N_{i1}=\chi
,另一种是使用tikzmath
。第二种方法允许递归定义函数。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usetikzlibrary{math} % tikzmath, see p. 640 of the pgfmanual.
\begin{document}
% based on https://tex.stackexchange.com/a/307032/121799
\def\tvalues{{0,1,3,4,6,9,10}}
\begin{tikzpicture}[evaluate={
function myN(\i, \k, \t) {
if \k == 1 then {
return chi(\t,\i);
} else {
return myN(\i, \k-1, \t)*(\t-\tvalues[\i])/(\tvalues[\i+\k-1]-\tvalues[\i])
+myN(\i+1, \k-1, \t)*(\tvalues[\i+\k]-\t)/(\tvalues[\i+\k]-\tvalues[\i+1]);
};
};
},
declare function={chi(\t,\i)=and(\t >= \tvalues[\i] ,\t <=\tvalues[\i+1]);}]
\begin{axis}[samples=101,
use fpu=false,
xlabel=$x$,ylabel=$y$,
ymax=2, ymin=0, xmin=0, xmax=10,
domain=0:10,
]
\addplot [mark=none] {myN(2,1,x)};
\addplot [mark=none,blue] {myN(2,2,x)};
\addplot [mark=none,red] {myN(2,3,x)};
\end{axis}
\end{tikzpicture}
\end{document}
这也允许人们制作类似于您的屏幕截图的情节。
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usetikzlibrary{math} % tikzmath, see p. 640 of the pgfmanual.
\begin{document}
% based on https://tex.stackexchange.com/a/307032/121799
\def\tvalues{{-1,0,1,3,4,6,9,10,11,12,13}}
\tikzset{evaluate={
function myN(\i, \k, \t) {
if \k == 1 then {
return chi(\t,\i);
} else {
return myN(\i, \k-1, \t)*(\t-\tvalues[\i])/(\tvalues[\i+\k-1]-\tvalues[\i])
+myN(\i+1, \k-1, \t)*(\tvalues[\i+\k]-\t)/(\tvalues[\i+\k]-\tvalues[\i+1]);
};
};
},
declare function={chi(\t,\i)=and(\t >= \tvalues[\i] ,\t <=\tvalues[\i+1]);}}
\begin{tikzpicture}
\begin{axis}[samples=101,
use fpu=false,mark=none,
xlabel=$x$,ylabel=$y$,
ymax=pi/2, ymin=0, xmin=0, xmax=10,
domain=0:10,
]
\addplot [mark=none] {myN(2,3,x)} node[pos=0.35,above] {$N_{23}$};
\addplot+ [mark=none] {myN(3,3,x)} node[pos=0.51,above] {$N_{33}$};
\addplot+ [mark=none] {myN(4,3,x)} node[pos=0.75,above] {$N_{43}$};
\end{axis}
\end{tikzpicture}
\end{document}
顺便说一句,我认为你的问题从原则上来说相当不错。阻止我投票的原因是缺乏自己的尝试,以及对 Chritian Feuersänger 的好答案的令人恼火的声明。不过,如果你纠正了这个问题,我会考虑投票。