How to automatically introduce a nested layer of for-loop?
15 views (last 30 days)
Show older comments
Wh Khu
on 26 Feb 2019
Answered: Shunichi Kusano
on 26 Feb 2019
Given a set of x-values , I want to create a script that generates a product of n numbers.
For example, if I want to generate products of 2 numbers, i.e. and so on, the script would be:
for i_1=1:3
for i_2=1:3
Product=X(i_1)*X(i_2)
end
end
There will be 2 for-loops, one nested in another.
If I want to generate products of 3 numbers, i.e. and so on, the script would be:
for i_1=1:3
for i_2=1:3
for i_3=1:3
Product=X(i_1)*X(i_2)*X(i_3)
end
end
end
There will be 3 for-loops, i.e. 2 nested loops in an external loop.
Is there a way to automate this, like a recursion, so when n increases, it will automatically introduce a nested for-loop in the original script? The concept is like this:
n=n
for i_1=1:3
for i_2=1:3
for i_3=1:3
.
.
.
for i_n=1:3
Product=X(i_1)*X(i_2)*X(i_3)*...*X(i_n)
end
.
.
.
end
end
end
2 Comments
Yasasvi Harish Kumar
on 26 Feb 2019
Edited: Yasasvi Harish Kumar
on 26 Feb 2019
The Product variable gets over written in each iteration. I dont see why you would have a loop for it.
If you still need to write multiple loops, try recursive function as a solution.
Accepted Answer
Shunichi Kusano
on 26 Feb 2019
Hi, This is a possibility:
N = 4; % the loop number
X = rand(1,3); % simulated X
products = ones(ones(1,N)*3);
reshape_arr = [3 ones(1,N-1)];
repmat_arr = [1 ones(1,N-1)*3];
for i = 1:N
temp = repmat(reshape(X, circshift(reshape_arr, i-1)), circshift(repmat_arr,i-1));
products = products .* temp;
end
hope this helps.
0 Comments
More Answers (0)
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!