|
D.14.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.
|