Chinese Remainder Theorem for Polynomials

Verifies the Chinese Remainder Theorem for Polynomials (of "congruence")
1.7K Downloads
Updated 14 Jul 2005

No License

15th July, 2005 : Poly_POWER.m is now corrected !

So, for most reasonable cases of Multiple Roots including Multiple Real Roots, Poly_POWER.m should now work.

********************

Functional Description of Ch_Rem_Thr_Poly.m :

Assume that we need to find a solution c_soln_Poly
such that it satisfies the foll 4 equations :
Remainder of c_soln_Poly divided by ( 16.x^3 + 5.x^2 + 9.x + 4 ) = 1
Remainder of c_soln_Poly divided by ( 2.x^3 + 11.x^2 + 7.x + 14 ) = 2
Remainder of c_soln_Poly divided by ( 3.x^3 + 10.x^2 + 6.x + 15 ) = 3
Remainder of c_soln_Poly divided by ( 13.x^3 + 8.x^2 + 12.x + 1 ) = 4

The solution c_soln_Poly is :
-0.2561.x^11 -2.1843.x^10 -5.1302.x^9 -4.4053.x^8 ...
-4.0876.x^7 +11.9307.x^6 +23.1045.x^5 +33.0426.x^4 ...
+36.8186.x^3 +20.7266.x^2 +13.9833.x +5.0903

Now, how did we find this c_soln_Poly ?
The answer is this Programme, the application of the Chinese Remainder
Theorem for Polynomials.

The above problem can be stated in a more mathematical language as :
c_soln_Poly =eqvt mod ( 1, { Poly with coeffs : [16 5 9 4] } )
c_soln_Poly =eqvt mod ( 2, { Poly with coeffs : [ 2 11 7 14] } )
c_soln_Poly =eqvt mod ( 3, { Poly with coeffs : [ 3 10 6 15] } )
c_soln_Poly =eqvt mod ( 4, { Poly with coeffs : [13 8 12 1] } )

where "=eqvt" implies "congruence" with the usual symbol of 3 equal-to lines.

The Poly coeffs used above are nothing but columns of magic(4)
ie, we have made Polynomials out of the column-wise coeffs of magic(4).
mk_Poly = magic(4) ;

That the Remainders are resp 1, 2, 3 and 4 wrt the 4 Polys of magic(4)
can be verified by :
[QT, RT] = deconv ( c_soln_Poly, mk_Poly (:, 1) ) ; % RT = 1
[QT, RT] = deconv ( c_soln_Poly, mk_Poly (:, 2) ) ; % RT = 2
[QT, RT] = deconv ( c_soln_Poly, mk_Poly (:, 3) ) ; % RT = 3
[QT, RT] = deconv ( c_soln_Poly, mk_Poly (:, 4) ) ; % RT = 4

The Chinese Remainder Theorem for Polynomials is defined in
still more mathematical notations in literature as follows
(for eg, in the book by Richard Blahut / P77) :
For any set of Pair-wise Coprime Polynomials [m1(x), m2(x), ... mk(x)],
the set of congruences :
c(x) =eqvt mod ( ck(x), mk(x) ), k = 1, 2, ... k
has a unique solution of a degree less than the degree
of M(x) = prod (m1(x), m2(x), ... mk(x)), given by :
c_soln_Poly(x) = sum ( mod ( ck(x).Nk(x).Mk(x), M(x) ) )
where Mk(x) = M(x) / mk(x), and Nk(x) is the Polynomial that satisfies
Nk(x).Mk(x) + nk(x).mk(x) = GCD = 1
(this is where we need to use my programmes Poly_GCD.m and Poly_GCD_Main.m)

I understood these notations better only after / when I read P 21
of the book by Neal Koblitz describing the Chinese Remainder Theorem
for Integers. Blahut also describes the Chinese Remainder Theorem
for Integers in P 70.
Please also refer to my programme Ch_Rem_Thr_Int.m for Integers.
This programme for Polynomials is developed partly based on similar concepts.

One of the most important prerequisites for this Theorem and
the programme, is that the Column-wise Polys of input mk_Poly
be Pair-wise Coprime. So, we first check if all the k*(k-1)/2

This programme makes heavy usage of the other programme Poly_GCD.m,
and hence, is also subject to the same constraints and limitations,
only these limitations are still more stringent here.
I have so far observed only 2 Non-convergent cases :
Poly 2 of magic(8), Poly 4 of magic(7)
These two cases can be good test cases for any future
changes in the empirical logics of this programme.
It will be highly desirable to find a logic that will give GCD = 1
for these cases.

Should also generally work for R13 and R12 (but Poly_POWER cannot work only in R12).

Cite As

Sundar Krishnan (2024). Chinese Remainder Theorem for Polynomials (https://www.mathworks.com/matlabcentral/fileexchange/5841-chinese-remainder-theorem-for-polynomials), MATLAB Central File Exchange. Retrieved .

MATLAB Release Compatibility
Created with R14
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
Version Published Release Notes
1.0.0.0

Fractional Part of Poly_POWER.m is corrected.