Karim Belabas on Sun, 17 Aug 2014 09:20:56 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Vec() and leading zeros of generating function |
* Kevin Ryde [2014-08-16 07:47]: > Vec() can give terms from a polynomial generating function but it > doesn't include leading zeros. Eg. > > Vec(x^2/(1-2*x) + O(x^5)) > => > [1, 2, 4] > > Is there a good way to start from the zero'th term so I would get > > [0, 0, 1, 2, 4] > > I have to confess to only doing this by cut-and-paste programming, so > perhaps there's something completely different I don't know which is > better. :-) My main use has been to compare against expected or desired > values, so > > want = [1, -1, 1, -1] > Vec(1/(1+x) + O(x^length(want))) == want || error("oops") You can use Vec's optional "length" parameter (making it negative prepends 0s instead of appending them): want = [0,0,1,2,4]; s = x^2/(1-2*x) + O(x^5); ? Vec(s,5) %3 = [1, 2, 4, 0, 0] \\ fix length = 5, append 0s ? Vec(s,-5) %4 = [0, 0, 1, 2, 4] \\ prepend ? Vec(s, -#want) == want \\ note the '-' #want %5 = 1 The is often marginally easier than concatenating 0s yourself, as others already suggested. (As Loic's suggestion, this requires care if the series has negative valuation: set the reference value accordingly...) It might be simpler to just convert the desired value to generating function form first (=> t_SER) instead ? want = Ser(want) %5 = x^2 + 2*x^3 + 4*x^4 + O(x^5) ? s == want %6 = 1 (use === instead of == if you insist on having the same accuracy, i.e. "identical" series instead of merely "equal to given accyracy" ones) Cheers, K.B. -- Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17 Universite de Bordeaux Fax: (+33) (0)5 40 00 69 50 351, cours de la Liberation http://www.math.u-bordeaux1.fr/~kbelabas/ F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP] `