Fitting surfaces to data can be performed both interactively and programmatically using Curve Fitting Toolbox 2.0 (R2009a). For more information on surface fitting in Curve Fitting Toolbox 2.0 (R2009a), refer the following online documentation:
For previous versions of MATLAB, try the following workarounds:
To fit a line, plane, or higher-dimensional surface to a set of data using MATLAB, use the backslash operator. The first example listed below shows how to determine the best-fit line for two-dimensional data; the second demonstrates how to fit a plane to three-dimensional data.
Example 1: Fitting a best-fit line to data
x = rand(1,10);
n = rand(size(x));
y = 2*x + 3;
yn = y + n;
Xcolv = x(:);
Ycolv = y(:);
Const = ones(size(Xcolv));
Coeffs = [Xcolv Const]\Ycolv;
m1 = Coeffs(1);
b1 = Coeffs(2);
figure
plot(x,y,'ro')
hold on
x2 = 0:0.01:1;
y2 = m1*x2+b1;
plot(x2, y2, 'g-')
title(sprintf('Non-noisy data: y=%f*x+%f',m1,b1))
Xcolv = x(:);
Yncolv = yn(:);
Const = ones(size(Xcolv));
NoisyCoeffs = [Xcolv Const]\Yncolv;
m2 = NoisyCoeffs(1);
b2 = NoisyCoeffs(2);
figure
plot(x,yn,'ro')
hold on
x2 = 0:0.01:1;
yn2 = m2*x2+b2;
plot(x2, yn2, 'g-')
title(sprintf('Noisy data: y=%f*x+%f',m2,b2))
Example 2: Fitting a plane to data
x = rand(1,10);
y = rand(1,10);
z = (3-2*x-5*y)/4;
Xcolv = x(:);
Ycolv = y(:);
Zcolv = z(:);
Const = ones(size(Xcolv));
Coefficients = [Xcolv Ycolv Const]\Zcolv;
XCoeff = Coefficients(1);
YCoeff = Coefficients(2);
CCoeff = Coefficients(3);
L=plot3(x,y,z,'ro');
set(L,'Markersize',2*get(L,'Markersize'))
set(L,'Markerfacecolor','r')
hold on
[xx, yy]=meshgrid(0:0.1:1,0:0.1:1);
zz = XCoeff * xx + YCoeff * yy + CCoeff;
surf(xx,yy,zz)
title(sprintf('Plotting plane z=(%f)*x+(%f)*y+(%f)',XCoeff, YCoeff, CCoeff))
The syntax used in these two examples generalizes to higher dimensions and higher order polynomials, by assembling the data matrices and using the backslash operator as shown on the lines labelled "Find the coefficients". This is successful as long as the data matrices are linear in powers of the independent variables.
For information on N-dimensional curve fitting tools, see the demos in the documentation for the following products:
Curve Fitting Toolbox:
http://www.mathworks.com/help/toolbox/curvefit/curvefit_product_page.html
Statistics Toolbox:
http://www.mathworks.com/access/helpdesk/help/toolbox/stats/
Best Answer