File:Tetreal2215.jpg

Tetration $f={\rm tet}_b(x)$ in the $x$,$b$ plane shown with levels $f\!=\!\rm const$ for $-2 \! < \! x \! \le \! 2$, $1 \! < \! b \! \le \! 5$.

The following files are used for generation of this image: tetre2215.cc, main program that does the plot ado.cin, routine that writes the head of the eps file conto.cin, routine that draws the levels of a function of 2 variables tetreal2215.tex (adding of marks of axes and levels)

In addition, you need C++ compiler, Latex and convert software installed at your computer in order to generate the pic. Assume the files mentioned are saved to some folder ~/PicsFromTori/ Then the image can be generated with sequence of commands below:

~/PicsFromTori>make tetre2215 ~/PicsFromTori>./tetre2215 ~/PicsFromTori>pdflatex ./tetreal2215 ~/PicsFromTori>convert tetreal2215.pdf tetreal2215.jpg

The last command is necessary if you have improved something and want to upload the result to TORI (or to another mediawiki site): unfortunately, the mediawiki yet support neither eps nor pdf format.

Copyleft 2011 by Dmitrii Kouznetsov. Let me know if any problem with the downloading, the compilation or the execution of the generator. Please, indicate the source at the redistribution: this helps to trace errors, if any.

For simplicity of references, the generators of the image are copypasted below; for the compilation, files conto.cin and ado.cin should be loaded.

C++ generator of curves
// Generator of picture tetre2215.pdf // used to make figure tetreal2215.pdf // that is convetred to tetreal2215.jpg // used in the article tetration // Plot of tetrational $f={\rm te}_{\ln(b)}(z)=tet_b(z) // for $-2<x<2$ and $1<b<5$ the $x$,$b$ coordinates shown with lines $f=$const. // The functions defined in conto.cin and ado.cin should be downloaded for the compoillation. // The file tetreal2215.tex may be necessary to make beutiful figure with this picture. // WARNING! This is preliminary version! // The numerical implementation of the complex tet(complex,complex) // is valid only while the imaginary parts of the arguments are small; // and even in this case, the function returns only few correct decmal digits; // this is sufficient to make the camera-ready real-real plot, // but for the serious numerial analysis the number of terms in the expansion should be increased; // and for large values of the imaginary part, the asymptotic representaton should be used instead. // At the re-use, please, indicate the source: this helps to trace errors, if any. // Please let me know if any problem at the compillation or the execution. // Copyleft 2011 by Dmitrii Kouznetsov.

using namespace std; typedef complex z_type;
 * 1) include 
 * 2) include 
 * 3) include 
 * 4) define DB double
 * 5) define DO(x,y) for(x=0;x<y;x++)
 * 1) include
 * 1) define Re(x) x.real
 * 2) define Im(x) x.imag
 * 3) define I z_type(0.,1.)
 * 4) include "conto.cin"

z_type old0(z_type d){ z_type q=sqrt(d); return -1.0018 +(0.15128484821526975*(1.+33.04715298851381*q-3.51771875598067*d)*q)/ (1.+3.2255053261256337*q) +  (-0.5 + log(2.))/d;}

z_type old1(z_type d){ z_type q=sqrt(d); return 1.1 - 2.608785958462561*(1. - 0.6663562294911147*sqrt(d))* sqrt(d) - (-0.625 + log(2.) )/d ;}

z_type old2(z_type d){ z_type q=sqrt(d); return -0.96 + 3.0912038297987596*(1.+0.6021398048785328*d)*q/(1. + 4.240467556480155*d) + (-0.6666666666666666 + log(2.))/d;}

z_type old3(z_type d){ z_type q=sqrt(d); return 1.2 - 10.44604984418533* (1.+0.2137568928431227*q+0.3693275254470449*d)*q/ (1.+4.95715636660691*q + 7.70233216637738*d) - ( - 131./192. + log(2.))/d ;}

z_type new0(z_type d){ z_type q=sqrt(d); return q*(0.137467 + q*(4.94969 + q*0.0474179))/( 1. + q*(3.23171 + q*0.471222)) + (-(1./2.)+log(2.))/d -1.;}

z_type new1(z_type d){ z_type q=sqrt(d); return q*(-0.424278 +q*(1.75166 +q*(-1.46524 + q*0.93347)))/ ( 0.0312142+q*(-0.267478 + q)) + (-(5./8.) + log(2.))/d -1. ;}

/* z_type new2(z_type d){ z_type q=sqrt(d); return -1 + (3.3925530969774065` Sqrt[d] + 16.10456932466758` d -  19.52156841142778` d^(3/2) + 10.745842280690756` d^2)/(  1 + 4.127401286122306` Sqrt[d] + 5.2544878228486915` d) +.. log(2.))/d -1. ;} NO HIGH PRECISION AT THE PRELIMINARY VERSION, PLEASE!!!*/

z_type new2(z_type d){ z_type q=sqrt(d); return q*(3.39255 + q*(16.1046 +q*(-19.5216 + q*10.7458)))/ ( 1. + q*(4.1274 + q*5.25449)) + (-(2./3.) + log(2.))/d -1.;}

