- Given: F=GF(p), A\in{}F^{n*n}[x]
- Let d=\sum_{i=1}^{i=m}\max_{j\in\{1..n\}}\deg(A_{i,j})
- (Choose d to be the sum of the maximum row degrees)
- Let d\leftarrow{}\min\left\{k|2^{k}>d+1\right\}
- (Add 1 to d and round up to the nearest power of 2)
- Let EF=GF(p^{e}) where p^{e}=\min{\left\{k|\geq{}d\right\}}
- Map the elements of A to EF homomorphicaly
- Choose d distinct points p_{i} in EF
- Compute \forall{}i\in\left\{1..d\right\}:v_{i}=det(A(p_{i}))
- Interpolate the polynomial P(x) of minimal degree that fits the points v_{i}
- Map the coefficients of P(x) back to the ground field and return
Having gotten polynomial determinants working the next step is to adapt the Smith Normal Form code to use this functionality. My plan is to implement a ring class that will automatically perform operations mod the determinant polynomial P(x). The SmithFormIliopolus code was intended to work in a similar manner, albeit over the integers. With luck I'll be able to reuse the field extension code which already does everything mod a polynomial, and just tell it to use an arbitrary polynomial instead.
I'm also looking into using chinese remaindering to compute the invariant factors of integer matrices. With luck this should be as simple as wrapping the existing finite field code with a call to the existing CRADomain code, and performing a quick verification step. It should also provide more opportunities for parallelism since this step is embarrassingly parallel.
No comments:
Post a Comment