=================================================================== RCS file: /home/cvs/OpenXM/src/asir-contrib/packages/src/tk_fd.rr,v retrieving revision 1.1 retrieving revision 1.3 diff -u -p -r1.1 -r1.3 --- OpenXM/src/asir-contrib/packages/src/tk_fd.rr 2014/05/23 22:32:49 1.1 +++ OpenXM/src/asir-contrib/packages/src/tk_fd.rr 2014/06/29 00:53:37 1.3 @@ -1,4 +1,4 @@ -/* $OpenXM$ */ +/* $OpenXM: OpenXM/src/asir-contrib/packages/src/tk_fd.rr,v 1.2 2014/06/04 23:44:17 takayama Exp $ */ /* 2015.05.23 h-mle/FD/Prog/fdpf.rr --> tk_fd.rr */ @@ -28,6 +28,11 @@ extern FD_AA$ extern FD_BB$ extern FD_CC$ extern FD_XX$ +extern YgFD_Dmat$ +extern YgFD_AA$ +extern YgFD_BB$ +extern YgFD_CC$ +extern YgFD_XX$ #else module tk_fd; static Alpha$ @@ -44,6 +49,11 @@ static FD_AA$ static FD_BB$ static FD_CC$ static FD_XX$ +static YgFD_Dmat$ +static YgFD_AA$ +static YgFD_BB$ +static YgFD_CC$ +static YgFD_XX$ localf setparam$ localf setparam_by_number$ @@ -57,7 +67,7 @@ localf check1$ localf ee$ localf vv$ localf vv0$ -localf dx$ +localf dxx$ localf xij$ localf psi$ localf mycoefl$ @@ -128,6 +138,13 @@ localf feval$ localf check19$ localf check19_out$ localf ah_init_value$ +localf ygNmat$ +localf ygCmat$ +localf ygRmat$ +localf ygdmat_abc$ +localf ygfvect_poly$ +localf ygahvec$ +localf ygtry15$ #endif /* Matsumoto, page 3 */ @@ -263,11 +280,20 @@ def vv0(J) { return V; } +def dxx(I) { + if (I == 0) return 0; + if (I == (MM+1)) return 0; + return util_v(dx,[I]); +} +/* bug: or specification? tk_fd.dx(1) return tk_fd.dx_1 + bug: error in module in loading by cmdasir causes a hung of asirgui. + e.g. function is not defined. def dx(I) { if (I == 0) return 0; if (I == (MM+1)) return 0; return util_v(dx,[I]); } +*/ /* 1/(x_i-x_j) is expressed as y_{ij} */ def xij(I,J) { @@ -289,7 +315,7 @@ def psi() { C = intmat(); for (I=0; I0) X=base_replace(X,Xrule); + setparam_abc(M,A,B,C); + R=ygRmat(X,M+1); + R=((A-1)/(C-A))*R*matrix_inverse(ygCmat()); + return map(red,R); +} + +def ygfvect_poly(A,B,C,X) { + YgEvalDmat=1; + if (type(X) == 4) X=newvect(length(X),X); + if (taka_base_equal(B,YgFD_BB) && + taka_base_equal(C,YgFD_CC) && + taka_base_equal(X,YgFD_XX) && (YgFD_Dmat != 0)) YgEvalDmat=0; + M = length(B); + Xrule = assoc(xvars(M),vtol(X)); + if (YgEvalDmat) { + printf("Computing ygDmat for parameters B=%a,C=%a,X=%a\n",B,C,X); + setparam_abc(M,a,B,C); + getparam(); + YgFD_Dmat=ygdmat_abc(a,B,C | xrule=Xrule); + YgFD_BB=B; YgFD_CC=C; YgFD_XX=X; + printf("\nDone.\n"); + } + Dmat = matrix_list_to_matrix(YgFD_Dmat); + if (type(X) == 5) X=vtol(X); + if (!number_is_integer(A)) error("A must be an integer."); + if (A <= -1) { + F=fvect(-1,B,C,X | approx=2); + for (I=-1; I>A; I--) { + Down = base_replace(Dmat,[[a,I]]); + F = Down*F; + } + return F; + } else { + error("A must be less than 0"); + } +} + +def ygahvec(A,B,C,Y) { + Opt=getopt(); + if (type(getopt(norecc)) >0) UseRecc=0; else UseRecc=1; + M = length(B); + E = newmat(2,M+1); + E[0][0] = -A; E[1][0] = C-1; + for (J=1; J<=M; J++) E[1][J] = -B[J-1]; + X=newvect(M); + for (I=0; I