Code covered by the BSD License

# polyfitn

### John D'Errico (view profile)

25 Jan 2012 (Updated )

Polynomial modeling in 1 or n dimensions

polyfitn_demo

## Contents

```% Author: John D'Errico
% Release: 2.0
% Release date: 8/8/06
% What follows are example usages of polyfitn, polyvaln, poly2sympoly, polyn2sym
```

## Fit a 1-d model to cos(x). We only need the even order terms.

```x = -2:.1:2;
y = cos(x);
p = polyfitn(x,y,'constant x^2 x^4 x^6')

if exist('sympoly') == 2
% Conversion to a sympoly. If nothing else, its a nice way to display the model.
polyn2sympoly(p)
end
if exist('sym') == 2
% Conversion to a symbolic form. Its also nice.
polyn2sym(p)
end

% Evaluate the regression model at some set of points
polyvaln(p,[0 .5 1])
```
```p =

ModelTerms: [4x1 double]
Coefficients: [0.99996 -0.49968 0.041242 -0.0012079]
ParameterVar: [1.2876e-10 1.084e-09 4.6603e-10 1.3903e-11]
ParameterStd: [1.1347e-05 3.2925e-05 2.1588e-05 3.7286e-06]
R2: 1
RMSE: 3.1468e-05
VarNames: {'x'}

A scalar sympoly object
0.99996 - 0.49968*x^2 + 0.041242*x^4 - 0.0012079*x^6

ans =

0.99996
0.8776
0.54031

```

## A surface model in 2-d, with all terms up to third order.

```% Use lots of data.
n = 1000;
x = rand(n,2);
y = exp(sum(x,2)) + randn(n,1)/100;
p = polyfitn(x,y,3)

if exist('sympoly') == 2
polyn2sympoly(p)
end
if exist('sym') == 2
polyn2sym(p)
end

% Evaluate on a grid and plot:
[xg,yg]=meshgrid(0:.05:1);
zg = polyvaln(p,[xg(:),yg(:)]);
surf(xg,yg,reshape(zg,size(xg)))
hold on
plot3(x(:,1),x(:,2),y,'o')
hold off
```
```p =

ModelTerms: [10x2 double]
Coefficients: [1x10 double]
ParameterVar: [1x10 double]
ParameterStd: [1x10 double]
R2: 0.99992
RMSE: 0.011198
VarNames: {}

A scalar sympoly object
0.50402*X1^3 + 1.3927*X1^2*X2 - 0.017552*X1^2 + 1.3798*X1*X2^2 + 0.081473*X1*X2 + 1.2726*X1 + 0.43959*X2^3 + 0.087656*X2^2 + 1.2254*X2 + 0.96196
```

## A linear model, but with no constant term, in 2-d

```uv = rand(100,2);
w = sin(sum(uv,2));
p = polyfitn(uv,w,'u, v');
if exist('sympoly') == 2
polyn2sympoly(p)
end
if exist('sym') == 2
polyn2sym(p)
end
```
```A scalar sympoly object
0.76416*u + 0.70472*v
```

## A model with various exponents, not all positive integers.

```% Note: with only 1 variable, x & y may be row or column vectors.
x = 1:10;
y = 3 + 2./x + sqrt(x) + randn(size(x))/100;
p = polyfitn(x,y,'constant x^-1 x^0.5');
if exist('sympoly') == 2
polyn2sympoly(p)
end
if exist('sym') == 2
polyn2sym(p)
end

xi = 1:.1:10;
yi = polyvaln(p,xi);
plot(x,y,'ro',xi,yi,'b-')
```
```A scalar sympoly object
2.9805 + 2.0448*x^-1 + 1.0041*x^0.5
```