How can I perform a polynomial division or deconvolution of two polynomials with two independent variables (e.g., x and y)?

Hi,
if I have two functions f(x,y) and g(x,y), which are both polynomials of order >2, how can I find their greatest common divisor? Is there a simple way to perform the deconvolution of the parameters in order to arrive at the resulting parameters for the polynomial h(x,y), which solves f(x,y)=h(x,y)*g(x,y)?
Edit: I have followed an implementation that uses FFT / iFFT: polyMatrix1=zeros((maxExpX1+1),(maxExpY1)+1); %a*x^0*y^0 is located at polyMatrix1(1,1). b*x^0*y^1 is located at polyMatrix1(1,2). c*x^1*y^0 is located at polyMatrix1(2,1)
polyMatrix2=zeros((maxExpX2+1),(maxExpY2)+1); %same holds for this matrix
%Assumption: in f(x,y) / g(x,y) -- polyMatrix1 represents f(x,y) and polyMatrix2 represents g(x,y). polyMatrix2padded = padarray(polyMatrix2,[size(polyMatrix1,1)-size(polyMatrix2,1),size(polyMatrix1,2)-size(polyMatrix2,2)],'post');
poly1FFT=fft2(polyMatrix1);
poly2FFT = fft2(polyMatrix2padded);
poloutFFT=poly1FFT./poly2FFT;
outMat = ifft2 ( poloutFFT );
It works well for polynomials that result from a multiplication of two real-valued polynomials, like:
g=(x.^2 + 2.* y.*x + 5 .*y.^2);
h=(3.* x.^3 + 4.* y);
f=3.* x.^5 + 4.* x.^2 .*y + 6.* x.^4 .*y + 8.* x .*y.^2 + 15 .*x.^3.* y.^2 + 20 .*y.^3;
However, I need some help interpreting the result matrix outMat when I divide g by an abitrarily chosen function, such as: g2=(3.34.* x.^2+2.45.*x.*y + 4.22.* y.^2);
outMat then reads:
-0.0000 3.9121 0.0000 -0.7912 0.0000 -0.0000
1.4066 0.0000 1.0879 -0.0000 0.0000 0.0000
-0.0000 0.5934 -0.0000 0.0000 -0.0000 -1.9341
2.9341 -0.0000 -0.0000 -0.0000 -1.0549 -0.0000
-0.0000 -0.0000 0.0000 1.4505 -0.0000 1.0549
0.0000 0.0000 0.7912 0.0000 -1.4505 0.0000
The highest order in x is 3 (x^3) and the highest order in y is 1. That means all coefficients of the polynomial are retrieved from the sub matrix outMat(1:4,1:2). How do I interpret the nonzero values in the rest of outMat? Do they denote another polynomial? Or do they denote negative orders, such as x^-1 etc?

Antworten (1)

Try
  1. deconv() in base MATLAB.
  2. deconvlucy() in the Image Processing Toolbox.
  3. deconvwnr() in the Image Processing Toolbox.
  4. deconvblind() in the Image Processing Toolbox.
  5. deconvreg() in the Image Processing Toolbox.

Kategorien

Tags

Gefragt:

am 20 Nov. 2017

Bearbeitet:

am 21 Nov. 2017

Community Treasure Hunt

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

Start Hunting!

Translated by