Is left divison faster than polyfit(x, y, 1)?

3 views (last 30 days)
N/A
N/A on 9 Jan 2017
Answered: Jan on 9 Jan 2017
In linear regression, results from two approach are the same.
>> x = 1:10;
>> y = x * 2 + randn(1, 10);
>> b = [ones(1, 10); x]' \ y'
b =
-0.7021
2.2412
>> p = polyfit(x, y, 1);
p =
2.2412 -0.721
I can see the implementation of `polyfit` by typing `edit polyfit`. However, I can't see the built-in function `ldivide`

Accepted Answer

Jan
Jan on 9 Jan 2017
There is some overhead in polyfit due to the error handling. Checking the inputs is a really good idea, but if you are absolutely sure that the inputs are correct, this can save some time:
function p = fPolyFit(x, y, n)
x = x(:);
V = ones(length(x), n + 1); % Vandermonde matrix
for j = n:-1:1
V(:, j) = V(:, j + 1) .* x;
end
[Q, R] = qr(V, 0); % Solve least squares problem
p = transpose(R \ (transpose(Q) * y(:)));
And if you have to solve this with the same x and different y, storing the Vandermonde matrix can accelerate the code again.

More Answers (1)

Walter Roberson
Walter Roberson on 9 Jan 2017
If I recall correctly, polyfit creates a vandermode matrix and uses \ with it, so polyfit cannot be faster than \

Categories

Find more on Color and Styling in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!