使用 tikz/pstrick 等创建某些函数的蛛网图

使用 tikz/pstrick 等创建某些函数的蛛网图

我想用 tikz(如果可能的话 - 但在网上读到 tikz 可以做的所有事情,我相信它是可行的) - 或者 pstricks 或其他一些绘图程序 - 绘制一些相当简单的函数的蛛网图。为了说明我的想法,请参阅以下图片网站。我的问题是,我解决这个问题的方法完全是错误的:我在 GeoGebra 中制作了所有的蛛网图,因为从那里我可以将它们导出到 tikz/pstricks - 但这样做之后我意识到这样做效果不太好:从 GeoGebra 图到 tikz/pstricks 的转换经常会出现小故障。

所以现在我所做的所有工作都是徒劳的 - 而且最重要的是我甚至不懂得如何仅通过代码来实现这一点。所以你能给我举个例子说明如何编写一个函数的蛛网图(为了简单起见,我们取 x^2),然后我可以将其应用于我的其他函数吗?它应该有两个参数:一个参数,我可以告诉它在函数的哪个点,从那个点开始它应该进行多少次迭代。

答案1

我不确定是否理解了这个问题。你想要一些动态的东西或类似的东西:(我有另一个带有 fp 的版本,并且可以将 gnuplot 与 tikz 一起使用) 更新我清理代码

\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz,fullpage}
\usetikzlibrary{arrows}
\begin{document}
  \thispagestyle{empty}
\begin{figure}[htbp]
\centering
\newcounter{j}
\begin{tikzpicture}[scale=10,>=latex']  
    \draw[color=blue,samples at={0,0.01,...,1.07}] plot (\x,{cos(\x r)});  
    \draw[color=green](0,0)--(1,1);
    \draw[->](0,0)--(0,1) node[above]{$y$};
    \draw[->](0,0)--(1,0) node[right]{$x$};
    \newcommand{\x}{.2}
    \foreach \i in {1,...,7}{%
       \pgfmathcos{\x r}
       \let\y\pgfmathresult
       \draw[color=magenta](\x,\x)--(\x,\y)--(\y,\y);
       \draw[color=orange,dotted,line width=0.8pt]%
            (\x,\x)--(\x,0) node[below=8pt]{$u_\i$};
       \pgfmathsetcounter{j}{\i+1}
       \draw[color=blue,dotted,line width=0.8pt]%
            (\x,\y)--(0,\y) node[left=8pt] {$u_\thej$};
       \global\let\x\y}
\end{tikzpicture}
\caption{$f(x)=\cos (x)$}
\end{figure}
\end{document} 

在此处输入图片描述

分段

我更新了我的解决方案,因为我发现了一个大问题pgfmathdeclarefunction。问题很简单:语法错误:

   \pgfmathdeclarefunction{p}{1}{%   % I keep blank spaces between the brace and  % 
   \pgfmathparse{#1>0.5 ? 1 : 2*#1 }}

我找到了另一个解决方案, declare function但经过修正后代码就可以了pgfmathdeclarefunction

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\thispagestyle{empty}
\begin{figure}[htbp]
\centering
\newcounter{j} 

\begin{tikzpicture}[>=latex',scale=10,
     declare function={%
         p(\t)=  greater(\t,0.5)  ? 1 :  2* \t ;}]  
    \draw[color=blue,domain=0:1.2] plot (\x,{p(\x)});    
    \draw[color=green](0,0)--(1.2,1.2);
    \draw[->](0,0)--(0,1) node[above]{$y$};
    \draw[->](0,0)--(1,0) node[right]{$x$};
    \newcommand{\x}{.1}
    \foreach \i in {1,...,4}{%
       \pgfmathparse{(p(\x)}
       \let\y\pgfmathresult
       \draw[color=magenta](\x,\x)--(\x,\y)--(\y,\y);
       \draw[color=orange,dotted,line width=0.8pt]%
            (\x,\x)--(\x,0) node[below=8pt]{$u_\i$};
       \pgfmathsetcounter{j}{\i+1}
       \draw[color=blue,dotted,line width=0.8pt]%
            (\x,\y)--(0,\y) node[left=8pt] {$u_\thej$};
       \global\let\x\y}    
\end{tikzpicture}
\caption{if $x\leq 1$ then $ f(x)= 2x$ else $ f(x)= 1$}
\end{figure} 
\end{document} 

答案2

尝试研究 Sage,特别是 Sage Interact 教具。有人发布了一个蜘蛛网示例这里。它允许您输入所需的函数、选择迭代等等。我修改了上面链接上的代码,以便它输出到 PDF 文件。

def cobweb(a_function, start, mask = 0, iterations = 20, xmin = 0, xmax = 1):
'''
    Returns a graphics object of a plot of the function and a cobweb trajectory starting from the value start.

    INPUT:
        a_function: a function of one variable
        start: the starting value of the iteration
        mask: (optional) the number of initial iterates to ignore
        iterations: (optional) the number of iterations to draw, following the masked iterations
        xmin: (optional) the lower end of the plotted interval
        xmax: (optional) the upper end of the plotted interval

    EXAMPLES:
        sage: f = lambda x: 3.9*x*(1-x)
        sage: show(cobweb(f,.01,iterations=200), xmin = 0, xmax = 1, ymin=0)

    '''
    basic_plot = plot(a_function, xmin = xmin, xmax = xmax)
    id_plot = plot(lambda x: x, xmin = xmin, xmax = xmax)
    iter_list = []
    current = start
    for i in range(mask):
        current = a_function(current)
    for i in range(iterations):
        iter_list.append([current,a_function(current)])
        current = a_function(current)
        iter_list.append([current,current])
    cobweb = line(iter_list, rgbcolor = (1,0,0))
    return basic_plot + id_plot + cobweb
var('x')
@interact
def cobwebber(f_text = input_box(default = "3.8*x*(1-x)",label = "function",   type=str), start_val = slider(0,1,.01,.5,label = 'start value'), its = slider([2^i for i in range(0,12)],default = 16, label="iterations")):
    C = Graphics()
    def f(x):
        return eval(f_text)
    C = cobweb(f, start_val, iterations = its)
    C.show()
    C.save("Cobweb.pdf")

您可以免费注册 Sage 账户这里。将代码复制并粘贴到单元格中,同时按下 Shift-Enter 键,您的操作就创建好了。您可以尝试(交互)这些参数,直到得到您想要的图表。运行代码的输出如下:在此处输入图片描述

使用操作工具来创建图形将大大加快创建蛛网图的进程。

相关内容