How can I perform a polynomial division or deconvolution of two polynomials with two independent variables (e.g., x and y)?
Ältere Kommentare anzeigen
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)
Image Analyst
am 21 Nov. 2017
0 Stimmen
Try
- deconv() in base MATLAB.
- deconvlucy() in the Image Processing Toolbox.
- deconvwnr() in the Image Processing Toolbox.
- deconvblind() in the Image Processing Toolbox.
- deconvreg() in the Image Processing Toolbox.
Kategorien
Mehr zu Polynomials finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!