tikz 路径的衍生物?

tikz 路径的衍生物?

我想绘制平滑且具有线性段的曲线。这些曲线将用于一维函数 x(t) 的图形中。[在编写入门物理家庭作业问题时用作位置与时间图。] 示例:

在此处输入图片描述

我想通过指定曲线经过具有特定切线的特定点来绘制这些图。这个问题很好地实现了我到目前为止所描述的内容实现语法:具有指定点和切线的平滑曲线

但是,我的目标是在一维函数 x(t) 的图中使用这些曲线,并且非常希望能够从它们生成导数 x'(t) 的曲线。这在 内可行吗tikz

(我用 制作了上面的示例图pgfplots。该函数是我在 Mathematica 中构建的分段函数。这种方法对我来说肯定有效,但过程有点麻烦。我计划使用类似于此的图表来解决足够多的问题,我真的想要一些更有效的方法。代码如下。)

代码

\pgfmathdeclarefunction{MyF}{1}{% 
  \pgfmathparse{% 
     (and (1 , #1<=5)*(3.-0.5*#1-2.24667*#1^2+2.93766*#1^3-1.55322*#1^4+0.413019*#1^5-0.0534444*#1^6+0.00265741*#1^7))   +%
     (and (5<#1 , #1<7)*(4))     +%
     (and (7<=#1 , #1<12)*(131.4-156.613*#1+54.0096*#1^2-7.99267*#1^3+0.538*#1^4-0.0135556*#1^5))    +%
     (and (12<=#1 , 1)*(1))  %
  }%
}

\begin{tikzpicture}
\begin{axis}[axis lines = middle,minor tick num = 1, grid = both, xlabel = {$t$\,(\si{s})}, ylabel = {$x$\,(\si{m})}, no markers, smooth,xmin=0, xmax=14, ymin=-6, ymax=6, samples = 100, thick, unit vector ratio = 1]
\addplot +[very thick, domain=0:14] {MyF(x)};
\end{axis}
\end{tikzpicture}

更新 以下两个答案都是通过为原始曲线构建一个明确的数学函数,然后对其求导数来绘制导数。

我非常想避免为原始曲线构建明确的数学表达式,因为对于像上面这样的图,我发现表达式很难生成,也不自然。我更愿意通过中概述的方法生成原始曲线实现语法:具有指定点和切线的平滑曲线或类似的东西。

我的问题是:如果没有曲线的明确数学表达式,是否可以在 LaTeX 中(可能通过tikz)绘制导数。

例如,给定一条路径

\draw (0,0) .. controls (1,1) and (1,1) .. (2,0);

你能画出它的导数吗?(将我们的注意力限制在作为 x 的单值函数的路径 y(x) 上)。

答案1

最简单的办法就是伪造衍生品;

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
\pgfmathdeclarefunction{MyF}{1}{% 
  \pgfmathparse{% 
     (and (1 , #1<=5)*(3.-0.5*#1-2.24667*#1^2+2.93766*#1^3-1.55322*#1^4+0.413019*#1^5-0.0534444*#1^6+0.00265741*#1^7))   +%
     (and (5<#1 , #1<7)*(4))     +%
     (and (7<=#1 , #1<12)*(131.4-156.613*#1+54.0096*#1^2-7.99267*#1^3+0.538*#1^4-0.0135556*#1^5))    +%
     (and (12<=#1 , 1)*(1))  %
  }%
}
\pgfmathdeclarefunction{MyFd}{2}{% 
  \pgfmathparse{(MyF(x+#2)-MyF(x))/#2}%
}


\begin{tikzpicture}
\begin{axis}[axis lines = middle,minor tick num = 1, grid = both, xlabel = {$t$\,(\si{s})}, ylabel = {$x$\,(\si{m})}, no markers, smooth,xmin=0, xmax=14, ymin=-6, ymax=6, samples = 100, thick, unit vector ratio = 1]
\addplot +[very thick, domain=0:14] {MyF(x)};
\addplot +[very thick, domain=0:14] {MyFd(x,14/100)};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

TikZ 路径的修饰。它相对准确,但当然,它依赖于函数的合理输入,弯道不会太陡。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations,fpu}
\pgfdeclaredecoration{approxderiv}{initial}{%
\state{initial}[width=0.01mm,
                persistent postcomputation={%
                    \def\tempa{0}%
                    \pgfmathsetmacro{\plen}{(\pgfdecoratedpathlength-0.01mm)/500}%
                    \def\myderivlist{}%
                },next state=walkthecurve]{}%do nothing
\state{walkthecurve}[width=\plen pt,
               persistent postcomputation={%
                  \pgfmathparse{(sin(\pgfdecoratedangle))}\xdef\tempb{\pgfmathresult}%
                  \pgfmathparse{abs(cos(\pgfdecoratedangle))*\plen}%
                  \expandafter\xdef\expandafter\myderivlist\expandafter{%
                     \myderivlist --++ ({\pgfmathresult pt},{(\tempb-\tempa)*(1cm)})%It was cm initially afterall
                    }%
                  \xdef\tempa{\tempb}%
               }
            ]{}%do nothing
}
\begin{document}
\begin{tikzpicture}
\draw[style=help lines] (0,-3.5) grid[step=5mm] (6,3.5);
\draw[decoration=approxderiv,postaction=decorate] 
(0,0) .. controls (1,1) and (1,1) .. (2,0) arc (-90:-20:1 and 3) arc (160:120:1.5 and 1) 
-- ++(-70:6) node[pos=0.2,align=center] {slope\\\pgfmathparse{sin(-70)}\pgfmathresult};
\draw[red] (0,0) \myderivlist;
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

\documentclass[pstricks,border=15pt,12pt,dvipsnames]{standalone}
\usepackage{pstricks-add}

\psset
{
    algebraic,
    linejoin=2,
    plotpoints=1000,
    xAxisLabel=$t$,
    yAxisLabel=$s(t)$,
    urx=15pt,
    ury=15pt,
    llx=-5pt,
    lly=-5pt,
}

\def\f{IfTE(x<0,-x^2,IfTE(x<2,x,IfTE(x<3,2*x+1,x^2/2)))}

\begin{document}
\pslegend[lt]{%
    \color{NavyBlue}\rule{20pt}{2pt} & \color{NavyBlue} $s(t)$\\
    \color{Red}\rule{20pt}{2pt} & \color{Red} $v(t)$
}
\begin{psgraph}{<->}(0,0)(-3,-4)(5,9){12cm}{!}
    \psset{linewidth=2pt}
    \psplot[linecolor=NavyBlue]{-2}{4}{\f}
    \psplot[linecolor=Red]{-2}{4}{Derive(1,\f)}
\end{psgraph}
\end{document}

在此处输入图片描述

笔记

请记住,垂直线不能被视为图表的一部分。

相关内容