[BACK]Return to taka_weyl.rr CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-contrib / packages / src

File: [local] / OpenXM / src / asir-contrib / packages / src / taka_weyl.rr (download)

Revision 1.3, Sat Nov 16 08:09:31 2002 UTC (21 years, 6 months ago) by takayama
Branch: MAIN
CVS Tags: R_1_3_1-2, RELEASE_1_3_1_13b, RELEASE_1_2_3_12, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, KNOPPIX_2006, HEAD, DEB_REL_1_2_3-9
Changes since 1.2: +2 -1 lines

taka_runge_kutta.rr : the fourth order adaptive Runge-Kutta method.
taka_pfp.rr         : Evaluating p F p-1 by using the fourth order adaptive
                      Runge-Kutta method. (work in progress)
                      As for algorithmic aspects, see Numerical Recipes.

/* $OpenXM: OpenXM/src/asir-contrib/packages/src/taka_weyl.rr,v 1.3 2002/11/16 08:09:31 takayama Exp $ */
/* They have not yet been registed in names.rr */

/*&usage begin:
  taka_weyl_act(L,VDlist,F) 
  example: taka_weyl_act((x-y)*dx*dy+1,[[x,y],[dx,dy]],(x-y)^3);
  end:
*/
def taka_weyl_act(L,VDlist,F) {
  Vlist = VDlist[0];
  Dlist = VDlist[1];
  N=length(Vlist);
  if (N != length(Dlist)) error("taka_weyl_act: invalid format of VDlist.");
  if (N == 0) return L*F;
  X = car(Vlist);
  D = car(Dlist);
  Deg = deg(L,D);
  R = 0;
  for (I=0; I<=Deg; I++) {
    FF = F;
    C = coef(L,I,D); /* C*dx^I  F */
    for (J=0; J<I; J++) {
      FF = diff(FF,X);
    }
    if (FF != 0) {
      R += taka_weyl_act(C,[cdr(Vlist),cdr(Dlist)],FF);
    }
  }
  return R;
}
def taka_weyl_assert() {
  F = (x-y)^3+x+2;
  A = taka_weyl_act(1,[[x,y],[dx,dy]],F);
  B = F;
  print(A-B);

  A = taka_weyl_act((y+1)*dx^2,[[x,y],[dx,dy]],F);
  B = (y+1)*diff(F,x,x);
  print(A-B);

  A = taka_weyl_act((y+1)*dy^2,[[x,y],[dx,dy]],F);
  B = (y+1)*diff(F,y,y);
  print(A-B);

  A = taka_weyl_act((y+1)*dx*dy^2+x*dx,[[x,y],[dx,dy]],F);
  B = (y+1)*diff(F,x,y,y)+x*diff(F,x);
  print(A-B);

}

/*&usage  begin:
  taka_partial_diff((x-y)^5,[[x,2],[y,1]]);
*/
def taka_partial_diff(F,Dlist) {
  N = length(Dlist);
  for (I=0; I<N; I++) {
    D = Dlist[I][0];
    M = Dlist[I][1];
    for (J=0; J<M; J++) {
      F = diff(F,D);
    }
  }
  return F;
}

Load_taka_weyl=1$
end$