My Matlab for loop wont output the matrix I need

  1. I'm somewhat new to Matlab and am having issues with a nested "for" and "if" loop. My code is below. This code is combining a binary signal with a cyclic one. I'm trying to create a matrix with the amplitude condition in the first column and in the second column I want the sum of the number of data points where the binary signal reads "1" and the analog cyclic signal's value is above the amplitude condition. I know the if loop works like I want because when I isolate it it gives me the results I want.

    The problem is with the for loop. The second column has all the same number when I know they should vary. Every value is equal to what the correct value is for the first row. After the first row every number is the same for some reason.

    n=length(stab(:,1));
    prob=zeros(2,2);
    prob1=zeros(n,1)

    for k=1:100
    a(k)=k;
    for i=1:n
    if ((z2(i)>=a(k))||(z2(i)<=-a(k))) && (stab2(i)==1)
    prob1(i)=1;
    end
    prob(k,2)=sum(prob1);
    end
    prob(:,1)=a;
    end
     
  2. jcsd
  3. I think (provided I've understood the intent of your code) that your problem is that you don't re-initialize prob1 before every 'i' loop; consequently, it retains the values from the first iteration and, given that a(k) will have lowest 'a' value it will have the highest number of 1s. Setting prob1 to all zeros before the loop should cure the problem.

    I'm not a Matlab user, but I think you may be able to do away with the if statement and direct assign the result of your conditional expression to a variable; this would avoid having to reset prob1. I've attached a Mathcad image that shows this method. You may even be able to vectorize the entire expression and avoid the loop altogether.

    NR
     

    Attached Files:

  4. Thank you that was very helpful! It's working great now.
     
  5. No worries.
     
Know someone interested in this topic? Share a link to this question via email, Google+, Twitter, or Facebook

Have something to add?