Why This Vectorization of my Code Does Not Work?
2 次查看(过去 30 天)
显示 更早的评论
Consider the following two codes:
n = 4;
% Code 1:
c1 = zeros(floor(n/2)+1,n+1); c1(1,1) = 1; c1(1,2:n+1) = 2.^(0:n-1);
for k = 2:n
for l = 1:floor(k/2), c1(l+1,k+1) = -((k - 2*l + 2)/(4*l*(k - l)))*(k - 2*l + 1)*c1(l,k+1); end
end
c1
% Code 2:
c2 = zeros(floor(n/2)+1,n+1); c2(1,1) = 1; c2(1,2:n+1) = 2.^(0:n-1);
for k = 2:n
lend = floor(k/2); c2(2:lend+1,k+1) = -((k-2*(1:lend)+2)./(4*(1:lend).*(k-(1:lend)))).*(k-2*(1:lend)+ 1).*c2(1:lend,k+1)';
end
c2
The first code gives
while the second gives
0 个评论
回答(1 个)
KSSV
2020-7-14
Might be some problem with indexing. Try this:
clc; clear all ;
n = 4;
% Code 1:
c1 = zeros(floor(n/2)+1,n+1);
c1(1,1) = 1;
c1(1,2:n+1) = 2.^(0:n-1);
for k = 2:n
for l = 1:floor(k/2)
c1(l+1,k+1) = -((k - 2*l + 2)/(4*l*(k - l)))*(k - 2*l + 1)*c1(l,k+1);
end
end
c1
% Code 2:
c2 = zeros(floor(n/2)+1,n+1);
c2(1,1) = 1;
c2(1,2:n+1) = 2.^(0:n-1);
for k = 2:n
lend = floor(k/2);
% c2(2:lend+1,k+1) = -((k-2*(1:lend)+2)./(4*(1:lend).*(k-(1:lend)))).*(k-2*(1:lend)+ 1).*c2(1:lend,k+1)';
l = 1:lend ;
c2(2:lend+1,k+1) = -((k - 2*l + 2)./(4*l.*(k - l))).*(k - 2*l + 1).*c1(l,k+1)';
end
c2
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!