Karim Belabas on Wed, 03 Oct 2018 18:12:09 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: vector version of gcdext? |
* J E Cremona [2018-10-03 17:48]: > The function gcd() allows 2 inputs as in gcd(2,3) or a vector of inputs as > in gcd([6,10,15]), but the extended version only allows the first form. > It would not be hard to write an extended vector version (and I can of > course write my own) -- feature request? See ??mathnf ("For convenience, M is allowed to be a t_VEC...") > One way to do this is using Smith Normal Form, i.e. matsnf. But there is a > problem when the input are polynomials: > > > H = [6,10,15] > %3 = [6, 10, 15] > ? matsnf(Mat(H),3) > %4 = [Mat(1), [-5, -30, -14; 3, 15, 7; 0, 2, 1], Mat([0, 0, 1])] ? [v,U] = mathnf(H, 1); ? v %3 = [1] ? U %4 = [ 0 -5 1] [-3 0 1] [ 2 2 -1] ? H*U %5 = [0, 0, 1] > ? H = [x,x+1,x+2] > %7 = [x, x + 1, x + 2] > ? matsnf(Mat(H),3) > *** at top-level: matsnf(Mat(H),3) > *** ^---------------- > *** matsnf: inconsistent dimensions in gsmithall. > *** Break loop: type 'break' to go back to GP prompt > > I used the flag value 3=1+2 to get the multiplier matrices and allow > polynomials Flag 2 is obsolete: don't use it.Exact same construction works for both integer and polynomials... ? [v,U] = mathnf(H, 1); ? v %9 = [1] ? U %10 = [-x - 2 -x - 1 -1] [ x + 2 x 1] [ -1 0 0] ? H*U %11 = [0, 0, 1] > , but (as is documented) this is only implemented for square > matrices in the polynomial case. That means that I can pad the matrix > using n-1 rows of zeros and extract the answer, but I would prefer not to > have to do this. Using mathnf instead of matsnf should do the trick. 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 21 23 351, cours de la Liberation http://www.math.u-bordeaux.fr/~kbelabas/ F-33405 Talence (France) http://pari.math.u-bordeaux.fr/ [PARI/GP] `