store vectors from a for loop in a matrix
1 view (last 30 days)
Show older comments
Camilo Granda
on 7 Oct 2017
Commented: Camilo Granda
on 7 Oct 2017
I have this function
for ci=0.0001:0.5:(2*alt_Col)
Esi=0.003*((ci-di)/(ci))
end
where di is a column vector. How do I store all the Esi vector in a matrix? Thanks in advance
0 Comments
Accepted Answer
Walter Roberson
on 7 Oct 2017
You can use the following pattern when you are using a for loop over a range of non-integral values:
ci_vals = 0.0001:0.5:(2*alt_Col);
num_ci = length(ci_vals);
num_di = length(di);
Esi = zeros(num_ci, num_di);
for ci_idx = 1 : num_ci;
ci = ci_vals(ci_idx);
Esi(ci_idx, :) = 0.003*((ci-di) ./ (ci));
end
... Or you could omit the for loop, and use a vectorized approach:
ci = 0.0001:0.5:(2*alt_Col);
Esi = 0.003 * bsxfun(@rdivide, bsxfun(@minus, ci, di), (ci));
Or you could use:
ci = 0.0001:0.5:(2*alt_Col);
[CI, DI] = meshgrid(ci, di);
Esi = 0.003 * ((CI-DI) ./ (CI));
or, in R2016b or later, you can use built-in implicit expansion:
ci = 0.0001:0.5:(2*alt_Col);
Esi = 0.003 * ((ci-di) ./ (ci));
The bxsfun version is a more efficient approach than meshgrid. The implicit expansion version "aims" to be more efficient than the bsxfun but user tests have shown that sometimes the implicit expansion version is slower than the bsxfun version.
More Answers (0)
See Also
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!