Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Simple MATLAB loop

Tags:
  1. Oct 30, 2015 #1
    I have a list of latitudes:
    lats =
    41.0100000000000
    43.7800000000000
    44.4200000000000
    41.2500000000000
    42.8000000000000
    42.7500000000000
    42.4900000000000
    42.4900000000000
    42.7800000000000
    44.3200000000000
    42.1500000000000
    41.9300000000000
    41.1700000000000

    I have a list of gridpoints (latitudes):
    X =
    41
    42
    43
    44
    45
    46

    I want to subtract every latitude value from my list of grid points... (i.g, X1-lats1, X1-lats2,X3-lats3....etc)

    if any X value is greater than any lats value i want d = 0 if not d = 1..


    Code i tried..i know why it dosent work but i dont know how to code it >.<
    for i = lats
    for j = X
    if i - j > 3
    d = 0;
    else
    d = 1;
    end
    end
    end
     
  2. jcsd
  3. Oct 30, 2015 #2
    You probably want something like this:
    Code (Matlab M):

    lats=[41.01  43.78  44.42 41.25 42.80 42.75 42.49 42.49 42.78 44.32 42.15 41.93 41.17];
    X=[41:46];
    ans=zeros(length(lats),length(X));
    for ix0=1:length(lats) for ix1=1:length(X) ans(ix0,ix1)=lats(ix0)-X(ix1); end; end;
     
    So, "ans" will contain your "lats" by "X" differences.
     
  4. Oct 30, 2015 #3
    Or, better:
    Code (Matlab M):

    for ix0=1:length(lats) ans(ix0,:)=lats(ix0)-X; end;
     
     
  5. Nov 1, 2015 #4

    kreil

    User Avatar
    Gold Member

    You can do this without using a loop at all by using the bsxfun function. This lets you subtract each value in X from the lats vector, and it forms a matrix. The row C(j,:) is equal to X(j)-lats.

    Then you just set all of the negative values (for which the value in X was less than the value in lats) to one, and the other values where X was greater will be 0.

    This code should be very fast if you have a larger dataset to do this with.
    Code (Text):

    C = bsxfun(@minus,X,lats')<0

    C =

         1     1     1     1     1     1     1     1     1     1     1     1     1
         0     1     1     0     1     1     1     1     1     1     1     0     0
         0     1     1     0     0     0     0     0     0     1     0     0     0
         0     0     1     0     0     0     0     0     0     1     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0     0
     
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Simple MATLAB loop
  1. For loop in matlab (Replies: 3)

Loading...