#                                        Ren-Cang Li, June 1, 1996
#                                        na.rcli@na-net.ornl.gov

with(linalg):
nstep:=31: nstep12:=floor(nstep/2):
c:=vector(nstep12,[]): cs:=vector(nstep12+1,[]):
for i from 1 to nstep12 do
    cs[i]:=c[i]:
od:
cs[nstep12+1]:=1-cs[nstep12]:

delta[nstep12]:=cs[1]:
for i from nstep12-1 to 0 by -1 do 
    delta[i]:=cs[nstep12+1-i]-cs[nstep12-i]: 
od:

a1:=delta[0]:
a3:=delta[0]^3: 
a5:=delta[0]^5: b5:=0:
a7:=delta[0]^7: b7:=0: c7:=0: d7:=0:
a9:=delta[0]^9: b9:=0: c9:=0: d9:=0: e9:=0: f9:=0: g9:=0: h9:=0:

for i from 1 to nstep12 do
    Newa1 := a1 + 2*delta[i];
    Newa3 := a3 + 2*delta[i]^3;
    Newa5 := a5 + 2*delta[i]^5;
    Newb5 := b5 - (a1*a3*delta[i])/6 - (a3*delta[i]^2)/6 
		+ (a1^2*delta[i]^3)/6 + (a1*delta[i]^4)/6;
    Newa7 := a7 + 2*delta[i]^7;
    Newb7 := b7 - (a1*a5*delta[i])/6 - (a5*delta[i]^2)/6 
	        + (a1^2*delta[i]^5)/6 + (a1*delta[i]^6)/6;
    Newc7 := c7 + (a1^3*a3*delta[i])/360 - (a1*b5*delta[i])/6 
		+ (a1^2*a3*delta[i]^2)/45 - (b5*delta[i]^2)/6 
		- (a1^4*delta[i]^3)/360 + (7*a1*a3*delta[i]^3)/180 
		- (a1^3*delta[i]^4)/45 + (7*a3*delta[i]^4)/360 
		- (7*a1^2*delta[i]^5)/180 - (7*a1*delta[i]^6)/360;
    Newd7 := d7 - (a3^2*delta[i])/6 + (a1*a3*delta[i]^3)/6 
		- (a3*delta[i]^4)/6 + (a1*delta[i]^6)/6;
    Newa9 := a9 + 2*delta[i]^9;
    Newb9 := b9 - (a1*a7*delta[i])/6 - (a7*delta[i]^2)/6 
		+ (a1^2*delta[i]^7)/6 + (a1*delta[i]^8)/6;
    Newc9 := c9 + (a1^3*a5*delta[i])/360 - (a1*b7*delta[i])/6 
		+ (a1^2*a5*delta[i]^2)/45 - (b7*delta[i]^2)/6 
		+ (7*a1*a5*delta[i]^3)/180 + (7*a5*delta[i]^4)/360 
		- (a1^4*delta[i]^5)/360 - (a1^3*delta[i]^6)/45 
		- (7*a1^2*delta[i]^7)/180 - (7*a1*delta[i]^8)/360;
    Newd9 := d9 + (a3*a5*delta[i])/6 - (a1*a5*delta[i]^3)/3 
		- (a5*delta[i]^4)/6 + (a1*a3*delta[i]^5)/6 
		+ (a3*delta[i]^6)/3 - (a1*delta[i]^8)/6; 
    Newe9 := e9 - (a3*a5*delta[i])/3 + (a1*a5*delta[i]^3)/6 
		- (a5*delta[i]^4)/6 + (a1*a3*delta[i]^5)/6 
		- (a3*delta[i]^6)/6 + (a1*delta[i]^8)/3;
    Newf9 := f9 + (a1^2*a3^2*delta[i])/180 + (a3*b5*delta[i])/6 
		+ (a1*a3^2*delta[i]^2)/90 - (a1^3*a3*delta[i]^3)/180 
		+ (a3^2*delta[i]^3)/60 - (a1*b5*delta[i]^3)/3 
		+ (a1^2*a3*delta[i]^4)/45 - (b5*delta[i]^4)/6 
		+ (2*a1*a3*delta[i]^5)/45 - (a1^3*delta[i]^6)/30 
		+ (7*a3*delta[i]^6)/180 - (11*a1^2*delta[i]^7)/180 
		- (7*a1*delta[i]^8)/180 - (a1*delta[i]*d7)/6 
		- (delta[i]^2*d7)/6;
    Newg9 := g9 + (a1^2*a3^2*delta[i])/360 - (a3*b5*delta[i])/3 
		+ (a1*a3^2*delta[i]^2)/30 - (a1^3*a3*delta[i]^3)/360 
		+ (a3^2*delta[i]^3)/45 + (a1*b5*delta[i]^3)/6 
		- (2*a1^2*a3*delta[i]^4)/45 - (b5*delta[i]^4)/6 
		- (a1*a3*delta[i]^5)/180 + (a1^3*delta[i]^6)/90 
		+ (7*a3*delta[i]^6)/360 - (a1^2*delta[i]^7)/60 
		- (7*a1*delta[i]^8)/360;
    Newh9 := h9 - (a1^5*a3*delta[i])/15120 + (a1^3*b5*delta[i])/360 
		- (a1*c7*delta[i])/6 - (a1^4*a3*delta[i]^2)/1260 
		+ (a1^2*b5*delta[i]^2)/45 - (c7*delta[i]^2)/6 
		+ (a1^6*delta[i]^3)/15120 - (53*a1^3*a3*delta[i]^3)/15120 
		+ (7*a1*b5*delta[i]^3)/180 + (a1^5*delta[i]^4)/1260 
		- (13*a1^2*a3*delta[i]^4)/1890 + (7*b5*delta[i]^4)/360 
		+ (53*a1^4*delta[i]^5)/15120 - (31*a1*a3*delta[i]^5)/5040 
		+ (13*a1^3*delta[i]^6)/1890 - (31*a3*delta[i]^6)/15120 
		+ (31*a1^2*delta[i]^7)/5040 + (31*a1*delta[i]^8)/15120; 
   a1:=simplify(expand( Newa1 ));
   a3:=simplify(expand( Newa3 )); 
   a5:=simplify(expand( Newa5 )); b5:=simplify(expand( Newb5 ));
   a7:=simplify(expand( Newa7 )); b7:=simplify(expand( Newb7 )); 
   c7:=simplify(expand( Newc7 )); d7:=simplify(expand( Newd7 ));
   a9:=simplify(expand( Newa9 )); b9:=simplify(expand( Newb9 )); 
   c9:=simplify(expand( Newc9 )); d9:=simplify(expand( Newd9 )); 
   e9:=simplify(expand( Newe9 )); f9:=simplify(expand( Newf9 )); 
   g9:=simplify(expand( Newg9 )); h9:=simplify(expand( Newh9 ));
od:

f[1]:=a3: 
f[2]:=a5:  f[3]:=b5:
f[4]:=a7:  f[5]:=b7:  f[6]:=c7:  f[7]:=d7:
f[8]:=a9:  f[9]:=b9:  f[10]:=c9: f[11]:=d9: 
f[12]:=e9: f[13]:=f9: f[14]:=g9: f[15]:=h9:

for i from 1 to nstep12 do
    for j from 1 to nstep12 do
        g[i][j]:=diff(f[i],c[j]);
    od:
od:
