Query in applying If command
1 回表示 (過去 30 日間)
古いコメントを表示
Hello everyone,
First i'll write the part of the code than I'll ask the doubt.
O=1:25;
n=randn(100,1);
for j=1:10
for i=1:length(n)
G(j)= a+ b*n(i);
if (abs(G(j)-O(:))<1)
n(i)=[ ]
break
end
end
end
SO here you can see I need to generate G on the basis of a and b and n(random number generated). The value of G(j) shall be near to O for which I have used the if command.
Now if I want to generate 10 values of G, so My doubt are:
1) Is [abs(G(j)-O(:))<1 ] correct? I want that [abs(G(j)-O(:))<1] with any one of the 25 values of O. Then before going to next iteration of j, I am removing the n(i) which is used to generate G(j) in last iteration and similarly i want to remove the value of O which is used in last iteration. So what I want is that when I run the next iteration there will be one less value in O and n after every iteration which is used in previous iteration.
2) How to remove the particular value of O which is used in previous iteration before going to next iteration.
2 件のコメント
回答 (1 件)
Jan
2019 年 9 月 25 日
if (abs(G(j)-O(:))<1)
The if command needs a scalar condition. Therefore Matlab inserts an all() to evaluate the vector G(j)-O(:) < 1. Are you sure, that this is wanted. Then write it explicitly to avoid confusions.
This canniot work: n(i)=[ ]. After you have removed the element n(i), the vector n is shorter. Then you cannot access all elements until 100.
What about this:
O = 1:25;
a = 7.5;
for k = 1:10
match = false;
while ~match
x = a + b * randn;
n = find(abs(x - O) < 1);
if ~isempty(n)
match = true;
O(n) = [];
end
end
G(k) = x;
end
This is inefficient. There is no guarantee, that e.g. the last value of O matchs a random number in a finite amout of time. Maybe it is better, if you explain the problem you want to solve.
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!