获得函数的导数

获得函数的导数

pgfplots我想编写一个宏,它以数学函数作为参数并返回使用该函数及其导数的图。

我猜想仅使用 LaTeX 是不可能做到这一点的;但是,例如,pgfplots可以使用外部程序gnuplot来绘制函数,或者使用 LuaTeX...

那么有没有什么办法可以得到数学函数的导数来做到这一点呢?

答案1

在合理范围内(即对于不是太非线性的函数),您可以在 PGFPlots 中以数值方式区分您的函数,使用以下方法f'(x)=(f(x+dx)-f(x))/dx

\documentclass{article}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[no markers, legend pos=south east, legend entries={Original function, Analytical derivative, Numerical derivative}]
\addplot [gray] {x^3};
\addplot [line width=3pt, red!50] {3*x^2};
\addplot [black] {((x+0.01)^3-(x)^3)/0.01};
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[no markers, samples=500]
\addplot [gray] {sin(deg(x))};
\addplot [line width=3pt, red!50] {cos(deg(x))};
\addplot [black] {(sin(deg(x+0.01))-sin(deg(x)))/0.01};
\end{axis}
\end{tikzpicture}

\end{document}

答案2

要解析地导出函数,LaTeX 实际上没有配备线性代数包。相反,你可以使用同情,一个用于符号数学的 Python 库。Python 中的一个示例会话如下所示:

>>> from sympy import *
>>> x = Symbol('x')
>>> diff(sin(x), x)
cos(x)

得益于出色的pythontex软件包,它可以轻松地集成到 LaTeX 文档中。请查看例子,其中包含几个函数导数和使用 matplotlib 的绘图。不过,将输出调整为 是没有问题的pgfplots

答案3

的前 15 个推导

f(x)=1-x^2/2+x^4/24-x^6/720+x^8/40320-x^10/3628800+x^12/479001600-x^14/87178291200

在此处输入图片描述

\PassOptionsToPackage{dvipsnames,svgnames}{pstricks}
\documentclass[pstricks]{standalone}
\usepackage{pstricks-add}
\begin{document}

\psset{unit=2cm}
\def\getColor#1{\ifcase#1 Tan\or RedOrange\or magenta\or yellow\or green%
  \or Orange\or blue\or DarkOrchid\or BrickRed\or Rhodamine\or OliveGreen%
  \or Goldenrod\or Mahogany\or OrangeRed\or CarnationPink\or RoyalPurple\or Lavender\fi}
\begin{pspicture}[showgrid](-0.2,-1.2)(7,1.5)
\psclip{\psframe[linestyle=none](-0.2,-1.1)(7,1.1)}
\multido{\in=0+1}{16}{%
  \psplot[linewidth=1pt,algebraic=true,linecolor=\getColor{\in}]{0}{7}
    {Derive(\in,1-x^2/2+x^4/24-x^6/720+x^8/40320-x^10/3628800+
            x^12/479001600-x^14/87178291200)}}
\endpsclip
\end{pspicture}

\end{document}

在此处输入图片描述

前 2 个 sin(x)*cos(x)

在此处输入图片描述

答案4

这是一个PythonTeX@Jake 的答案的版本,使用pgfplots。这需要相当多的代码来尝试在 Python 和语法之间来回转换pgfplots。使用像 matplotlib 这样的 Python 绘图解决方案可能会更简单,尽管这也可能需要从 SymPy 进行一些转换。

\documentclass{article} 
\usepackage{pgfplots}
\usepackage{pythontex}

\begin{document}

\begin{sympycode}
import re
x = Symbol('x')
def deriv(tikz_args, expr):
    expr = eval(expr.replace('^', '**'))
    expr_deriv = str(diff(expr, x)).replace('**', '^')
    expr = str(expr).replace('**', '^')
    for f in ['sin', 'cos', 'tan']:
        if f in expr:
            fpattern = f + r'\((.+)\)'
            expr = re.sub(fpattern, f + r'(deg(\1))', expr)
        if f in expr_deriv:
            fpattern = f + r'\((.+)\)'
            expr_deriv = re.sub(fpattern, f + r'(deg(\1))', expr_deriv)
    func = r'\addplot [blue] {' + expr + r'};'
    func_deriv = r'\addplot [red] {' + expr_deriv + r'};'
    tikz = r'''
    \begin{tikzpicture}
    \begin{axis}[tikz_args]
    addplots
    \end{axis}
    \end{tikzpicture}'''
    tikz = tikz.replace('tikz_args', tikz_args)
    tikz = tikz.replace('addplots', '\n'.join([func, func_deriv]))
    print(tikz)
\end{sympycode}

\newcommand{\plotderiv}[2][]{\sympyc{deriv("#1", "#2")}}


\plotderiv[no markers, legend pos=south east, legend entries={Function, Derivative}]{x^3}


\plotderiv[no markers, legend pos=south east, legend entries={Function, Derivative}, samples=500]{sin(x)}


\end{document}

在此处输入图片描述

相关内容