06/29/2011, 05:05 AM
(This post was last modified: 06/29/2011, 10:24 PM by sheldonison.)

(06/29/2011, 02:42 AM)JmsNxn Wrote: That's funny, I was just thinking about . Naively I wanna say it's because which is what usually occurs in the self root function. However this would imply real to imaginary which isn't very pretty.Hey James,

Funny that the code fails around it tho. I think there is something special about , I'm just not sure what.

You are correct and I think you stated the problem more clearly then I can. The Schroder function limit equations don't seem to quite match the inverse Schroder function limit equations for this base, and using more iterations doesn't seem to help, and using a smaller radius doesn't seem to help. So that in turn means my superfunction and its inverse are only approximately inverses of each other. And that in turn messes up the theta calculation so it stops converging. And all of this is somehow because in the limit, L=i, and in the limit, the function is rotating around approximately pi/2 per iteration.

But I really don't understand it and I'm not sure how to fix it. When I graph , around the unit circle, with a small radius for z, I get this ugly noisy error term. Here, h is the Schroeder function, which is used to generate the inverse superfunction. Alternatively, graphing gives similar ugly results. This plot was calculated with \p 134, for 134 significant digits of precision, which should have left 66 or 67 digits of accuracy...

I think a closed form for the coefficients of the Schroeder and inverse Schroeder series might work better.... At least this problem seems to effect only this one base, exp(Pi/2). Here is a code fragment, to generate the Schroeder and inverse Schroeder functions, and then generate the plot above. In the real code, of course these numbers would be slightly more approximate, with very small error terms, but that doesn't seem to matter.

- Sheldon

Code:

`\p 134`

L=I; /* fixed point */

B=exp(Pi/2); /* base */

lnB=Pi/2; /* log(base) */

rlnB=1/lnB; /* 1/log(base) */

logLxlnB = log(I*lnB); /* =log(log(L)) */

scnt = 336; /* 336 iteration count, good for 67 digits of precision in the superfunction */

superm = real(exp(-scnt*logLxlnB)); /* multiplier, for superfunction; real valued number */

isuperm = real(exp(scnt*logLxlnB)); /* multiplier, inverse superfunction, also real number */

superf(z) = {

/* complex valued superfunction for base B, generated from the fixed point I */

/* This is the inverse Schroeder function */

local (i,y);

y=L+z*superm;

for (i=1,scnt, y=exp(y*lnB));

return(y);

}

isuperf(z) = {

/* complex valued inverse superfunction for base B, generated from the fixed point L */

/* This is the Schroeder function */

local (y,i);

y=z;

for (i=1,scnt, y=log(y)*rlnB); /* rlnB=1/log(B) */

y=y-L;

y=y*isuperm;

return(y);

}

ploth(t=0,2*Pi,x=0.1*exp(t*I);z=superf(isuperf(L+x))-L-x;[real(z),imag(z)]);

ploth(t=0.001,1.999*Pi,x=0.1*exp(t*I);z=isuperf(superf(x))-x;[real(z),imag(z)]);

Also, there's a big error spike in the imaginary of:

isuperf(superf(0.1))-0.1

2.123527622415261486036 E-29 + 2.929305537712787288382 E-24*I