how to store the conditional loop data
显示 更早的评论
sir/ madam please correct me.
ut=rand(15,1);
uy=([0.84;0.384;0.784]);
eval (['U_y','=[u_y;u_y;u_y;u_y;u_y]']);
for n=1:15
if ut(n,1)<=U_y(n,1)
ut(n,1)=ut(n,1);
else
ut(n,1)=0;
end
utt(:,1)=ut(n,1); %% i want to store the ut as a utt in a column
end
4 个评论
Jan
2022-4-29
Avoid cluttering unneeded parentheses:
uy=([0.84;0.384;0.784]);
% ^ ^ not useful
Do not use eval() in general, most of all if it can be replaced directly:
% eval (['U_y','=[u_y;u_y;u_y;u_y;u_y]']); Nope
U_y = [u_y; u_y; u_y; u_y; u_y];
% Or more clearly:
U_y = repmat(uy, 5, 1);
It is not useful to write code, which does not do anything:
ut(n,1)=ut(n,1); % ??? Why?
Chaudhary P Patel
2022-4-29
Star Strider
2022-4-29
My code tests each element of ‘ut’ against ‘U_y’ and sets it to zero if the condition is satisfied.
What result do you want?
Jan
2022-4-29
@Chaudhary P Patel: The line ut(n,1)=ut(n,1) replaced the n.th element of the vector ut by the n.th element of the vector ut. This is a waste of time only.
An option to avoid this (see others in the already provided answers):
for n = 1:15
if ut(n) <= U_y(n)
utt(n) = ut(n);
else
utt(n) = 0;
end
end
Or with a proper pre-allocation, to avoid the time-consuming growing of arrays:
utt = zero(15, 1); % The default value is 0 now
for n = 1:15
if ut(n) <= U_y(n)
utt(n) = ut(n);
end
end
采纳的回答
更多回答(1 个)
Jan
2022-4-29
Your cleaned code:
ut = rand(15, 1);
uy = [0.84; 0.384; 0.784];
U_y = repmat(uy, 5, 1);
for n = 1:15
if ut(n) > U_y(n)
ut(n) = 0;
end
utt(n) = ut(n);
% ^ insert an index here
end
Remember, that X(k,1) can be written as X(k), which looks a little bit cleaner.
Instead of the loop, you can write:
utt = ut .* (ut <= U_y);
The expression in the parentheses is a vector of 1s and 0s and the elementwise multiplication set the wanted elements to 0.
类别
在 帮助中心 和 File Exchange 中查找有关 Startup and Shutdown 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!