我想用 tikz 绘制多项式近似值。不幸的是,当我使用 5 阶多项式近似值时,tikz 无法计算结果。这是一个例子:
\draw[domain=1:10] plot (\x, {\x^5*(-0.0011577) + \x^4*(0.037895) + \x^3*(-0.48193) + \x^2*(2.9977) + \x^1*(-9.4071) + \x^0*(13.951)});
结果是一个异常Dimensions too large
。我知道这是因为 10^5 超过了\maxdimen
。但这不是大小问题,因为经过计算,这个数字大约是 7。是否有可能以\maxdimen
某种方式处理大于的数字,或者有什么解决方法?我真的很想在 tikz 中做到这一点,以避免使用像素图形(放大时看起来更漂亮)。
答案1
tikz
这是仅使用(和库)获得的结果math
。通过以不同的方式计算多项式,避免了大乘法的问题。请参阅dfiveP
代码中的函数;这是评估多项式的算法方法。但即便如此,结果也不是很好,因为值(在计算过程中)对于 来说太小了tikz
!下图显示了 的图形dfiveP
。
第一个图是bdfiveP
计算同一个多项式,但变量 x=10*t 发生变化后得到的。现在,作为 t 中的多项式,系数将更大,从而产生更准确的结果。
由于函数正在减少,您可以进一步研究域......
代码
\documentclass[11pt, margin=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{math}
\begin{document}
\tikzmath{
\a{0} = -0.0011577;
\a{1} = 0.037895;
\a{2} = -0.48193;
\a{3} = 2.9977;
\a{4} = -9.4071;
\a{5} = 13.951;
function dfiveP(\t) {
real \s;
\s = \a{0};
int \i;
for \i in {1, ..., 5}{
\s = \s*\t +\a{\i};
};
return \s;
};
\b{0} = -115.77;
\b{1} = 378.95;
\b{2} = -481.93;
\b{3} = 299.77;
\b{4} = -94.071;
\b{5} = 13.951;
function bdfiveP(\t) {
real \s;
\s = \b{0};
int \i;
for \i in {1, ..., 5}{
\s = \s*\t +\b{\i};
};
return \s;
};
}
\begin{tikzpicture}[xscale=10]
\draw[->] (-.1, 0) -- (1.1, 0) node[below right] {$x$};
\draw[->] (0, -1) -- (0, 8) node[left] {$y$};
\draw[blue!70!black, thick, domain=.1:1, samples=200] plot (\x, {bdfiveP(\x)});
\end{tikzpicture}
% \begin{tikzpicture}
% \draw[gray!40, very thin] (-.5, -.5) grid (10.5, 7.5);
% \draw[->] (-1, 0) -- (11, 0) node[above right] {$x$};
% \draw[->] (0, -1) -- (0, 8) node[left] {$y$};
% \draw[blue, thick, domain=1:10, samples=100] plot (\x, {dfiveP(\x)});
% \end{tikzpicture}
\end{document}