Polyfit minus one term

9 views (last 30 days)
Paul Rogers
Paul Rogers on 1 Jan 2020
Commented: Star Strider on 1 Jan 2020
Hi, and happy new year.
I need a 3rd order polynomiial approximation for the file Data001 in attached.
I can use polyfit but I need a polinomium without the term x^2.
My polinomium must be:
x^3+x^1+x^0.
How can I do that?

Accepted Answer

Star Strider
Star Strider on 1 Jan 2020
Use the mldivide,\ function with a specific design matrix (since this is a linear problem):
D = load('Data001.mat');
x = D.Data001(:,1);
y = D.Data001(:,2);
DesignMatrix = @(x) [x.^3 x ones(size(x))];
B = DesignMatrix(x) \ y;
xv = linspace(min(x), max(x), 1000);
yv = DesignMatrix(xv(:)) * B;
figure
plot(x, y, '.')
hold on
plot(xv(:), yv(:), '-r')
hold off
grid
xlabel('x')
ylabel('y')
legend('Data001', 'Regression Fit')
producing:
The ‘B’ vector are the respective regression coefficients, so that y(x) = B(1)*x^3 + B(2)*x + B(3).
  3 Comments
Star Strider
Star Strider on 1 Jan 2020
My pleasure!
I was confused by your original Question, since you only left out ‘x^2’.
To leave out ‘x^1’, change ‘DesignMatrix’ to:
DesignMatrix = @(x) [x.^3 x.^2 ones(size(x))];
Also, your vectors are column vectors here, and this will only work with column vectors. To enforce that if you have row vectors, the ‘B’ calculation becomes:
B = DesignMatrix(x(:)) \ y(:);
since the ‘(:)’ will force ‘x’ and ‘y’ to become column vectors.
With that change, the ‘B’ vector are the respective regression coefficients, so that y(x) = B(1)*x^3 + B(2)*x^2 + B(3).
Star Strider
Star Strider on 1 Jan 2020
If my Answer helped you solve your problem, please Accept it!

Sign in to comment.

More Answers (1)

dpb
dpb on 1 Jan 2020
Without toolbox, use backslash operator, \
X=[x.^[3 2 1 0]]; X(:,2)=0; % design matrix straight calculation
b=X\y; % solve for coefficients
If have Stat or Curve Fitting TB, use one of the linear model fitting routines with custom model.

Tags

Products


Release

R2014b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!