Matrix dimensions to create for loop?

1 次查看(过去 30 天)
Hi all. I have rr(6x200) matrix. I want to find Rc and V matrixes for each 200 column, I showed below for one column:
Rc=toeplitz(rr(1:6)); %Rc(6x6)
V=Rc\eye(6,1); %V(6x1)
In the end, I need V matrix (6x200) but because of Rc is (6x6) matrix I could not create for loop.

采纳的回答

Guillaume
Guillaume 2016-5-16
编辑:Guillaume 2016-5-16
I'm not sure why you can't use a loop:
V = zeros(size(rr));
denum = eye(size(rr, 1), 1); %so it's not recreated 200 times in the loop
for col = 1 : size(rr, 2)
Rc = toeplitz(rr(:, col));
V(:, col) = Rc \ denum;
end
Alternatively:
denum = eye(size(rr, 1), 1);
V = cell2mat(cellfun(@(col) toeplitz(col)\denum, num2cell(rr, 1), 'UniformOutput', false))
The loop is likely to be marginally faster.

更多回答(2 个)

Jos (10584)
Jos (10584) 2016-5-16
You can use a for-loop:
rr = rand(6,200) ;
[nr,nc] = size(rr) ;
X = eye(nr,1) ; % take it out of the loop
V = zeros(nr,nc) ; % pre-allocation
for k=1:nc % loop over columns
Rc = toeplitz(rr(:,k)) ;
V(:,k) = Rc \ X ;
end

jack star
jack star 2016-5-16
Both works fine, thanks a lot.

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by