# The schwarzian differential operator #@ schwarzian schwarzian := (f,z) -> diff(f,z,z,z)/diff(f,z) - (3/2) * (diff(f,z,z)/diff(f,z))^2; # This is as in Proposition prop-S-p-inv #@ S_p_inv S_p_inv := unapply((3/8)*(1/z^2 + 1/(z-a_P)^2 + 1/(z+a_P)^2 + 1/(z-1/a_P)^2 + 1/(z+1/a_P)^2) + (d_p_inv*z - 3*z^3/2)/r_P(z),z); # These functions are as in Definition defn-schwarz-phi schwarz_phi := (z) -> (I - z)/(I + z); #@ schwarz_phi schwarz_phi_inv := (w) -> I * (1 - w)/(1 + w); #@ schwarz_phi_inv #@ schwarz_psi schwarz_psi := (w) -> ((1 + I)/sqrt(2)*(sqrt(2)-am_H-w*ap_H))/(ap_H + (am_H-sqrt(2))*w); #@ schwarz_psi_inv schwarz_psi_inv := (z) -> (-(sqrt(2) - am_H - (1-I)/sqrt(2)*ap_H*z))/((1-I)*(1-am_H/sqrt(2))*z - ap_H); schwarz_alpha := (I - a_P)/(I + a_P); #@ schwarz_alpha # This is s^*_0 in Proposition prop-p-one #@ S0_p1_inv S0_p1_inv := (z) -> (9/2*(1-z^2)^4*(1-a_P^4)^2+96*a_P^4*z^2*(1+z^2)^2)/ ((1-z^2)^2*((1-z^2)^2*(1+a_P^2)^2+16*a_P^2*z^2)^2); # This is s^*_1 in Proposition prop-p-one #@ S1_p1_inv S1_p1_inv := (z) -> -4*a_P^2/((1-z^2)^2*(1+a_P^2)^2+16*a_P^2*z^2); #@ S_p1_inv S_p1_inv := unapply(S0_p1_inv(z) + S1_p1_inv(z) * d_p_inv, z); # We take p2 = xi o p1 as in Remark rem-heun schwarz_xi := (z) -> 2/(z^2+1/z^2); #@ schwarz_xi schwarz_xi_inv := (Z) -> sqrt((sqrt(1-Z^2)-1)/Z); #@ schwarz_xi_inv # Schwarzian of the inverse of p2 #@ S0_p2_inv S0_p2_inv := (Z) -> 3/16*(9*Z^4*a_P^8+15*Z^3*a_P^8-72*Z^4*a_P^6+5*Z^2*a_P^8-48*Z^3*a_P^6+Z*a_P^8+254*Z^4*a_P^4+2*a_P^8-190*Z^3*a_P^4-16*Z*a_P^6-72*Z^4*a_P^2+150*Z^2*a_P^4+8*a_P^6-48*Z^3*a_P^2-34*Z*a_P^4+9*Z^4+12*a_P^4+15*Z^3-16*Z*a_P^2+5*Z^2+8*a_P^2+Z+2)/Z^2/(Z-1)^2/(Z+1)^2/(Z*a_P^4+a_P^4-6*Z*a_P^2+2*a_P^2+Z+1)^2; #@ S1_p2_inv S1_p2_inv := (Z) -> -1/2*a_P^2/(Z*a_P^4+a_P^4-6*Z*a_P^2+2*a_P^2+Z+1)/(Z+1)/Z/(Z-1); #@ S_p2_inv S_p2_inv := unapply(S0_p2_inv(Z) + d_p_inv * S1_p2_inv(Z),Z); #@ heun_F00 heun_F00 := (Z) -> Z^(1/4)*(Z-1)^(1/4)*(Z+1)^(3/8)*((Z+1)*a_P^4+(-6*Z+2)*a_P^2+Z+1)^( 1/8); #@ heun_F10 heun_F10 := (Z) -> Z^(3/4)*(Z-1)^(1/4)*(Z+1)^(3/8)*((Z+1)*a_P^4+(-6*Z+2)*a_P^2+Z+1)^(-3/8); #@ heun_F01 heun_F01 := (Z) -> HeunG(-4*a_P^2/(a_P^4-2*a_P^2+1), (5*a_P^4+5+(-8*d_p_inv-10)*a_P^2)/(64*a_P^4-128*a_P^2+64), 1/8, 5/8, 1/2, 3/4, -8*Z*a_P^2/((Z+1)*a_P^4+(-6*Z+2)*a_P^2+Z+1)); #@ heun_F11 heun_F11 := (Z) -> HeunG(-4*a_P^2/(a_P^4-2*a_P^2+1), (21+21*a_P^4+(-8*d_p_inv-138)*a_P^2)/(64*a_P^4-128*a_P^2+64), 5/8, 9/8, 3/2, 3/4, -8*Z*a_P^2/((Z+1)*a_P^4+(-6*Z+2)*a_P^2+Z+1)); heun_F0 := unapply(heun_F00(Z) * heun_F01(Z),Z); #@ heun_F0 heun_F1 := unapply(heun_F10(Z) * heun_F11(Z),Z); #@ heun_F1 # Images of some points v_H[i] under schwarz_psi_inv, as in # Definition defn-schwarz-phi r_schwarz := (sqrt(2) - am_H)/ap_H; #@ r_schwarz s_schwarz := (ap_H*am_H - sqrt(2)*(a_H - a_H^3))/(1 - a_H^2 + 2*a_H^4); #@ s_schwarz t_schwarz := a_H^2 * (sqrt(2)*ap_H - 2*a_H*am_H)/(1 - a_H^2 + 2*a_H^4); #@ t_schwarz #@ v_HS v_HS[ 0] := r_schwarz; v_HS[ 1] := -r_schwarz; v_HS[ 2] := -I * am_H/(ap_H + sqrt(2)*a_H); v_HS[ 3] := I * am_H/(ap_H + sqrt(2)*a_H); v_HS[ 6] := 0; v_HS[10] := t_schwarz - I * s_schwarz; v_HS[11] := t_schwarz + I * s_schwarz; v_HS[12] := -t_schwarz - I * s_schwarz; v_HS[13] := -t_schwarz + I * s_schwarz; # Images of some curves c_H[i] under schwarz_psi_inv, as in # Definition defn-schwarz-phi #@ c_HS c_HS_p[3] := I * ap_H/am_H; c_HS_p[5] := (sqrt(2) + I*am_H)/ap_H; c_HS_r[3] := sqrt(2) * a_H / am_H; c_HS_r[5] := sqrt(2)*am_H/ap_H; c_HS[ 0] := (t) -> I * Tanh((t-Pi/4)*s_H[0]/Pi); c_HS[ 1] := (t) -> - Tanh((t-Pi/2)*s_H[1]/Pi); c_HS[ 3] := (t) -> xi_curve(c_HS_p[3],2*(Pi/2-t)*s_H[2]/Pi); c_HS[ 5] := (t) -> xi_curve(c_HS_p[5],log((2+ap_H)/sqrt(3-a_H^2))-2*t*s_H[3]/Pi); #@ v_PS v_PS[ 0] := 1; v_PS[ 1] := -1; v_PS[ 2] := -I; v_PS[ 3] := I; v_PS[ 6] := 0; v_PS[10] := (I + a_P)/(I - a_P); v_PS[11] := (I - a_P)/(I + a_P); v_PS[12] := -(I - a_P)/(I + a_P); v_PS[13] := -(I + a_P)/(I - a_P); #@ c_PS c_PS[ 0] := (t) -> I * tan(t - Pi/4); c_PS[ 1] := (t) -> cos(t); c_PS[ 3] := unapply(simplify(schwarz_phi(p_P(c_P[ 3](t)))),t); c_PS[ 5] := unapply(simplify(schwarz_phi(p_P(c_P[ 5](t)))),t); # This function corresponds to Definition defn-circle-fit #@ series_circle_fit series_circle_fit := proc(u0,u1,u2) local T; T := table(); T["c"] := sqrt(u2/(u0*(u0*u2+u1^2))); T["b"] := u1^2/sqrt(8*u0*u2*(u0*u2+u1^2)+u1^4); T["bp"] := sqrt(1 + T["b"]^2); T["bm"] := sqrt(1 - T["b"]^2); T["d"] := T["bp"]/T["bm"]; T["r"] := sqrt(2)*T["b"]/T["bm"]; return(eval(T)); end: #@ sample_circle_fit sample_circle_fit := proc(L) local N,XX,XY,YY,XXX,XXY,XYY,YYY,L1,z0,u1,v1,r1,T; N := nops(L); z0 := add(z,z in L)/N; L1 := map(z -> [Re(z-z0),Im(z-z0)],L); XX := add(a[1]^2 ,a in L1); XY := add(a[1]*a[2] ,a in L1); YY := add(a[2]^2 ,a in L1); XYY := add(a[1]*a[2]^2,a in L1); XXY := add(a[1]^2*a[2],a in L1); XXX := add(a[1]^3 ,a in L1); YYY := add(a[2]^3 ,a in L1); u1 := (1/2)*(YY*N*XYY+YY*N*XXX-XY*N*XXY-XY*N*YYY)/(XX*N*YY-XY^2*N); v1 := (1/2)*(-XY*N*XYY-XY*N*XXX+XX*N*XXY+XX*N*YYY)/(XX*N*YY-XY^2*N); r1 := sqrt(XX/N+YY/N+(u1^2+v1^2)); T := table(): T["centre"] := z0+u1+I*v1; T["radius"] := r1; return(eval(T)); end: #@ tiny_p1_poles tiny_p1_poles := [I*am_H/ap_H,-I*am_H/ap_H]; #@ tiny_p1_denom tiny_p1_denom := (z) -> z^2 + (1-a_H^2)/(1+a_H^2); #@ small_p1_poles small_p1_poles := map(simplify_H,[ seq(schwarz_psi_inv(act_Pi(W,v_H[7])),W in [[],[0],[2],[6],[0,6],[2,0],[2,3],[5,6],[2,0,6],[5,4,3],[0,7,0,6],[5,6,7,0,6]]), seq(schwarz_psi_inv(act_Pi(W,v_H[9])),W in [[],[0],[2],[4],[0,2],[0,7],[2,4],[5,4],[0,2,4],[5,6,7],[0,2,1,2],[0,7,0,1,2]]) ]): #@ small_p1_denom small_p1_denom := (z) -> (z^4-2*z^2*(a_H^2+1)^2/(a_H^2-3)^2+(a_H^2+1)^2/(a_H^2-3)^2)* (z^4-2*z^2*(a_H^4-4*a_H^2+7)/(a_H^2-3)^2+(a_H^4+3)^2/((a_H^2-3)^2*(a_H^2+1)^2))* (z^4-2*z^2*(a_H^4+12*a_H^2-9)/(a_H^2-3)^2+(a_H^4+3)^2/((a_H^2-3)^2*(a_H^2+1)^2))* (z^4-2*z^2*(a_H^2+1)*(a_H^10+a_H^8-12*a_H^6+12*a_H^4+4*a_H^2-4)/(a_H^6-a_H^4-2)^2+(a_H^4-2*a_H^2+2)^2*(a_H^2+1)^2/(a_H^6-a_H^4-2)^2)* ((-a_H^2+1)^2*(a_H^2+2)^2/((a_H^2-2)^2*(a_H^2+1)^2)+(2*(-a_H^2+1))*(a_H^2+2*a_H+2)*(a_H^2-2*a_H+2)*z^2/((a_H^2-2)^2*(a_H^2+1))+z^4)* (z^4-2*z^2*(a_H^2+1)*(a_H^10+a_H^8+4*a_H^6-4*a_H^4+4*a_H^2-4)/(a_H^6-a_H^4-2)^2+(a_H^4-2*a_H^2+2)^2*(a_H^2+1)^2/(a_H^6-a_H^4-2)^2); #@ schwarz_b_approx schwarz_b_approx := (a) -> 0.9069138819607508504414623413486215941630984580580672212927769794572584355051327480722389917832436934-1.765474192590781737605598080177250320104598155751747434554168434791386658985099944462154268627034137*a+11.53828977378593312763653588864186488647822466461521372737570552945692216438365003085500639707627312*a^2-66.41329361574075935661075187078177669195661108874142415658152457434993361143811500196721781770233091*a^3+252.8047438337293960095779707025769471443777311418990076217550032752073341113370756286590049291734747*a^4-629.9078607801038186456330794089845793458290861471589728999709363487263998249145987081714492089597137*a^5+1020.358374393808620210881702144982983157533265009871970569144218800724280434738209698557221801944654*a^6-1048.740900936545828704047197583117104725092127778886883795987693295565268942430022674598654591538775*a^7+643.8321100777354751651656927733692084746561441636024348187111032073278314905473663698929203277312212*a^8-205.7057517407104396403773030537487539842131344061422435468478074909575133773836375067202807801834757*a^9+23.38607168239802899455924047642001005632471745805821178139327421692228478867776411933175717692491330*a^10: #@ schwarz_c_approx schwarz_c_approx := (a) -> 0.2056091544987268220798370509160122242052513020545736786917007651838825344075819746412368048506824587+2.119297075747641460259319400109999804985002300201054267836014494876919786679576153075604342457731568*a-16.97540822063646794986589307304361914439032663427820975529588004577721559151722238273988798645387885*a^2+111.4327378813141625581053815667432701695777351827357767550594836286884557435518311962928179512904584*a^3-497.8280364102672996457064931256207794883799477913510984282768168044619968942609452870938085877487818*a^4+1476.634802306891170011190691150734072380963465242558167864043549037878387924612396089910412834763057*a^5-2911.486921527754435081165570561377274531794255693475113920098627252088320106419198173223937280420437*a^6+3764.776092932513000365494958037208518369588704079674268647925524858402564822809018562240131432396151*a^7-3062.124943339760129219656222429329602995172168558081544206872235816258108390142091508467676886602552*a^8+1419.161466628264212988621492211939809097559453474182385809990554936216592522540270481899308288835179*a^9-285.5632912305122964461160136643477626369817953502233169909822129018875329729882841139629237168807451*a^10: #@ schwarz_d_approx schwarz_d_approx := (a) -> 0.6058377776502591150030967209491610331137537677546949034892689791801117384031868648857514189653909987/a^2-.5757005908854302939614660937646876562654754515805005628087462836547958761923587568388355714371388714/a+5.021674398133655864578418815878447581276579088374614078136131501609845114356760506017104132006848330-43.16353936606263677547932945959892277835334907696685728427630724492400682586012593021292899097419813*a+241.8407229892773138470807499563123837224094002654279722152557185141028854360356546579916505481536750*a^2-879.0714590308607269819325703549455540514915711553653262927964838656598213111121450666908004116820733*a^3+2076.040895943393049644902980965714646064319589501870239295214407029360258959685895189594048279798827*a^4-3142.620916760244192487301982269231601288293368722269041885451780412098378428607098882183962177408837*a^5+2932.327786651674606817506043850011956678724313527912316782251698822788840925528158290855391540457352*a^6-1532.037358618056904591964225256643925414126844321878829249902243192169256224299948152044642786850792*a^7+342.3168903638456056003706421234452452496222552478738690336322529610781181380798425890881658924475955*a^8: