Filter löschen
Filter löschen

Why This Vectorization of my Code Does Not Work?

1 Ansicht (letzte 30 Tage)
Kareem Elgindy
Kareem Elgindy am 14 Jul. 2020
Bearbeitet: Kareem Elgindy am 14 Jul. 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

Antworten (1)

KSSV
KSSV am 14 Jul. 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 Kommentar
Kareem Elgindy
Kareem Elgindy am 14 Jul. 2020
Bearbeitet: Kareem Elgindy am 14 Jul. 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.

Melden Sie sich an, um zu kommentieren.

Produkte


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by