Star
Star

Reputation: 2299

If statement with strings of letters in Matlab

I have in Matlab the following cells containing various combinations of the letters a,b,c,d

%all combinations containing 'a' and/or 'b'
G1={'a', 'ab', 'ac', 'ad', 'abc', 'acd', 'abd', 'abcd', 'b', 'bc', 'bd', 'bcd'};  

%all combinations containing 'c' and/or 'd'
G2={'c', 'ac', 'bc', 'cd', 'abc', 'acd', 'bcd', 'abcd', 'd', 'ad', 'bd', 'abd'};

%all combinations containing 'c'
G3={'c', 'ac', 'bc', 'cd', 'acd', 'abd', 'bcd', 'abcd'}; 

I then construct a cell all of dimension

allsize=size(G1,2)*size(G2,2)*size(G3,2);

containing all possible ways to match one element of G1 with one element of G2 with one element of G3.

all=cell(allsize,3);
 count=0;

 for h=1:size(G1,2)
     for k=1:size(G2,2);
         for j=1:size(G3,2);
             count=count+1;
             all(count,1)=G1(h);
             all(count,2)=G2(k);
             all(count,3)=G3(j);

         end
     end
 end

Question: I want to construct a vector check of dimension allsize x 1 such that check(l)=1 if [all(l,1) contains a and all(l,2) contains c] or [all(l,1) contains b and all(l,2) contains d], and zero otherwise.

I am having problems in writing the if condition

check=zeros(allsize,1);

 for l=1:allsize
     %if [all(l,1) contains a and  all(l,2) contains c] or [all(l,1) contains b and  all(l,2) contains d]
     check(l)=1;
     %end
 end

Could you kindly provide some help?

Upvotes: 0

Views: 123

Answers (1)

Jetpac
Jetpac

Reputation: 2125

(For the if statement, always best to show what you tried rather than some pseudo code , however...)

Firstly using all as a variable name is bad - it's an important built-in function and one you may want to use... I've renamed it allG below. But you probably want something like this:

check(l) = (any(allG{l,1}=='a') && any(allG{l,2}=='c')) || ...
           (any(allG{l,1}=='b') && any(allG{l,2}=='d'))

Note I haven't used an if statement, since the right hand side evaluates to a logical value (a true/false value) which can be generally used in the same way as 1 and 0...

Also above we're treating the strings as arrays of characters, so something like 'abcd'=='b' returns a [0 1 0 0] logical array... We then use any() to see if any of the values are 1 (true).

Upvotes: 1

Related Questions