Как построить числовую прямую в TikZ, используя заданную формулу для последовательности?

Как построить числовую прямую в TikZ, используя заданную формулу для последовательности?

Я хочу нарисовать числовую прямую в [0,1] так, чтобы узлы были размещены в числах, определенных правилом Байеса (или любой конкретной функцией). Так, для начального значения x' (указанного мной), я хочу, чтобы программа размещала узлы в каждом последующем узле x, где x= x'/((1+x')*0.5) и так далее до максимального значения x, равного 1. Вот MWE, которое я разработал из другого похожего поста:

\begin{tikzpicture}
\begin{axis}[
        axis x line=middle,
        axis y line=none,
        width=\textwidth,
        xmin=0,xmax=1,
        xtick={0,1},
        xticklabels={$0$,$1$},
        xlabel=$\beta$
         ]
 \addplot[samples at={1,...,100},only marks,mark size=0.5,blue] (x/((1+x)*0.5),0);
\end{axis}
\end{tikzpicture}  

Теперь я не хочу, чтобы он работал с использованием выборок, а вместо этого с начальным значением (которое я могу указать), а затем постепенно увеличивал его до других чисел, пока x не достигнет 1.

Далее я хочу идентифицировать эти узлы, чтобы можно было нарисовать изогнутые стрелки между этими числами для обозначения скачков.

Я пробовал несколько подходов, но мне не удалось заставить TikZ построить график определенных чисел такой последовательности в соответствии с формулой с начальным значением. Я, конечно, могу легко решить все это по отдельности и затем построить график, но я не хочу использовать этот уродливый метод грубой силы.

Любая помощь будет оценена по достоинству. Спасибо заранее :)

решение1

Я думаю, это что-то вроде того, что вы хотите. Начальное значение задается в пунктах с помощью оператора \setlength. Я использовал 0.99pt в цикле while, потому что значение никогда не достигает 1.

В коде много комментариев. Если что-то непонятно, спрашивайте или дайте мне знать, если я неправильно понял.

введите описание изображения здесь

\documentclass{article}
\usepackage{tikz}
\usepackage{ifthen} % for whiledo
% set initial value
\newlength\MyX
\setlength\MyX{0.1pt}
% counter for giving a different name to each node
\newcounter{XCnt}
\setcounter{XCnt}{1}
% for convenience
\newcommand\XScale{200}
\newcommand\XMax{1}
\begin{document}
Diagram using the values set up in preamble:
\begin{center}
\begin{tikzpicture}
\draw[gray, very thin,|-stealth]  (0,0) node[below] {$0$} -- (\XMax*\XScale pt,0) node[below] {$\XMax$};
% basic while loop
\whiledo{\lengthtest{\MyX<0.99pt}}{%
  %draw filled node at x-position given by the \MyX length
  \node [inner sep=0pt,minimum size=2pt,fill,circle] (n-\theXCnt) at (\MyX*\XScale,0) {};
  % calculate new length
  \pgfmathsetlengthmacro{\MyX}{\MyX/((1+\MyX)*0.5)}
  % add 1 to the naming counter
  \stepcounter{XCnt}
  % to see the values of \MyX in the log, not necessary
  \typeout{\MyX} 
}

% one example to show that the nodes can be referenced
\draw [red,latex-latex] (n-1) to[bend left] (n-4);
\end{tikzpicture}
\end{center}
Then a second diagram, with slightly different equation, different initial value and scale:
\begin{center}
% set different initial value
\setlength\MyX{0.02pt}
% reset node naming counter
\setcounter{XCnt}{1}
% change scale, if necessary
\renewcommand\XScale{50}
\renewcommand\XMax{4}
\begin{tikzpicture}
\draw[gray, very thin,-stealth] (0,0) -- (\XMax*\XScale pt+3mm,0); % +3mm to extend the line a bit
% draw tick marks:
\foreach \x in {0,...,\XMax}
   \draw [gray,very thin] (\x*\XScale pt,3pt) -- +(0,-6pt) node[below]{$\x$};

\whiledo{\lengthtest{\MyX<3.999pt}}{% note changed limit
  \node [inner sep=0pt,minimum size=2pt,fill,circle] (n-\theXCnt) at (\MyX*\XScale,0) {};
  \pgfmathsetlengthmacro{\MyX}{\MyX/((1+\MyX)*0.2)}
  \stepcounter{XCnt}
  \typeout{\MyX} 
}

% one example to show that the nodes can be referenced
\draw [red,latex-latex] (n-1) to[bend left] (n-4);
\end{tikzpicture}
\end{center}
\end{document}

Связанный контент