Date post: | 19-Dec-2015 |
Category: |
Documents |
View: | 215 times |
Download: | 2 times |
Insight Through Computing
14. Still More on Arrays
Functions with array parameters.
Row and column vectors
Built-Ins: length, zeros, stdRevisit: rand, randn, max
Insight Through Computing
Row and Column Vectors
>> v = [1 2 3]v = 1 2 3
>> v = [1 ; 2 ; 3]v = 1 2 3
Observe semicolons
Insight Through Computing
zeros( , )
>> x = zeros(3,1)x = 0 0 0>> x = zeros(1,3)x = 0 0 0
Insight Through Computing
rand( , )
>> x = rand(3,1)x = 0.2618 0.7085 0.7839
>> x = rand(1,3)x = 0.9862 0.4733 0.9028
Insight Through Computing
randn( , )
>> x = randn(1,3)
x =
0.2877 -1.1465 1.1909
>> x = randn(3,1)
x =
1.1892
-0.0376
0.3273
Insight Through Computing
Normal Distribution withZero Mean and Unit STD
Insight Through Computing
Affirmations
>> n = 1000000;>> x = randn(n,1);
>> ave = sum(x)/nave = -0.0017
>> standDev = std(x)standDev = 0.9989
Insight Through Computing
length
>> v = randn(1,5);
>> n = length(v)
n =
5
>> u = rand(5,1);
>> n = length(u)
n =
5
The length function doesn’t care about row or column orientation.
Insight Through Computing
Augmenting Row Vectors
>> x = [10 20]
x =
10 20
>> x = [x 30]
x =
10 20 30
>>
Insight Through Computing
Augmenting Column Vectors
>> x = [10;20]
x =
10
20
>> x = [x ; 30]
x =
10
20
30Observe semicolons!
Insight Through Computing
“Concatenating” Row Vectors
>> x = [10 20]
x =
10 20
>> y = [30 40 50]
y =
30 40 50
>> z = [x y]
z =
10 20 30 40 50
Insight Through Computing
“Concatenating” Column Vectors
>> x = [10 ; 20];
>> y = [30 ; 40 ; 50];
>> z = [ x ; y ]
z =
10
20
30
40
50Observe semicolons!
Insight Through Computing
Application
x = linspace(0,2*pi,100);
y = sin(x);
x = [x x+2*pi];
y = [y y];
plot(x,y)
Plot sine across [0,4*pi] and use the fact that it has period 2pi.
Insight Through Computing
x = linspace(0,2*pi,100);x = [ x x+2*pi ];
linspace(2*pi,4*pi,100)]
Insight Through Computing
The Empty Vector
x = [ ]; for k=1:50 if floor(sqrt(k))==sqrt(k) x = [x; k]; endendx = x
x = 1 4 9 16 25 36 49
Insight Through Computing
Array Hints & Errors
Insight Through Computing
Dimension Mismatch
>> x = [1;2]x = 1 2
>> y = [3 4]y = 3 4
>> z = x+y??? Error using ==> plus Matrix dimensions must agree.
Can’t add a row vector to a column vector
Insight Through Computing
Not a Syntax Error
>> x = rand(3)
x =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
You probably meant to sayx = rand(1,3) or x = rand(3,1).
Insight Through Computing
A Style Hint
Assume n is initialized.
a = zeros(1,n)
for k=1:n
a(k) = sqrt(k);
end
a = [ ];
for k=1:n
a = [a sqrt(k)];
end
Better because it reminds you of the size and shape of the array you set up.
Insight Through Computing
Error: Out-ofRange Subscript
>> x = [10 20 30]
x = 10 20 30
>> c = x(4)
??? Index exceeds matrix dimensions.
Insight Through Computing
This is OK…
>> x = [ 10 20 30]x = 10 20 30
>> x(4) = 100x = 10 20 30 100
Insight Through Computing
Forgot the Semicolon?
>> x = randn(1000000,1)
Insight Through Computing
Forgot the Semicolon?
>> x = randn(1000000,1)
Remember: ctrl-C
Insight Through Computing
Question Time
A = [ 1 ];while(length(A) < 5) A = [length(A)+1 ; A];endA = A
Is this the same as
A = linspace(1,5,5) ?
A. Yes B. No
Insight Through Computing
No!
Linspace: 1 2 3 4 5
Fragment: 5 4 3 2 1
Insight Through Computing
Question Time
x = zeros(1,1);for k=1:3 x = [x x];endy = x(7)
Will this cause a subscript out ofbounds error?
A. Yes B. No
Insight Through Computing
No!
How x changes:
After 1st pass: [0 0]After 2nd pass: [ 0 0 0 0 ]After 3rd pass: [0 0 0 0 0 0 0 0]
So y = x(7) makes sense.
Insight Through Computing
Polygon Transformations
Functions & arrays
Insight Through Computing
A Polygon
(x4,y4)
(x1,y1)
(x3,y3)
(x2,y2)
(x5,y5)
Store xy-coordinates in vectors x and y.
Insight Through Computing
Operation 1: Centralize
Move a polygon so that the centroidof its vertices is at the origin.
Insight Through Computing
Before
After
Centralize
Insight Through Computing
Centralize
function [xNew,yNew] = Centralize(x,y)
n = length(x);
xBar = sum(x)/n;
yBar = sum(y)/n;
xNew = x-xBar;
yNew = y-yBar;
Computes the vertices of the new polygon
Notice how length is used to figure out the size of the incoming vectors.
Insight Through Computing
Operation 2: Normalize
Shrink (enlarge) the polygon so thatthe vertex furthest from the(0,0) is on the unit circle.
Insight Through Computing
Before
After
Normalize
Insight Through Computing
function [xNew,yNew] = Normalize(x,y)
d = max(sqrt(x.^2 + y.^2));
xNew = x/d;
yNew = y/d;
Normalize
Applied to a vector, max returns the largest value in the vector.
Insight Through Computing
Operation 3: Smooth
Obtain a new polygon by connectingthe midpoints of the edges
Insight Through Computing
Smooth
Insight Through Computing
Midpoints
(a,b)
( (a+c)/2 , (b+d)/2 )
(c,d)
Insight Through Computing
function [xNew,yNew] = Smooth(x,y) n = length(x); xNew = zeros(n,1); yNew = zeros(n,1);
for i=1:n Compute the mdpt of ith edge. Store in xNew(i) and yNew(i) end
Smooth
Insight Through Computing (x4,y4)
(x1,y1)
(x3,y3)
(x2,y2)
(x5,y5)
xNew(1) = (x(1)+x(2))/2yNew(1) = (y(1)+y(2))/2
Insight Through Computing (x4,y4)
(x1,y1)
(x3,y3)
(x2,y2)
(x5,y5)
xNew(2) = (x(2)+x(3))/2yNew(2) = (y(2)+y(3))/2
Insight Through Computing (x4,y4)
(x1,y1)
(x3,y3)
(x2,y2)
(x5,y5)
xNew(3) = (x(3)+x(4))/2yNew(3) = (y(3)+y(4))/2
Insight Through Computing (x4,y4)
(x1,y1)
(x3,y3)
(x2,y2)
(x5,y5)
xNew(4) = (x(4)+x(5))/2yNew(4) = (y(4)+y(5))/2
Insight Through Computing (x4,y4)
(x1,y1)
(x3,y3)
(x2,y2)
(x5,y5)
xNew(5) = (x(5)+x(1))/2yNew(5) = (y(5)+y(1))/2
Insight Through Computing (x4,y4)
(x1,y1)
(x3,y3)
(x2,y2)
(x5,y5)
xNew(5) = (x(5)+x(1))/2yNew(5) = (y(5)+y(1))/2
Insight Through Computing
for i=1:n xNew(i) = (x(i) + x(i+1))/2; yNew(i) = (y(i) + y(i+1))/2;end
Will result in a subscriptout of bounds error when i is n.
Smooth
Insight Through Computing
for i=1:n if i<n xNew(i) = (x(i) + x(i+1))/2; yNew(i) = (y(i) + y(i+1))/2; else xNew(n) = (x(n) + x(1))/2; yNew(n) = (y(n) + y(1))/2; endend
Smooth
Insight Through Computing
for i=1:n-1
xNew(i) = (x(i) + x(i+1))/2;
yNew(i) = (y(i) + y(i+1))/2;
end
xNew(n) = (x(n) + x(1))/2;
yNew(n) = (y(n) + y(1))/2;
Smooth
Insight Through Computing
Proposed Simulation
Create a polygon with randomlylocated vertices.
Repeat: Centralize Normalize Smooth
Insight Through Computing
Insight Through Computing
2D Random Walk
Insight Through Computing
Start in middle tile.
Repeat untilboundary reached:
Pick a compass heading* at random.
Move one tile in that direction.
* North, East, South, West1-by-1 tiles
Insight Through Computing
function [x y] = RandomWalk2D(N) k = 0; xc = 0; yc = 0; while abs(xc)<N && abs(yc)< N
Take another hop. Update location (xc,yc).
k = k + 1; x(k) = xc; y(k) = yc; end
Function that Returns the Path
Insight Through Computing
k x(k) y(k)-------------1 0 -12 0 03 -1 04 0 05 0 16 1 17 1 08 1 19 0 1: : :
Insight Through Computing
if rand < .5 if rand < .5 xc = xc + 1; % East else xc = xc - 1; % West end else if rand < .5 yc = yc + 1; % North else yc = yc - 1; % Sounth end end
Insight Through Computing
How Many Returns to (0,0)?
% x and y are n-vectors.% How many times do we have % (x(k),y(k)) = (0,0)?m = 0;for k=1:length(x) if x(k)==0 && y(k)==0 m = m + 1; endend