POLYMULT
=POLYMULT(a, b)
Argument | Description | Example |
---|---|---|
a | Polynomial 1 defined as a row vector of coefficients | {1, 2, 3} |
b | Polynomial 2 defined as a row vector of coefficients | {4, 5, 6} |
In the template file, navigate to the Polynomials worksheet to see the POLYMULT function in action.
Description
POLYMULT returns a polynomial c as a row vector resulting from the multiplication of two polynomials a and b. The multiplication of two polynomials can be accomplished by multiplying all combinations of terms and adding all the resulting like-power terms.
a = 1*x^2 + 2*x + 3 b = 4*x^2 + 5*x + 6 c = a*b = 4*x^4 + 13*x^3 + 28*x^2 + 27*x + 18
For this function, a polynomial is defined as p(x) = βn*xn + βn-1*xn-1 + … + β2*x2 + β1*x1 + β0. The β coefficients for polynomials a and b should be given as row vectors in decreasing order of power: {βn,βn-1,...,β1,β0}.
Use of row vectors is consistent with LINEST and the other polynomial functions POLYFIT, POLYVAL, POLYDER, etc.
POLYMULT uses the discrete convolution algorithm.
Complex Numbers
POLYMULT is used within POLYFROMROOTS to create a polynomial of real coefficients. However, intermediate calculations from complex roots may involve the results of POLYMULT being a vector of real and/or complex numbers. The complex number arithmetic functions IMSUM and IMPRODUCT are only used within POLYMULT if a coefficient of a or b is stored as text (assuming text is a valid complex number). Therefore, no additional loss of precision should occur from the complex number functions if a and b have real coefficients.
Lambda Formula
This code for using POLYMULT in Excel is provided under the License as part of the LAMBDA Library, but to use just this function, you may copy the following code directly into your spreadsheet.
Code for AFE Workbook Module (Excel Labs Add-in)
/** * Multiply two polynomials a and b, represented as row vectors of coefficients */ POLYMULT = LAMBDA(a,b, LET(doc,"https://www.vertex42.com/lambda/polymult.html", a,IF(AND(ROWS(a)>1,COLUMNS(a)=1),TRANSPOSE(a),a), b,IF(AND(ROWS(b)>1,COLUMNS(b)=1),TRANSPOSE(b),b), len_a,COLUMNS(a),len_b,COLUMNS(b),len_c,len_a+len_b-1, coeffs,MAKEARRAY(1,len_c,LAMBDA(i,k, REDUCE(0,SEQUENCE(MIN(k,len_a)-MAX(1,k+1-len_b)+1,1,MAX(1,k+1-len_b)), LAMBDA(acc,j, IF(OR(ISTEXT(acc),ISTEXT(INDEX(a,j)),ISTEXT(INDEX(b,k-j+1))), IMSUM(acc,IMPRODUCT(INDEX(a,j),INDEX(b,k-j+1))), acc + INDEX(a,j)*INDEX(b,k-j+1) ) ) ) )), MAP(coeffs,LAMBDA(val,IF(IMAGINARY(val)=0,IMREAL(val),val))) ));
Named Function for Google Sheets
Name: POLYMULT Description: Multiply two polynomials Arguments: a, b Function: =LET(doc,"https://www.vertex42.com/lambda/polymult.html", a,IF(AND(ROWS(a)>1,COLUMNS(a)=1),TRANSPOSE(a),a), b,IF(AND(ROWS(b)>1,COLUMNS(b)=1),TRANSPOSE(b),b), len_a,COLUMNS(a),len_b,COLUMNS(b),len_c,len_a+len_b-1, coeffs,MAKEARRAY(1,len_c,LAMBDA(i,k, REDUCE(0,SEQUENCE(MIN(k,len_a)-MAX(1,k+1-len_b)+1,1,MAX(1,k+1-len_b)), LAMBDA(acc,j, IF(OR(ISTEXT(acc),ISTEXT(INDEX(a,j)),ISTEXT(INDEX(b,k-j+1))), IMSUM(acc,IMPRODUCT(INDEX(a,j),INDEX(b,k-j+1))), acc + INDEX(a,j)*INDEX(b,k-j+1) )) ) )), MAP(coeffs,LAMBDA(val,IF(IMAGINARY(val)=0,IMREAL(val),val))) )
POLYMULT Examples
Test: Copy and Paste this LET function into a cell =LET( a, {1,2,3}, b, {4,5,6}, POLYMULT(a,b) ) Result: {4, 13, 28, 27, 18}
The resulting polynomial c=4x4+13x3+28x2+27x+18
Test: Copy and Paste this LET function into a cell =LET( a, {1,1}, b, {1,-4}, c, {1,2}, POLYMULT(POLYMULT(a,b),c) ) Result: {1, -1, -10, -8}
Change History
3/05/2024 - v1.0.6 - Updated to work with complex numbers.
See Also
POLYVAL, POLYDIV, POLYDER, POLYFROMROOTS