Page 187 - Basics of MATLAB and Beyond
P. 187

To get the following result Iused trial and error to get the right values
                               for the surface reflectance properties:
                               clf
                               h = surf(x,y,z);
                               set(h,’facecolor’,[.5 .5 .5],...
                                     ’edgecol’,’none’)
                               hl = light(’pos’,[1000,0,0]);
                               axis equal
                               axis off
                               view(-20,0)
                               set(h,’specularstrength’,0)
                               set(h,’ambientstrength’,1)
                               set(h,’diffusestrength’,10)
                               set(h,’backfacelighting’,’unlit’)

                               38    MATLAB Programming

                               38.1   Vectorising Code

                               Ionce heard Cleve Moler say, “The for loop gets a bad rap.” One
                               of the clearest ways to see the truth of this statement will be in this
                               section on speeding up matlab routines by vectorising code. We will be
                               eliminating for loops and replacing them with operations on vectors or
                               matrices. Yet, do not think that you must then eliminate all for loops
                               from your matlab code. When for loops are used appropriately they
                               are still very fast, efficient, and convenient. With this proviso, let us
                               look at an example.
                                  matlab’s diff function takes the difference between successive pairs
                               of elements in a vector, and writes them to another vector. Suppose you
                               want to carry out a similar operation, except now you want to compute
                               the sum of successive pairs instead of the difference. In mathematical
                               notation, you would write the formula:
                                             b i = a i + a i+1 ,  i =1, 2,...N − 1.

                               where a is the input vector of length N, and b is the output vector of
                               pairwise sums. The following piece of matlab code would do the job:
                               N = length(a);
                               b = zeros(1,N - 1);
                               for i = 1:N-1
                                 b(i) = a(i) + a(i + 1);
                               end
                               This code, or at least the line inside the for loop, has the advantage
                               of resembling the mathematical notation quite closely. We measure the



                               c   2000 by CRC Press LLC
   182   183   184   185   186   187   188   189   190   191   192