POLYNOMIALCURVEFIT Fit a polynomial curve to a series of points. [XC YC] = polynomialCurveFit(T, XT, YT, ORDER) T is a Nx1 vector XT and YT are coordinate for each parameter value (column vectors) ORDER is the degree of the polynomial used for interpolation XC and YC are polynomial coefficients, given in ORDER+1 row vectors, starting from degree 0 and up to degree ORDER. [XC YC] = polynomialCurveFit(T, POINTS, ORDER); specifies coordinate of points in a Nx2 array. Example: N = 50; t = linspace(0, 3*pi/4, N)'; xp = cos(t); yp = sin(t); [xc yc] = polynomialCurveFit(t, xp, yp, 3); curve = polynomialCurvePoint(t, xc, yc); drawCurve(curve); [XC YC] = polynomialCurveFit(..., T_I, COND_I); Impose some specific conditions. T_I is a value of the parametrization variable. COND_I is a cell array, with 2 columns, and as many rows as the derivatives specified for the given T_I. Format for COND_I is: COND_I = {X_I, Y_I; X_I', Y_I'; X_I", Y_I"; ...}; with X_I and Y_I being the imposed coordinate at position T_I, X_I' and Y_I' being the imposed first derivatives, X_I" and Y_I" the imposed second derivatives, and so on... To specify a derivative without specifying derivative with lower degree, value of lower derivative can be let empty, using '[]' Example: % defines a curve (circle arc) with small perturbations N = 100; t = linspace(0, 3*pi/4, N)'; xp = cos(t)+.1*randn(size(t)); yp = sin(t)+.1*randn(size(t)); % plot the points figure(1); clf; hold on; axis([-1.2 1.2 -.2 1.2]); axis equal; drawPoint(xp, yp); % fit without knowledge on bounds [xc0 yc0] = polynomialCurveFit(t, xp, yp, 5); curve0 = polynomialCurvePoint(t, xc0, yc0); drawCurve(curve0); % fit by imposing coordinate on first point [xc1 yc1] = polynomialCurveFit(t, xp, yp, 5, 0, {1, 0}); curve1 = polynomialCurvePoint(t, xc1, yc1); drawCurve(curve1, 'r'); % fit by imposing coordinate (1,0) and derivative (0,1) on first point [xc2 yc2] = polynomialCurveFit(t, xp, yp, 5, 0, {1, 0;0 1}); curve2 = polynomialCurvePoint(t, xc2, yc2); drawCurve(curve2, 'g'); % fit by imposing several conditions on various points [xc3 yc3] = polynomialCurveFit(t, xp, yp, 5, ... 0, {1, 0;0 1}, ... % coord and first derivative of first point 3*pi/4, {-sqrt(2)/2, sqrt(2)/2}, ... % coord of last point pi/2, {[], [];-1, 0}); % derivative of point on the top of arc curve3 = polynomialCurvePoint(t, xc3, yc3); drawCurve(curve3, 'k'); Requires the optimization Toolbox. Examples: polynomialCurveFit See also polynomialCurves2d ------ Author: David Legland e-mail: david.legland@grignon.inra.fr Created: 2007-02-27 Copyright 2007 INRA - BIA PV Nantes - MIAJ Jouy-en-Josas.
Package: matgeom