在尝试绘制 3^x 和 x^3 的交点时,我缩小了域以正确显示其中一个交点。但是,一旦我缩小了域,我就会得到尺寸太大, 或者TeX 容量超出。
此外,似乎至少有 6 个交叉点(但实际上应该只有一个),与手动确定交叉点相比,交叉点似乎位于错误的位置。这只是一个四舍五入问题吗?
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{intersections}
\begin{document}
%% Uncommenting these two results in TeX Capacity exceeded
%\newcommand*{\XAxisMin}{2.47805}%
%\newcommand*{\XAxisMax}{2.47810}%
% These two settings produce a graph
\providecommand*{\XAxisMin}{2.47500}%
\providecommand*{\XAxisMax}{2.48000}%
\pgfmathdeclarefunction{GivenF}{1}{\pgfmathparse{(#1)^(3)}}
\pgfmathdeclarefunction{GivenG}{1}{\pgfmathparse{(3)^(#1)}}
\newcommand*{\ShowIntersection}[3]{
\fill
[name intersections={of=#1 and #2, name=i, total=\t}]
[brown, opacity=1, every node/.style={black, opacity=1}]
\foreach \s in {1,...,\t}{(i-\s) circle (3pt)
node [above left, blue] {#3}};
}
\begin{tikzpicture}
\begin{axis}[xmin=\XAxisMin, xmax=\XAxisMax, ymin=15.16, ymax=15.26]
\addplot[domain=\XAxisMin:\XAxisMax, samples=400,
smooth,ultra thick,blue,name path global=GraphF]
{GivenF(x)} node [below left, xshift=-1.0em] {$y=x^3$};
\addplot[domain=\XAxisMax:\XAxisMin, samples=400,
smooth,ultra thick,red,name path global=GraphG]
{GivenG(x)} node [above right, yshift=5.0ex] {$y=3^x$};
% Manually mark where I think the intersection should be
\addplot [mark=*] coordinates{(2.478053,15.2171)}%
node [left] {$(2.478053,15.2171)$};%
% Results in at least 6 intersection points
\ShowIntersection{GraphF}{GraphG}{$(2.478053,15.2171)$}
\end{axis}
\end{tikzpicture}
\end{document}
来自\ShowIntersections
PGFplot 中的交叉点。
答案1
回答你一半的问题:数学错误似乎是由于函数pgf
实现中的近似值造成的ln
:
\pgfmathparse{3^2.478053}\pgfmathresult
给出的是 15.2156,而不是 15.2171。因此,最好使用plot gnuplot
,或 在您最喜欢的数学软件中生成数值表,然后plot file
或plot table
。
如果我使用,“超出容量”错误就会消失,并且我会得到正确的交集,plot gnuplot
但我不知道是什么原因导致了它......