Can we do polyfit on matrix?
Mostra commenti meno recenti
Hi,
I have two matrix, A and B, each of 1000 rows and 100 columns. I need to do 100 polyfit on the columns. I can loop through the columns. But I am just wondering if there is any simple way to plug in A, B without the loop and return the result in an other matrix C.
Thanks,
Jennifer
Risposte (3)
As far as I understand all columns are processed by polyfit independently. So you can at least omit the expensive checking of the inputs:
A = rand(1000, 100);
B = rand(1000, 100);
n = 3;
V = ones(1000, n + 1);
for k = 1:100
x = A(:, k);
y = B(:, k);
% Vandermonde matrix:
V(:, n+1) = 1;
for j = n:-1:1
V(:, j) = V(:, j + 1) .* x;
end
% Solve least squares problem:
[Q, R] = qr(V, 0);
p = transpose(R \ (transpose(Q) * y(:)));
...
end
I fyou need further outputs of polyfit and e.g. a normalization of the input values, explain this explicitly here. Posting your existing code is always a good idea to reduce the need to guess, what you exactly need.
3 Commenti
JFz
il 27 Ott 2015
donald adams
il 21 Nov 2017
Great solution! Thanks
Sarah
il 5 Dic 2018
what if these two matrices were not of the same size? ohw would the solution change then?
Jos (10584)
il 27 Ott 2015
Modificato: Jos (10584)
il 27 Ott 2015
A loop is the most obvious choice. You can hide the loop using arrayfun
FitFH = @(k) polyfit(X(:,k), Y(:,k), 1)
P = arrayfun(FitFH, 1:size(X,2), 'un',0)
P{X} will hold the fit for the X-th columns.
4 Commenti
JFz
il 27 Ott 2015
JFz
il 27 Ott 2015
Jos (10584)
il 28 Ott 2015
help arrayfun
will give you the answer. The output is non-uniform.
Jos (10584)
il 28 Ott 2015
And by the way, you can write your own (anonymous) polyfit function that skips the input checks as Jan suggested, but this might be over your head right now.
Namrata Badiger
il 28 Mag 2020
0 voti
A = rand(1000, 100);
B = rand(1000, 100);
n = 3;
V = ones(1000, n + 1);
for k = 1:100
x = A(:, k);
y = B(:, k);
% Vandermonde matrix:
V(:, n+1) = 1;
for j = n:-1:1
V(:, j) = V(:, j + 1) .* x;
end
% Solve least squares problem:
[Q, R] = qr(V, 0);
p = transpose(R \ (transpose(Q) * y(:)));
...
endB = rand(1000, 100);n = 3;V = ones(1000, n + 1);for k = 1:100 x = A(:, k); y = B(:, k); % Vandermonde matrix: V(:, n+1) = 1; for j = n:-1:1 V(:, j) = V(:, j + 1) .* x; end % Solve least squares problem: [Q, R] = qr(V, 0); p = transpose(R \ (transpose(Q) * y(:))); ... end
Categorie
Scopri di più su Creating and Concatenating Matrices in Centro assistenza e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!