how to use certain values to write a for loop?

X = [67;89;78;56;55;75;99];
f = [4;5];
for i = 1:length(X);
if i == f;
X1(i,1) = 5*X(i,1);
else
X1(i,1) = X(i,1);
end
end
I know that the way i have written the if expression is wrong but can someone tell how do I write the if expression such that it uses the values of f.. basically if i equals the value in the f matrix or array the first formula is used else the second.
Thanks for help.
Sid

2 Kommentare

Stephen23
Stephen23 am 25 Feb. 2016
Bearbeitet: Stephen23 am 25 Feb. 2016
There is absolutely no point in using a slow and ugly loop. Here is Walter Roberson's much better solution in full:
>> X = [67;89;78;56;55;75;99];
>> f = [4;5];
>> X1 = X;
>> X1(f) = 5 * X1(f)
X1 =
67
89
78
280
275
75
99
I understand that it looks simple because I have modified my code and asked a simple question. Imagine if you have the array with 1000 rows in X and f. Then the loop simplifies it.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Arnab Sen
Arnab Sen am 25 Feb. 2016

1 Stimme

Hi Siddharth,
My understanding from your problem statement that you want to check whether the values of the variable 'i' is present in the vector 'f' in the if-statement. You can use in-built 'find' function for this purpose. 'find' function returns the indices of the vector which meet certain condition. If no match then it returns a empty vector. So you can write the if statement in the following way:
>>if(~isempty(f==i))
So, the whole script as below:
if true
% code
end
X = [67;89;78;56;55;75;99];
f = [4;5];
for i = 1:length(X);
%if i == f
if(~isempty(find(f==i)))
X1(i,1) = 5*X(i,1);
else
X1(i,1) = 1*X(i,1);
end
end
For more detail about 'find', refer to the following link:

2 Kommentare

Use the single command any(..) rather than the three commands ~empty(find(..))
any(f==i)
Thanks guys this is exactly what I was looking for.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 25 Feb. 2016
Bearbeitet: Stephen23 am 25 Feb. 2016

2 Stimmen

ismember(i, f)
Or, you can use
X1 = X;
X1(f) = 5 * X(f);
with no loop.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by