Why This Vectorization of my Code Does Not Work?

1 vue (au cours des 30 derniers jours)
Kareem Elgindy
Kareem Elgindy le 14 Juil 2020
Modifié(e) : Kareem Elgindy le 14 Juil 2020
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

Réponses (1)

KSSV
KSSV le 14 Juil 2020
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
  1 commentaire
Kareem Elgindy
Kareem Elgindy le 14 Juil 2020
Modifié(e) : Kareem Elgindy le 14 Juil 2020
Works like a charm :-). But what is wrong in indexing in the previous code?... I still don't get it!! One more thing. In your 2nd code you used c1. In fact, c2 is calculated using previous values of c2 only not c1.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by