Bivariate Polynomial Regression
Allows arbitrary 3-D data to be specified (for example, a table of X, Y, Z points).
Generates a bivariate polynomial with a customizable order.
Fits the polynomial to the data with a least-squares fit.
Plots the data against the best-fit polynomial surface.
Specify the Data Set
Below we include some sample point data in a DataTable component and associate it with the variable data.
Alternatively, this data could be imported from an external source using the Import command.
Define Model Equation
The general form of a bivariate polynomial of total degree n is given by:
f ≔ n→∑j=0n∑i=0nai,j⁢xi⁢yj
For example, the general form for a bivariate quadratic is:
Next, we choose the order of the bivariate polynomial which we will fit to the points. Increasing this value will refine the fit.
n ≔ 3
n ≔ 3
poly ≔ unapplyfn,x,y
poly ≔ x,y→x3⁢y3⁢a3,3+x3⁢y2⁢a3,2+x2⁢y3⁢a2,3+x3⁢y⁢a3,1+x2⁢y2⁢a2,2+x⁢y3⁢a1,3+x3⁢a3,0+x2⁢y⁢a2,1+x⁢y2⁢a1,2+y3⁢a0,3+x2⁢a2,0+x⁢y⁢a1,1+y2⁢a0,2+x⁢a1,0+y⁢a0,1+a0,0
Calculate Parameters by Least Squares Minimization
Separate and normalize the data
X ≔ Normalizedata.., 1, Euclidean
Error, (in LinearAlgebra:-Normalize) invalid input: LinearAlgebra:-Normalize expects its 1st argument, V, to be of type Vector() but received data[() .. (), 1] |lib/LinearAlgebra/Standard/src/Normalize.mm:18|
Y ≔ Normalizedata.., 2, Euclidean
Error, (in LinearAlgebra:-Normalize) invalid input: LinearAlgebra:-Normalize expects its 1st argument, V, to be of type Vector() but received data[() .. (), 2] |lib/LinearAlgebra/Standard/src/Normalize.mm:18|
Z ≔ data.., 3
Z ≔ data..,3
nRows ≔ RowDimensiondata
Error, (in LinearAlgebra:-RowDimension) invalid input: LinearAlgebra:-RowDimension expects its 1st argument, A, to be of type Matrix() but received data |lib/LinearAlgebra/Queries/src/RowDimension.mm:17|
Define objective function:
sse ≔ addpolyXi, Yi−Zi2, i = 1 .. nRows :
Error, unable to execute add |lib/LinearAlgebra/Queries/src/RowDimension.mm:17|
Minimize the objective function:
results ≔ Optimization:-Minimizesse, iterationlimit = 10000000
Error, (in Optimization:-LPSolve) problem is unbounded as no constraints were found |lib/Optimization/src/LPSolve.mm:90|
Assign the values corresponding to the minimum value to the parameters:
Plot Original Data against Best Fit Surface
p1 ≔ plotspointplot3dX,Y,Z,color=black,symbol=solidsphere,symbolsize=10
Error, (in plots:-pointplot3d) points cannot be converted to floating-point values |lib/plots/src/plots.mpl:404|
Best Fit Surface:
Error, (in plot3d) bad range arguments: x = X .. X, y = Y .. Y |lib/src/plot3d.mpl:43|
Error, (in plots:-display) expecting plot structure but received: p1 |lib/plots/src/plots.mpl:199|
Download Help Document
What kind of issue would you like to report? (Optional)