File:Arqnemap11.jpg

Complex map of function ArqNem, which is inverse function of the Nemtsov function Nem. Values of parameters: $p\!=\!1$, $q\!=\!1$.

$x\!+\!\mathrm i y = \mathrm{ArcNem}_{1,1}(x\!+\mathrm i y)$

The branch points are marked with additional grid lines.

The cut lines are optimised for evaluation of AuNem. One cut goes along $y\!=\!0$, $x<0$. Two other cuts go from zero to the complex branch points. These points are marked with additional grid lines. One more additional grid line indicates the boundary of the domain where the special algorithm "cb" is used for evaluation of the appropriate branch. where $Ni(p,q)$ are complex soludions of equation $\mathrm{Nem}_{p,q}'=0$. The Nemtsov function is 4th order polynomial of special king:

$\mathrm{Nem}_{p,q}(z)=z+pz^3+qz^4$

For the Nemtsov function, none of the algorithms of construction of superfuncitons reported in the preliminary version of book Superfunctions can be applied "as is", even the algorithm for the superfunction of sin .

For this reason, this function needs the special name to handle.

Description
Roots of the four–order polynomial can be expressed through elementary function, as some combination of the square roots and cubic roots. However, the careful handling of the cut lines is required to avoid confusions with the non–physical solutions.

Another inverse funciton is called ArkNem; it has two vertical cut lines.

C++ generator of the map
Files ado.cin and conto.cin should be loaded in order to compile the C++ code below.

//using namespace std; typedef std::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"

// global varaibles DB NEMTSOVp=1.; //will be changed by nemsingu DB NEMTSOVq=1.; //will be changed by nemsingu DB ARCNEMVER=-0.2; DB NEMTSOVR; // Re(s) such that nemtsov'(s)=0 DB NEMTSOVI; // Im(s) such that nemtsov'(s)=0 DB NEMTSOVr; // should be assigned by memsingu DB NEMTSOVi; // should be assigned by memsingu

z_type nempq(z_type z){ return z*(1.+z*z*(NEMTSOVp+z*NEMTSOVq)); } z_type nempq1(z_type z){ return 1.+z*z*((NEMTSOVp*3.)+z*(NEMTSOVq*4.)); }

z_type nem(DB p,DB q,z_type z){ return z*(1.+z*z*(p+z*q)); }  // will be suppressed

