pgf-tikz 的“声明函数”问题

pgf-tikz 的“声明函数”问题

我需要绘制非线性函数图。为了熟悉的“声明函数”功能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/x1/x^21/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))}

此方法允许您将此定义用于:

  1. 计算值:
  1. 使用 pgfplot 绘图
  2. 使用 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 中已知的错误来源吗?在序言中解决这个问题。

相关内容