implementing FOR LOOP for beginning and end

6 views (last 30 days)
Hi everybody. I want to implement this code in which I would love to avoid for loop, but most of all I wish I could avoid putting out of the cycle the first and last values of the matrix rows.
freq=2; %just a frequency or a time
t_buckets=[1 5 8 90]; %vector of times upon which I am constructing my "buckets"
t=(1/freq:1/freq:t_buckets(end)); %building a time vector spaced with the frequency up to the last period in t_buckets
w_buck=zeros(length(t_buckets),length(t)); %initialize the matrix for my result, which are, as tu say, increasing vectors from zero up to a value of time then decreasing going to zero up to the next point in t_buckets
w_buck(1,1:freq*t_buckets(1))=1; %need to put this part out of the for loop
w_buck(1,freq*t_buckets(1)+1:freq*t_buckets(1+1))=(t(freq*t_buckets(1)+1:freq*t_buckets(2))-t_buckets(2))/(t_buckets(1)-t_buckets(2));
for i=2:length(t_buckets)-1 %recursive formula to get every row with necessary "bucket" values for times
w_buck(i,freq*t_buckets(i-1):freq*t_buckets(i)-1)=(t(freq*t_buckets(i-1):freq*t_buckets(i)-1)-t_buckets(i-1))/(t_buckets(i)-t_buckets(i-1));
w_buck(i,freq*t_buckets(i))=1;
w_buck(i,freq*t_buckets(i)+1:freq*t_buckets(i+1))=(t(freq*t_buckets(i)+1:freq*t_buckets(i+1))-t_buckets(i+1))/(t_buckets(i)-t_buckets(i+1));
end
%need to put last part out of the for loop otherwiae it doesn t work
w_buck(length(t_buckets),freq*t_buckets(end-1):freq*t_buckets(end)-1)=(t(freq*t_buckets(end-1):freq*t_buckets(end)-1)-t_buckets(end-1))/(t_buckets(end)-t_buckets(end-1));
w_buck(length(t_buckets),freq*t_buckets(length(t_buckets)))=1;
Now what I wish to do is first try to put everything in the same formula (i.e. the for loop in example) and then try to avoid this loop if possible.
Thanks to everyone who'll help me in simplifying
  2 Comments
Guillaume
Guillaume on 27 Mar 2020
Can you explain what that code does? It's not very readable and if we first have to try to understand it, there's less chance you'll have an answer.
Writing comments in your code is essential!

Sign in to comment.

Accepted Answer

Abhisek Pradhan
Abhisek Pradhan on 2 Apr 2020
Use of FOR loop can be avoided in most of the cases using vectorization.
Refer the following link which has few examples on how to do vectorization.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!