我需要绘制非线性函数图。为了熟悉的“声明函数”功能pgf-tikz
,我尝试了以下代码:
\documentclass[10pt]{article}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}[scale=2.0,
declare function={
func(\x,\a) = 1.0/(\x^\a);
}]
% draw grid
\draw[very thin,color=gray] (0.0,0.0) grid (2.0,2.0);
% draw axes
\draw[->] (0.0,0.0) -- (2.0,0.0) node[right] {$x$};
\draw[->] (0.0,0.0) -- (0.0,2.0) node[above] {$y$};
% draw functions
\draw[blue] plot[domain=0.5:2.0,samples=100] (\x,{func(\x,1.0)});
\draw[red] plot[domain=0.8:2.0,samples=100] (\x,{func(\x,2.0)});
\draw[green] plot[domain=0.5:2.0,samples=100] (\x,{func(\x,0.5)});
\end{tikzpicture}
\end{document}
因此,我希望看到三行分别对应于1/x
、1/x^2
和1/sqrt(x)
。最后一个函数调用没有给出正确的函数。由于我是 数学功能的新手pgf-tikz
,我怀疑我做错了什么,或者我忽略了什么。我很乐意得到一些指点
帮助我解决这个问题;并且
获得一些关于如何最好/更好地解决这个问题的建议。
我需要绘制的函数将会更加复杂,但也会更加平滑并且在某些极限下趋近1/x
。
答案1
TikZ
解决方案:
我认为使用具有幂型函数的内部数学引擎存在一些限制(但由于某种原因,可以很好地工作,pgfplots
如下面的解决方案所示),但如果您将定义从更改为func(\x,\a) = 1.0/(\x^\a)
:
func(\t,\a) = 1.0/(exp((\a)*ln(\t)));
您将获得(并且还添加了very thick
选项\draw
):
##Pgfplots
解决方案:
不过,我建议你使用pgfplots
来绘图。根据一致地指定一个函数并将其用于计算和绘图,我建议您使用那里建议的方法来定义该函数:
\def\func(#1,#2){1.0/((#1)^(#2))}
此方法允许您将此定义用于:
- 计算值:
定义分段函数如下为 PGFplots 定义分段函数,
计算各个点的值,如下这个例子我根据 x 值标记一个特定点
可以像其他内置数学函数一样使用它,并定义翻译,如下所示绿色曲线
- 使用 pgfplot 绘图
- 使用 pgfplots/gnuplot 绘图
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\def\func(#1,#2){1.0/((#1)^(#2))}%
\begin{document}
\begin{tikzpicture}
\begin{axis}[
domain=0.5:2.0, samples=100,
every axis plot post/.style= ultra thick]
\addplot [blue] {\func(x,1.0)};%
\addplot [red] {\func(x,2.0)};%
\addplot [green]{\func(x,0.5)};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
exp
这是中的函数的一个问题TikZ
,它在 CVS 版本中已得到解决。或者,您可以使用 Jake 在此处提供的代码:绘制指数图是 TikZ 中已知的错误来源吗?在序言中解决这个问题。