Charles Greathouse on Mon, 22 Feb 2010 05:54:25 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Getting the variable number of a lexical local variable |
I still can't seem to make it work properly with multiple variables. If I'm in a loop with formal variable y and I check polcoeff0(expr, 3, -1) with expr = 3*y + 5*x, it gives me 5, not 3. I would like a way to get 3 when the formal variable is y and 5 when the formal variable is x. Can this be done? I understand that there are no multivariable polynomials in Pari, so that 3*y may simply be the constant term of a polynomial in x. But at the moment I can't even figure out whether my function was called with sumformal(y=1, n, 3*y + 5*x) or sumformal(y=1, n, 3*y + 5*x) . I've attached my source, if this would help anyone understand what I'm doing. Faulhaber(n, a) returns the n-Faulhaber polynomial (in a). GEN sumformal(GEN start, GEN end, GEN expr) { pari_sp ltop = avma; GEN c, F, res = gen_0, ret; GEN x = pol_x(-1); long t = typ(expr); if (t == t_INT || t == t_REAL || t == t_COMPLEX) { ret = gmul(gaddgs(gsub(end, start), 1), expr); ret = gerepileupto(ltop, ret); return ret; } if (t != t_POL) pari_err(notpoler, "sumformal; can only handle polynomials, not arbitrary functions"); pari_sp btop = avma, st_lim = stack_lim(btop, 1); long d = degree(expr) + 1; while (--d) { c = truecoeff(expr, d); F = Faulhaber(d, x); res = gadd(res, gmul(c, gsub(gsubstpol(F, x, end), gsubstpol(F, x, gsubgs(start, 1))))); if (low_stack(st_lim, stack_lim(btop, 1))) gerepileall(btop, 4, &d, &c, &res, &expr); } ret = gadd(res, gmul(gaddgs(gsub(end, start), 1), truecoeff(expr, 0))); ret = gerepileupto(ltop, ret); return ret; } Charles Greathouse Analyst/Programmer Case Western Reserve University On Wed, Feb 17, 2010 at 2:37 AM, Bill Allombert <Bill.Allombert@math.u-bordeaux1.fr> wrote: > On Tue, Feb 16, 2010 at 11:10:43PM -0500, Charles Greathouse wrote: >> I'm trying to get the variable number of a lexical variable, but I >> can't seem to figure out how to do that. >> >> If I have a function with a V in the prototype, like a custom for >> loop, how do I know which variable was used? > > This is always -1. > > See > ??"Functions to deal with lexical local variables"@5 > >> In my case, I would like to be able to distinguish between calls to >> sumformal(x=1, N, x^2 * y) >> and >> sumformal(y=1, N, x^2 * y) > > What is the difference with sum() ? > > Cheers, > Bill >