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$