z_type new3(z_type d){ z_type q=sqrt(d); return // This is not misprint, there is d, not q. 0.16*q*(1. + q*(27.7934 + q*(358.688 +q*(-259.233 + d*61.6566))))/ (1. - 8.1192*q + 37.087*d) + (-131./192. + log(2))/d -1. ;}

// z_type git(z_type d, z_type x) { return //    old0(d) + x*( old1(d) + x* ( old2(d) + x*old3(d)));}

z_type git(z_type d, z_type x) { if(Re(d)>log(2.)) return new0(d)+x*(new1(d)+x*(new2(d)+x*new3(d))); return old0(d)+x*(old1(d)+x*(old2(d)+x*old3(d))); }

z_type fit1(z_type d, z_type x) { DB L=log(2.); if(Re(d)<.001) { if(Re(x)>-1) return 1.; if(Re(x)<-1) return -990.; } return (x+1.)*(git(d,x)*x+1.)+ log(x+2.)/d - log(2.)/d*(1.+x);}

z_type FIT1(z_type d,z_type z){ if(Re(d)<.03) { if(Re(z)<-1.) return (-30.); return 1.;} if(Re(z)<-.5)return log(FIT1(d,z+1.))/d; if(Re(z)>.5) return exp(d*FIT1(d,z-1.)); return fit1(d,z);}

main{ int j,k,m,n; DB x,y, p,q, t; z_type z,c,d; int M=159,M1=M+1; int N=121,N1=N+1; DB X[M1],Y[N1], g[M1*N1], w[M1*N1]; // w is working array. char v[M1*N1]; // v is working array FILE *o;o=fopen("tetre2215.eps","w");ado(o,408,408); fprintf(o,"202 2 translate\n 100 100 scale\n"); DO(m,M1) X[m]=-2. +.02501*(m+.8); DO(n,N1) Y[n]=   +.033*(n); for(m=-20;m<21;m+=10){ M(.1*m, 0)L(.1*m,4)} for(n=0;n<41;n+=10){  M(-2,.1*n)L(2.,.1*n)} M(-2,M_E-1.)L(2,M_E-1.) //M(-2,.5)L(2,.5) M(-2,exp(1./M_E)-1.)L(2,exp(1./M_E)-1.) //M(-2,sqrt(2.)-1.)L(2,sqrt(2.)-1.) fprintf(o,".006 W 0 0 0 RGB S\n"); DO(m,M1)DO(n,N1){g[m*N1+n]=9999;} DO(m,M1){x=X[m]; //printf("run at x=%6.3f\n",x); DO(n,N1){y=Y[n]; z=z_type(x,y); p=Re(FIT1(log(1.+y),x)); //    p=Re(fit1(log(1.+y),x)); // For the debugging only! if(p>-85 && p<85) g[m*N1+n]=p; }}

fprintf(o,"1 setlinejoin 1 setlinecap\n"); p=8.;q=2.; for(m=0;m<3;m++) for(n=2;n<10;n+=2)conto(o,g,w,v,X,Y,M,N,-(m+.1*n),-q,q); fprintf(o,".01 W .9 0 0 RGB S\n"); for(m=0;m<3;m++) for(n=2;n<10;n+=2)conto(o,g,w,v,X,Y,M,N, (m+.1*n),-q,q); fprintf(o,".01 W 0 0 .9 RGB S\n"); for(m=-5;m<5;m++)conto(o,g,w,v,X,Y,M,N,(0.+m),-p,p);fprintf(o,".02 W 0 0 0 RGB S\n"); m=-10; conto(o,g,w,v,X,Y,M,N,(0.+m),-p,p);fprintf(o,".02 W 0 0 0 RGB S\n"); // m=-20; conto(o,g,w,v,X,Y,M,N,(0.+m),-p,p);fprintf(o,".02 W 0 0 0 RGB S\n"); m=10; conto(o,g,w,v,X,Y,M,N,(0.+m),-p,p);fprintf(o,".02 W 0 0 0 RGB S\n"); //   m=20; conto(o,g,w,v,X,Y,M,N,(0.+m),-p,p);fprintf(o,".02 W 0 0 0 RGB S\n"); //   m=100; conto(o,g,w,v,X,Y,M,N,(0.+m),-p,p);fprintf(o,".02 W 0 0 0 RGB S\n"); // (Too many lines are difficylt to describe) fprintf(o,"showpage\n%cTrailer",'%'); fclose(o); system("epstopdf tetre2215.eps"); system(   "open tetre2215.pdf"); //these 2 commands may be specific for macintosh //getchar; system("killall Preview");// if run at another operational sysetm, may need to modify }

Latex generator of labels
% File tetre1115.pdf should be generated with the code above in order to compile the Latex document below. % % \usepackage{graphicx} % \usepackage{rotating} % \newcommand \sx {\scalebox} % \newcommand \ing {\includegraphics} % \newcommand \rme {\mathrm{e}} % \newcommand \rot {\begin{rotate}} % \newcommand \ero {\end{rotate}} % \begin{document} % \newcommand \figax { % \put(-7,394){\sx{1.5}{$b$}} % \put(-7,300){\sx{1.5}{$4$}} % \put(-7,200){\sx{1.5}{$3$}} % \put(-7,172){\sx{1.5}{$\rme$}} % \put(-7,100){\sx{1.5}{$2$}} % \put(-11, 44){\sx{1.4}{$\rme^{\frac{1}{\rme}}$}} % \put(-7,   0){\sx{1.5}{$1$}}  % \put(-5, -12){\sx{1.5}{$-2$}} % \put( 94,-12){\sx{1.5}{$-1$}} % \put(200,-12){\sx{1.5}{$0$}} % \put(300,-12){\sx{1.5}{$1$}} % \put(399,-11){\sx{1.5}{$x$}} % } %  \begin{figure} % I have no idea why does this need "figure", but it does not work without it. % \definecolor{RED}{rgb}{.9,0,0}  % %\begin{center} % \begin{picture}(401,401) % %\put(1,1){\ing{fig01c}} \figax % \put(1,1){\ing{tetre2215}} \figax % \put(350,250){\rot{-77}\sx{1.1}{$f\!=\!10$}\ero} % %\put(334,240){\rot{-79}\sx{1.1}{$f\!=\!4$}\ero} % \put(350,160){\rot{-59}\sx{1.1}{$f\!=\!4$}\ero} % %\put(350,135){\rot{-47}\sx{1.1}{$f\!=\!4$}\ero} % \put(336,136){\rot{-48}\sx{1.1}{$f\!=\!3$}\ero} % \put(306, 89){\rot{-39}\sx{1.1}{$f\!=\!2$}\ero} % \put(295, 80){\rot{-37}\sx{1.01}{$f\!=\!1.8$}\ero} % \put(284, 68){\rot{-35}\sx{1.01}{$f\!=\!1.6$}\ero} % \put(270, 50){\rot{-31}\sx{1.01}{$f\!=\!1.4$}\ero} % \put(248, 24){\rot{-14}\sx{1.01}{$f\!=\!1.2$}\ero} % % % % \put( 8,368){\rot{-90}\sx{1.01}{$f\!=\!-2$}\ero}  % \put(38,368){\rot{-90}\sx{1.01}{$f\!=\!-0.8$}\ero} % \put(50,368){\rot{-90}\sx{1.01}{$f\!=\!-0.6$}\ero} % \put(67,368){\rot{-90}\sx{1.01}{$f\!=\!-0.4$}\ero} % \put(85,368){\rot{-90}\sx{1.01}{$f\!=\!-0.2$}\ero} % % %  \put(112,68){\rot{90}\sx{1.01}{$f\!=\!0$}\ero}  % \put(124,62){\rot{84}\sx{1.01}{$f\!=\!0.2$}\ero} % \put(144,58){\rot{86}\sx{1.01}{$f\!=\!0.4$}\ero} % \put(164,54){\rot{87}\sx{1.01}{$f\!=\!0.6$}\ero} % \put(185,50){\rot{88}\sx{1.01}{$f\!=\!0.8$}\ero} % \put(213,50){\rot{88}\sx{1.01}{$f\!=\!1$}\ero} % \put(173,7){\sx{1.01}{$f\!=\!1$}} % \put(227,7){\sx{1.01}{$f\!=\!1$}} % % %  \put(1,20){\rot{-35}\sx{.8}{$f\!=\!-10$}\ero}  % \put(8,41){\rot{-64}\sx{.8}{$f\!=\!-5$}\ero} % \put( 101.2,4){\rot{132}{\textcolor{RED}{\rule{4pt}{1pt}}}\ero} %some make-up % \put( 99,4){\rot{154}{\textcolor{RED}{\rule{5pt}{1pt}}}\ero} % \put( 97,4){\rot{160}{\textcolor{RED}{\rule{7pt}{1pt}}}\ero} % \put(101,5.4){ \textcolor{white}{\rule{3pt}{3pt}}  }  % \put(102.5,2){\rule{2pt}{4pt}}  % \put(62,2){\rule{342pt}{2pt}} %I have not yet prepared the expansion for $b \approx 1$ % \put( 62,4){\rot{172}{\rule{24.5pt}{2pt}}\ero} %ok % \put( 80,4){\rot{173}{\rule{29pt}{2pt}}\ero} %ok % \put( 85,4){\rot{171}{\rule{20pt}{2pt}}\ero} %ok % \put( 90,4){\rot{170}{\rule{17pt}{2pt}}\ero} %ok % \put( 98,4){\rot{169}{\rule{14pt}{2pt}}\ero} %ok % \end{picture} % %\end{center} % %\caption{Tetrational $f={\rm tet}_b(x)$ in the real $x,b$ plane by \cite{citeulike:4195962,vladi,kouznetsov:sqrt2}  % %and ${\rm tet}_{\exp(1/\rme)}(x)=F_1(x)$ by \rf{fo},\rf{x1}. % %\iL{fig01c}  % \end{figure} % \end{document} % %