How to create a loop with unknown number of iterations?
15 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I would like a help about a script. I have a file with three columns, each of them are numbers. I would like to satisfy a condition via a loop.I want, based on a specific equation/relationship:
mask = z_input<fin & z_input>=(fin-1);
in order to get only the elements from the file that satisfy this equation and not get an "emplty" file.
If not, then the relationship should be converted to
mask= z_input<(fin-1) & z_input>=(fin-2);
One again not then the relationship should be converted to
mask= z_input<(fin-2) & z_input>=(fin-3);
One again not then the relationship should be converted to
mask= z_input<(fin-3) & z_input>=(fin-4);
etc
I have tried the following commands:
clc
clear
filename1= 'mydata.txt';
[d1,tex]= importdata(filename1);
y_input=d1.data(:,2);
x_input=d1.data(:,1);
z_input=d1.data(:,4);
mask = z_input<fin & z_input>=(fin-1);
selected= d1.data(mask,:);
y_B=selected(:,2);
x_B=selected(:,1);
z_input_B=selected(:,4);
fin=max(z_input);
if isempty(z_input_B)
mask= z_input<(fin-1) & z_input>=(fin-2);
selected = d1.data(mask,:);
end
if isempty(z_input_B)
mask= z_input<(fin-2) & z_input>=(fin-3);
selected = d1.data(mask,:);
end
if isempty(z_input_B)
mask= z_input<(fin-3) & z_input>=(fin-4);
selected = d1.data(mask,:);
end
I need something in (i) that takes values from 0 to whatever is needed to satisfy the relation/condition and not get an "empty" file.
I mean something like
mask= z_input<(fin-i) & z_input>=(fin-(i+1));
Could you please help me?
2 Kommentare
Akzeptierte Antwort
Jan
am 3 Nov. 2022
Bearbeitet: Jan
am 3 Nov. 2022
ready = false;
k = 1;
while ~ready
mask = z_input < fin & z_input >= (fin - k);
if any(mask)
ready = true;
else
k = k + 1;
end
end
But remember, that the value of min(z_input - fin) should help to find k directly without using a loop.
Another option is using maxk(z_input, 2) to get the 2 largest outputs, which let you determine k also.
4 Kommentare
Jan
am 5 Nov. 2022
Bearbeitet: Jan
am 5 Nov. 2022
@Ivan Mich: You ignore my answer and my comments. I have mentioned, that you modify mask , but check for isempty(z_input_B).
Checking a binary mask by isempty will fail also, because this counts the number of elements without considering their values. Look in the code I've posted: any(x) does something different from isempty(mask).
Posting an example file is not useful, because I cannot guess, what I should do with this file.
My code does already, what you have asked for and you explain repeatedly, that another code does not work. Even if I mention the problem of the other code, you do not react. So I repeat another time, that a loop is a waste of time only, because maxk(z_input, 2) reveals the value of k directly: It replies the 2 largest values and you have to subtract them only.
I've posted some code, which is working as far as I can see, and mentioned a much more efficient solution. I do not see, how I could help you further. Why do you hestitate to use these information?
Weitere Antworten (1)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!