Can we do polyfit on matrix?

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

답변 (3개)

Jan
Jan 2015년 10월 27일
편집: Jan 2015년 10월 27일

0 개 추천

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

JFz
JFz 2015년 10월 27일
Thank you!
let me try this with my numbers.....
donald adams
donald adams 2017년 11월 21일
Great solution! Thanks
Sarah
Sarah 2018년 12월 5일
what if these two matrices were not of the same size? ohw would the solution change then?

댓글을 달려면 로그인하십시오.

Jos (10584)
Jos (10584) 2015년 10월 27일
편집: Jos (10584) 2015년 10월 27일

0 개 추천

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

JFz
JFz 2015년 10월 27일
This is cool. Thank you! Let me try it too.
JFz
JFz 2015년 10월 27일
What do the 'un' and 0) do in the 2nd line?
help arrayfun
will give you the answer. The output is non-uniform.
Jos (10584)
Jos (10584) 2015년 10월 28일
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
Namrata Badiger 2020년 5월 28일

0 개 추천

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

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

제품

태그

질문:

JFz
2015년 10월 27일

답변:

2020년 5월 28일

Community Treasure Hunt

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

Start Hunting!

Translated by