Need help with a least squares method fitting.

1 Ansicht (letzte 30 Tage)
Grant Piephoff
Grant Piephoff am 7 Nov. 2017
Bearbeitet: James Tursa am 7 Nov. 2017
I am doing a final project for a class and the first part is about fitting a 2nd and 6th order polynomials to some data using the least squares method. The catch is the general linear least squares method cannot be used, i.e. {y}=[Z]{a}+{e}.
clear all;
clc;
load('data')
x = [t]';
y = [r]';
N=[14400 sum(x) sum(x.^2);sum(x) sum(x.^2) sum(x.^3);sum(x.^2) sum(x.^3) sum(x.^4)];
q=[sum(y) sum(x.*y) sum(x.^2.*y)];
a=N/q
%Polyfit Check to compare
x=[t]';
y=[r]';
b=polyfit(x,y,2)
fprintf('The data is fit as y=(%.4f)+(%.4f)(x)+(%.4f)x^2\n\n',b(1),b(2),b(3));
And the results I get do not match up.
a =
1.0e+04 *
0.0000
0.0001
1.5963
b =
1.0e+03 *
-0.0000 0.0001 8.0980
The data is fit as y=(-0.0000)+(0.1205)(x)+(8098.0146)x^2
I don't know exactly what I am doing wrong. The number 14400 is in there because the data is two 14401 X 1 doubles. I have also attached the data. Thanks in advance

Antworten (1)

James Tursa
James Tursa am 7 Nov. 2017
Bearbeitet: James Tursa am 7 Nov. 2017
The least squares equations you are trying to solve, using your variable names, are
N * a = q'
So do this instead (where the transpose is simply to turn q into a column vector):
a = N \ q';
Then you can see how they match up (the fliplr stuff is just to get the numbers to line up for output):
>> fliplr((N\q')')
ans =
1.0e+003 *
-0.000000012897721 0.000120497278334 8.098014646584689
>> polyfit(x,y,2)
ans =
1.0e+003 *
-0.000000012897721 0.000120497278334 8.098014646584003

Kategorien

Mehr zu Descriptive Statistics finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by