adding constraints with if loop
2 次查看(过去 30 天)
显示 更早的评论
a1=1:.3:5.2;
b1=3:.2:5.8;
c1=2:.3:6.2;
for k=1:15
composite=[a1(:,k) b1(:,k) c1(:,k)];
origin=[1.3 1.1 1.5];
d(:,k)=sqrt(sum((composite-origin).^2));% 1*15 vector
end
But now in 'composite' I want to exclude those all points which have a1 less than or equal to 1.5, b1 greater than or equal to 5 and c1 less than or equal to 2. So now my d vector will be 1*6 instead of 1*15. How can I get this result with combination of for and if loop.
3 个评论
Walter Roberson
2012-2-4
'S'ok. I'm just trying to prevent the phrase from spreading as several people started using it.
采纳的回答
Walter Roberson
2012-2-4
And if it must be done with "for" and "if" then,
a1=1:.3:5.2;
b1=3:.2:5.8;
c1=2:.3:6.2;
origin=[1.3 1.1 1.5];
numv = 0;
d = [];
for k=1:15
composite=[a1(:,k) b1(:,k) c1(:,k)];
if composite(1) <= 1.5 || composite(2) >= 5 || composite(3) <= 2;
continue;
end
numv = numv + 1;
d(:,numv)=sqrt(sum((composite-origin).^2));
end
2 个评论
Walter Roberson
2012-2-4
if composite(1) >= 1.5 & composite(1) < 5 & composite(2) <= 5 & composite(3) >= 2 & composite(3) < 5.8
numv = numv + 1;
d(:,numv)=sqrt(sum((composite-origin).^2));
end
This is a different way of writing the same control: select what you do want rather than rejecting what you do not want.
When you say "end my calculation", if you mean for the entire loop over "k", then before just before the "end" of the "if", add
else
break
But take note that this will result in no work being done, as a1(1) is out of the desired range. So probably you just want to do what I have written here, do not calculate the result if the values are out of range for this k.
更多回答(1 个)
Walter Roberson
2012-2-3
a1=1:.3:5.2;
b1=3:.2:5.8;
c1=2:.3:6.2;
composite=[a1(:), b1(:) c1(:)];
Lidx_a = a1 <= 1.5;
Lidx_b = b1 >= 5;
Lidx_c = c1 <= 2;
composite((Lidx_a | Lidx_b | Lidx_c),:) = [];
nrow = size(compisite,1);
origin=[1.3 1.1 1.5];
d = sqrt( sum( (composite-repmat(origin,nrow,1)).^2, 2) );
No loop needed.
The second argument to sum, the 2, is needed to sum along rows.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!