z_type nemsingu(z_type p,z_type q){ z_type a=sqrt(pow(p,3) + 4.*pow(q,2)); z_type s= z_type(1.,-sqrt(3.)) * ( p + pow(-pow(p,3)+4.*(a-2.*q)*q,1./3.) ) / ( 8.*q*pow( -pow(p,3) + 4.*(a-2.*q)*q ,1./3.) ) ; NEMTSOVp=Re(p); // WARNING: NEMTSOVp is global variable. NEMTSOVq=Re(q); // WARNING: NEMTSOVq is global variable. z_type t=nempq(s); // mempq does not use NEMTSOVi. NEMTSOVR=Re(s); // WARNING: NEMTSOVR is global variable. NEMTSOVI=Im(s); // WARNING: NEMTSOVI is global variable. NEMTSOVr=Re(t); // WARNING: NEMTSOVr is global variable. NEMTSOVi=Im(t); // WARNING: NEMTSOVi is global variable. return s;      // Warning: tested only for real p,q. }
 * ( -p + pow(pow(p,3) - 4.*a*q + 8.*pow(q,2),1./3.) )

z_type arcnemaa(z_type z){ z_type p=NEMTSOVp; // WARNING: global variable z_type q=NEMTSOVq; // WARNING: global variable z_type P=p+4.*q*z; z_type PP=P*P; z_type PPP=PP*P; z_type Q=q-p*p*z; z_type QQ=Q*Q; z_type r=729.*QQ + 108.*PPP; z_type R=sqrt(r); //     z_type R=-I*sqrt(-r); z_type s3=27.*q - 27.*p*p*z + R; z_type s=pow(s3,1./3.); z_type B0=pow(2.,1./3.)*P/(q*s); z_type B1=pow(54.,-1./3.)*s/q ; z_type B=B1-B0; z_type c=0.25*p*p/(q*q)+B; z_type C=sqrt(c); //     z_type C=I*sqrt(-c); return -.25*p/q - .5*C + .5*sqrt( 0.5*p*p/(q*q) - B + (.25*p*p*p+2.*q*q)/(q*q*q*C) ) ; }

z_type arcnemba(z_type z){ z_type p=NEMTSOVp; // WARNING: global variable z_type q=NEMTSOVq; // WARNING: global variable z_type P=p+4.*q*z; z_type PP=P*P; z_type PPP=PP*P; z_type Q=q-p*p*z; z_type QQ=Q*Q; z_type r=729.*QQ + 108.*PPP; //     z_type R=-sqrt(r); z_type R=-I*sqrt(-r); z_type s3=27.*q - 27.*p*p*z + R; z_type s=pow(s3,1./3.); z_type B0=pow(2.,1./3.)*P/(q*s); z_type B1=pow(54.,-1./3.)*s/q ; z_type B=B1-B0; z_type c=0.25*p*p/(q*q)+B; z_type C=sqrt(c); //     z_type C=I*sqrt(-c); return -.25*p/q - .5*C + .5*sqrt( 0.5*p*p/(q*q) - B + (.25*p*p*p+2.*q*q)/(q*q*q*C) ) ; }

z_type arcnemcb(z_type z){ z_type p=NEMTSOVp; // WARNING: global variable z_type q=NEMTSOVq; // WARNING: global variable z_type P=p+4.*q*z; z_type PP=P*P; z_type PPP=PP*P; z_type Q=q-p*p*z; z_type QQ=Q*Q; z_type r=729.*QQ + 108.*PPP; //     z_type R=-sqrt(r); z_type R=-I*sqrt(-r); z_type s3=27.*q - 27.*p*p*z + R; z_type s=pow(s3,1./3.); z_type B0=pow(2.,1./3.)*P/(q*s); z_type B1=pow(54.,-1./3.)*s/q ; z_type B=B1-B0; z_type c=0.25*p*p/(q*q)+B; //     z_type C=sqrt(c); z_type C=I*sqrt(-c); return -.25*p/q - .5*C + .5*sqrt( 0.5*p*p/(q*q) - B + (.25*p*p*p+2.*q*q)/(q*q*q*C) ) ; }

z_type arcnemda(z_type z){ z_type p=NEMTSOVp; // WARNING: global variable z_type q=NEMTSOVq; // WARNING: global variable z_type P=p+4.*q*z; z_type PP=P*P; z_type PPP=PP*P; z_type Q=q-p*p*z; z_type QQ=Q*Q; z_type r=729.*QQ + 108.*PPP; z_type R=-sqrt(r); //     z_type R=-I*sqrt(-r); z_type s3=27.*q - 27.*p*p*z + R; z_type s=pow(s3,1./3.); z_type B0=pow(2.,1./3.)*P/(q*s); z_type B1=pow(54.,-1./3.)*s/q ; z_type B=B1-B0; z_type c=0.25*p*p/(q*q)+B; z_type C=sqrt(c); //     z_type C=I*sqrt(-c); return -.25*p/q - .5*C + .5*sqrt( 0.5*p*p/(q*q) - B + (.25*p*p*p+2.*q*q)/(q*q*q*C) ) ; }

z_type arqnem(z_type z){ DB x=Re(z), y=Im(z); if(x0) return arcnemcb(z); else return conj(arcnemcb(conj(z))); } if(y>NEMTSOVi) return conj(arcnemba(conj(z))); if(y<-NEMTSOVi) return arcnemba(z); if(x> (NEMTSOVr/NEMTSOVi) * fabs(y)) return arcnemaa(z); return arcnemda(z); }

z_type ARQNEM(z_type z){z_type s,t,u; s=arqnem(z); // singe Newton iterate t=z-nempq(s); u=nempq1(s); if(abs(t)>1.e-20 && abs(u)>.001 ) s+=t/u; return s;}

int main{ int Max; int j,k,m,n; DB x,y, p,q,P,Q, t, sr,si,tr,ti; z_type z,c,d,s; P=1; // WARNING: here p,q are already in use in two different meanings for graphics. Q=1; // WARNING: in this routine, the capital letters are used to denote coefficents s=nemsingu(P,Q); //WARNING: it assign valies to global variables DB NEMTSOV@ tr=NEMTSOVr; ti=NEMTSOVi;

printf("P,Q  : %6.2lf  RI: %6.2lf %20.16lf %20.16lf\n",       P,       Q,NEMTSOVR,NEMTSOVI); printf("GLOBAL: %6.2lf ri: %6.2lf %20.16lf %20.16lf\n",NEMTSOVp,NEMTSOVq,NEMTSOVr,NEMTSOVi);

int M=801,M1=M+1; int N=401,N1=N+1; DB X[M1],Y[N1], g[M1*N1],f[M1*N1], w[M1*N1]; // w is working array. char v[M1*N1]; // v is working array FILE *o;o=fopen("arqne114.eps","w");ado(o,402,402); fprintf(o,"201 201 translate\n 100 100 scale 2 setlinecap\n"); DO(m,M1) X[m]=-2.+.005*(m-.5); DO(n,N1) Y[n]=-2.+.01*(n-.5); for(m=-2;m<4;m++){ M(m,-2)L(m,2)} for(n=-2;n<4;n++){ M(-2,n)L(2,n)} fprintf(o,".003 W 0 0 0 RGB 2 setlinecap S\n");

M(tr, -2) L(tr, 2) M(-2, ti) L(2, ti) M(-2,-ti) L(2,-ti) fprintf(o,".001 W 0 0 0 RGB S\n"); M(ARCNEMVER, -2) L(ARCNEMVER, 2) fprintf(o,".0004 W 0 0 0 RGB S\n");

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);

//c=arqnem(z); c=ARQNEM(z); //c=nem(P,Q,c); //p=abs(c-z)/(abs(c)+abs(z)); p=-log(p)/log(10.); if(p>-85 && p<85) g[m*N1+n]=p; p=Re(c); q=Im(c); if(p>-40 && p<40 &&         q >-40 && q<40 ) { g[m*N1+n]=p; f[m*N1+n]=q; } }}

fprintf(o,"1 setlinejoin 1 setlinecap\n"); //p=40.;q=.5; //#include"plofu.cin"

p=.2;q=.2;

for(m=-9;m<9;m++)for(n=1;n<10;n+=1)conto(o,f,w,v,X,Y,M,N, (m+.1*n),-q,q); fprintf(o,".002 W 0 .6 0 RGB S\n"); for(m=0;m<19;m++) for(n=1;n<10;n+=1)conto(o,g,w,v,X,Y,M,N,-(m+.1*n),-q,q); fprintf(o,".002 W .9 0 0 RGB S\n"); for(m=0;m<19;m++) for(n=1;n<10;n+=1)conto(o,g,w,v,X,Y,M,N, (m+.1*n),-q,q); fprintf(o,".002 W 0 0 .9 RGB S\n");

for(m= 1;m<20;m++) conto(o,f,w,v,X,Y,M,N,(0.-m),-p,p);fprintf(o,".005 W .8 0 0 RGB S\n"); for(m= 1;m<20;m++) conto(o,f,w,v,X,Y,M,N,(0.+m),-p,p);fprintf(o,".005 W 0 0 .8 RGB S\n"); conto(o,f,w,v,X,Y,M,N,(0. ),-p,p);fprintf(o,".005 W .5 0 .5 RGB S\n"); for(m=-21;m<22;m++)conto(o,g,w,v,X,Y,M,N,(0.+m),-p,p);fprintf(o,".005 W 0 0 0 RGB S\n");

/* conto(o,g,w,v,X,Y,M,N,15.8,-p,p);fprintf(o,".004 W .3 0 .3 RGB S\n"); conto(o,g,w,v,X,Y,M,N,15.,-p,p);fprintf(o,".004 W .9 0 .9 RGB S\n"); conto(o,g,w,v,X,Y,M,N,14.,-p,p);fprintf(o,".001 W 0 0 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,13.,-p,p);fprintf(o,".001 W 0 0 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,12.,-p,p);fprintf(o,".004 W 0 0 .8 RGB S\n"); conto(o,g,w,v,X,Y,M,N,11.,-p,p);fprintf(o,".001 W 0 0 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,10.,-p,p);fprintf(o,".001 W 0 0 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,9.,-p,p);fprintf(o,".004 W 0 .6 .8 RGB S\n"); conto(o,g,w,v,X,Y,M,N,8.,-p,p);fprintf(o,".001 W 0 0 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,7.,-p,p);fprintf(o,".001 W 0 0 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,6.,-p,p);fprintf(o,".004 W 0 .7 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,5.,-p,p);fprintf(o,".001 W 0 0 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,4.,-p,p);fprintf(o,".001 W 0 0 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,3.,-p,p);fprintf(o,".004 W 1 0 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,2.,-p,p);fprintf(o,".001 W 0 0 0 RGB S\n"); conto(o,g,w,v,X,Y,M,N,1.,-p,p);fprintf(o,".006 W .5 0 0 RGB S\n");

/* fprintf(o,"0 setlinecap\n"); M(M_E,0)L(-10,0) fprintf(o,".08 W 1 1 1 RGB S\n"); DO(m,36){M(M_E-.4*(m),0)L(M_E-.4*(m+.5),0)} fprintf(o,".09 W 1 0 1 RGB S\n");

M(-2,0) L(0,0) M(tr,ti)L(0,0)L(tr,-ti) fprintf(o,".01 W 1 1 0 RGB 0 setlinecap S\n");

DO(m,M1)DO(n,N1){g[m*N1+n]=9999; f[m*N1+n]=9999;}

fprintf(o,"showpage\n%cTrailer",'%'); fclose(o); system("epstopdf arqne114.eps"); system(   "open arqne114.pdf"); //mac

getchar; system("killall Preview");// mac }

Latex generator of labels
\documentclass[12pt]{article} \usepackage{graphics} \paperwidth 430pt \paperheight 426pt \usepackage{geometry} \usepackage{rotating} \textwidth 1260pt \textheight 1260pt \topmargin -108pt \oddsidemargin -72pt \parindent 0pt \pagestyle{empty} \newcommand \ing {\includegraphics} \newcommand \sx {\scalebox} \newcommand \rot {\begin{rotate}} \newcommand \ero {\end{rotate}} \begin{document} \begin{picture}(424,424) %\put(24,20){\ing{arknemmap1010}} %\put(24,20){\ing{arcnep10q10m4}} \put(24,20){\ing{arqne114}} %\put(50,40){\ing{sunem10q10ma6a}} %\put(50,40){\ing{sunem10q10ma6s}} \put(11,415){\sx{1.8}{$y$}} \put(10,314){\sx{1.8}{$1$}} \put(10,214){\sx{1.8}{$0$}} \put(-5,114){\sx{1.8}{$-1$}} \put(-5, 14){\sx{1.8}{$-2$}} \put( 5, 1){\sx{1.8}{$-2$}} \put(105, 1){\sx{1.8}{$-1$}} \put(221, 1){\sx{1.8}{$0$}} \put(321, 1){\sx{1.8}{$1$}} \put(418,1){\sx{1.8}{$x$}} %\put(32,154){\sx{1.9}{\rot{40} $u\!=\!-1$\ero}} %\put(58,116){\sx{1.8}{\rot{57} $u\!=\!-0.9$\ero}} %\put(94,100){\sx{1.8}{\rot{70} $u\!=\!-0.8$\ero}} %\put(130,100){\sx{1.8}{\rot{80} $u\!=\!-0.7$\ero}} % %\put(159,260){\sx{1.8}{\rot{87} $u\!=\!-0.6$\ero}} %\put(172,258){\sx{1.8}{\rot{74} $u\!=\!-0.5$\ero}} %\put(186,256){\sx{1.8}{\rot{65} $u\!=\!-0.4$\ero}} % %\put(211,190){\sx{1.8}{\rot{86} $u\!=\!-0.2$\ero}} %\put(230,196){\sx{1.8}{\rot{86} $u\!=\!0$\ero}} \put(250,188){\sx{1.8}{\rot{88} $u\!=\!0.2$\ero}} \put(276,188){\sx{1.8}{\rot{86} $u\!=\!0.4$\ero}} \put(298,188){\sx{1.8}{\rot{86} $u\!=\!0.5$\ero}} \put(324,188){\sx{1.8}{\rot{86} $u\!=\!0.6$\ero}} \put(358,188){\sx{1.8}{\rot{86} $u\!=\!0.7$\ero}} \put(402,188){\sx{1.8}{\rot{86} $u\!=\!0.8$\ero}} % %\put(60,398){\sx{1.8}{\rot{3} $v\!=\!0.8$\ero}} %\put(60,350){\sx{1.8}{\rot{6} $v\!=\!0.7$\ero}} %\put(68,308){\sx{1.8}{\rot{12} $v\!=\!0.6$\ero}} %\put(88,280){\sx{1.8}{\rot{18} $v\!=\!0.5$\ero}} % \put(190,360){\sx{1.8}{\rot{89} $v\!=\!0.6$\ero}} \put(238,360){\sx{1.8}{\rot{75} $v\!=\!0.5$\ero}} % \put(288,364){\sx{1.8}{\rot{56} $v\!=\!0.4$\ero}} \put(324,334){\sx{1.8}{\rot{43} $v\!=\!0.3$\ero}} \put(350,298){\sx{1.8}{\rot{30} $v\!=\!0.2$\ero}} \put(362,258){\sx{1.8}{\rot{15} $v\!=\!0.1$\ero}} \put(350,178){\sx{1.8}{\rot{-16} $v\!=\!-0.1$\ero}} \put(334,140){\sx{1.8}{\rot{-29} $v\!=\!-0.2$\ero}} \put(306,112){\sx{1.8}{\rot{-46} $v\!=\!-0.3$\ero}} \put(272,86){\sx{1.8}{\rot{-60} $v\!=\!-0.4$\ero}} % %\put(46,89){\sx{1.8}{\rot{-11} $v\!=\!-0.7$\ero}} %\put(44,36){\sx{1.8}{\rot{-2} $v\!=\!-0.8$\ero}}

%\put(148,216){\sx{1.8}{\rot{0.} $v\!=\!0$ \ero}} %\put(26,250){\sx{1.8}{\rot{0.} \bf cut \ero}} \put(26,217){\sx{1.8}{\rot{0.} \bf cut \ero}} %\put(26,183){\sx{1.8}{\rot{0.} \bf cut \ero}} %\put(238,280){\sx{1.8}{\rot{90} \bf cut \ero}} %\put(238,140){\sx{1.8}{\rot{90} \bf cut \ero}}

%\put(64,245){\sx{1.8}{\rot{-31} $u\!=\!1$\ero}} %\put(66,187){\sx{1.8}{\rot{31} $u\!=\!1$\ero}}

\put(118,380){\sx{1.8}{\rot{-69} $v\!=\!0.7$\ero}}% \put(54,358){\sx{1.8}{\rot{-62} $v\!=\!0.8$\ero}} \put(54,62){\sx{1.8}{\rot{62} $v\!=\!-0.8$\ero}} \put(124,50){\sx{1.8}{\rot{69} $v\!=\!-0.7$\ero}} \put(188,34){\sx{1.8}{\rot{86} $v\!=\!-0.6$\ero}} \end{picture} \end{document}