#### D.15.1.14 arrCoordChange

Procedure from library `arr.lib` (see arr_lib).

Usage:
  arrCoordChange(A, T); arr A, (m*n mat) n*n or n*n+1 matrix T arrCoordChange(A, T , c); arr A, n*n matrix T, n*1 matrix/vector

Return:
  [arr]: Arrangement A [A|b] after a coordinate change f: x -> Tx + c with T invertible i.e. [A|b] => [AT^-1|b+AT^-1c] since we have
  f(H) = f(ker(a1*x1 + ... + an*xn - b)) = {f(x) : a'x -b = 0} = {y : a'f^-1(y) -b = 0)}
  = {y : a'(T^-1(y-c)) - b = 0}
  = {y : a'T^-1y -(b + a'T^-1c) = 0}

Note:
  There are 3 options how you can give the input (in each case n <= nvars(basering)) 1. Just a nxn matrix with
  => Will automatically complete T by a unit matrix and perform x -> Tx 2. A nxn matrix T and a nx1 vector/matrix c with
  => Will automatically complete T and c and perform x -> Tx +c 3. A nxn+1 matrix T with
  => will use last column as translation vector c

Example:

    LIB "arr.lib";
    ring r = 0,(x,y,z),lp;
    arr A = x,y,z;
    arrCoordChange(A,1,[0,0,1]); //lifts z-hyperplane by 1 unit
    ==> _[1]=x
    ==> _[2]=y
    ==> _[3]=z-1
    ==>
    matrix T[2][2] = [0,1,1,0];  // swaps x and y
    arrCoordChange(A,T);
    ==> _[1]=y
    ==> _[2]=x
    ==> _[3]=z
    ==>
    matrix c[2][1] = [1,0];
    T = concat(T,c);            // now swap x and y and add 1 to x afterwards
    arrCoordChange(A,T);
    ==> _[1]=y
    ==> _[2]=x-1
    ==> _[3]=z
    ==>
    // Note how T doesn't even need to be a full 3x3 base change matrix.

See also: arrCoordChange; arrCoordNormalize.

User manual for Singular version 4-0-3, 2016, generated by texi2html.