Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Compute an approximate GCD to a pair of polynomials with approximate coefficients
ResourceFunction["ApproximatePolynomialGCD"][poly1,poly2] computes a polynomial that is, to reasonable approximation, a largest-degree divisor of both poly1 and poly2. |
Compute the approximate GCD of a pair of univariate polynomials:
In[1]:= | ![]() |
Out[3]= | ![]() |
Compare to the GCD from rounding the coefficients of these polynomials:
In[4]:= | ![]() |
Out[5]= | ![]() |
They are very close up to a constant multiple:
In[6]:= | ![]() |
Out[6]= | ![]() |
Compute the approximate GCD of a pair of bivariate polynomials:
In[7]:= | ![]() |
Out[8]= | ![]() |
Perturb a factor to create a pair of bivariate polynomials with an approximate factor in common:
In[9]:= | ![]() |
Some of zero contours are quite similar:
In[10]:= | ![]() |
Out[10]= | ![]() |
Recover the approximate GCD:
In[11]:= | ![]() |
Out[11]= | ![]() |
Check that the result, suitably normalized, is close to the known approximate common factor:
In[12]:= | ![]() |
Out[12]= | ![]() |
The zero contour of the approximate GCD is similar to the similar contours from the inputs:
In[13]:= | ![]() |
Out[13]= | ![]() |
In[14]:= | ![]() |
Compute the approximate GCD:
In[15]:= | ![]() |
Out[15]= | ![]() |
Find the GCD of the unnoised polynomials:
In[16]:= | ![]() |
Out[16]= | ![]() |
Normalize and check that the difference is close to zero:
In[17]:= | ![]() |
Out[17]= | ![]() |
Create a system with a known GCD and add a large noise term in y2 to the second polynomial along with several smaller noise terms:
In[18]:= | ![]() |
A large tolerance can allow an approximate GCD to have terms of excessive degree:
In[19]:= | ![]() |
Out[19]= | ![]() |
With a tighter tolerance these disappear:
In[20]:= | ![]() |
Out[20]= | ![]() |
Wolfram Language 13.0 (December 2021) or above
This work is licensed under a Creative Commons Attribution 4.0 International License