Combine If statement and for loop?!
99 次查看(过去 30 天)
显示 更早的评论
Hello everybody,
I would like to combine the for loop with an if Statement:
if x<0
for i=1:length(gradient);
delta_x_{i} = x(i)-sqrt(r^2/(1+gradient(i).^2));
delta_x=[cell2mat(delta_x_)]';
delta_y_{i} = gradient(i)*delta_x(i);
delta_y=[cell2mat(delta_y_)]';
end
else
for j=1:length(gradient);
delta_x_{j} = x(j)+sqrt(r^2/(1+gradient(j).^2));
delta_x=[cell2mat(delta_x_)]';
delta_y_{j} = gradient(j)*delta_x(j);
delta_y=[cell2mat(delta_y_)]';
end
end
But as far as I can see, it is not working? What am I doing wrong? I guess I'm not seeing the wood for the trees...
Appreciate any Help! Christian
回答(2 个)
Andrei Bobrov
2017-3-2
编辑:Andrei Bobrov
2017-3-2
delta_x = x(:)+sign(x(:)).*sqrt(r^2./(1+gradient1(:).^2));
delta_y = gradient1(:).*delta_x;
We use gradient1 instead gradient. gradient - it's function from MATLAB
Steven Lord
2017-3-2
x is a vector. From the documentation for the if keyword, "if expression, statements, end evaluates an expression, and executes a group of statements when the expression is true. An expression is true when its result is nonempty and contains only nonzero elements (logical or real numeric). Otherwise, the expression is false."
So the body of your if statement:
if x<0
is only executed if ALL the elements of x are less than 0. Otherwise you drop into the else section.
Your corrected code is closer, using a logical scalar as the if expression, but you may be missing a couple cases. If you've preallocated delta_x and delta_y, having 0 as the last element in x won't leave those two arrays shorter than you expect. You may also want to consider what happens if x is Not-a-Number, better known as NaN.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!