Programming Languages Matlab 3101 - Class 3

3/26/08, Instructor: Blake Shaw

Contents

Notes: HW1 grades, Quiz,

HW 1, avg is 82.5, std deviation is 14, quiz is next week, it will be the second half of class, 1 hour, closed book, closed computer, closed everything.

Review

Loops, and Control flow: if, while, for, try/catch. Displaying text with formatting. More plotting: spy, imagesc.

Today: focus on data structures

matrices (including numbers, and lists), strings, cells, saving and loading

Numbers, Lists, and Matrices

show some examples with [], cat, indexing, transpose, flip, rot90, reshape, flattening with (:)

a = 34;

A = [4, 5; 6, 8; 10, 15]

B = [7, 8; 10, 12]

C = [A; B; [9, 8]]


C = [A', B]

D = [A(1:2, 1:2), B]
A =

     4     5
     6     8
    10    15


B =

     7     8
    10    12


C =

     4     5
     6     8
    10    15
     7     8
    10    12
     9     8


C =

     4     6    10     7     8
     5     8    15    10    12


D =

     4     5     7     8
     6     8    10    12

A = round(10*rand(3, 2))

B = round(10*rand(3, 2))

C = round(10*rand(3, 2))

D = cat(3, A, B, C);

size(D)
A =

     3     2
     3    10
     4     7


B =

     6     4
     7     1
     2     6


C =

     2     8
     3     5
     4     3


ans =

     3     2     3

A = round(20*rand(3, 3));

fliplr(A)
flipud(A)

A
rot90(A)

sum(sum(sum(D)))
sum(D(:))


flatD = D(:);

reshape(flatD, 3, 6)
ans =

     1     6    15
     1     7     6
     0     4     5


ans =

     5     4     0
     6     7     1
    15     6     1


A =

    15     6     1
     6     7     1
     5     4     0


ans =

     1     1     0
     6     7     4
    15     6     5


ans =

    80


ans =

    80


ans =

     3     2     6     4     2     8
     3    10     7     1     3     5
     4     7     2     6     4     3

Creating special matrices

zeroes, ones, eye, diag, linspace, :, rand, randn

A = zeros(3, 2, 4)
A = ones(3, 3)

A = eye(3, 3)


A = diag(eye(3, 3))

A = diag([2, 3, 5, 7])

b = linspace(-pi, pi, 1000);

length(b)
plot(b, sin(b))

a = 6:0.2:9;

length(a)
A(:,:,1) =

     0     0
     0     0
     0     0


A(:,:,2) =

     0     0
     0     0
     0     0


A(:,:,3) =

     0     0
     0     0
     0     0


A(:,:,4) =

     0     0
     0     0
     0     0


A =

     1     1     1
     1     1     1
     1     1     1


A =

     1     0     0
     0     1     0
     0     0     1


A =

     1
     1
     1


A =

     2     0     0     0
     0     3     0     0
     0     0     5     0
     0     0     0     7


ans =

        1000


ans =

    16

a = rand(10000, 1);
b = randn(10000, 1);

hist(a)
hist(b)

Matrices can be high-dimensional

squeeze, shiftdim

D = floor(10*rand(3, 2, 3))

D2 = sum(D, 2)

size(D2)

D3 = squeeze(D2)


size(D3)
D(:,:,1) =

     4     7
     1     5
     4     3


D(:,:,2) =

     5     1
     3     6
     8     3


D(:,:,3) =

     9     5
     1     9
     4     5


D2(:,:,1) =

    11
     6
     7


D2(:,:,2) =

     6
     9
    11


D2(:,:,3) =

    14
    10
     9


ans =

     3     1     3


D3 =

    11     6    14
     6     9    10
     7    11     9


ans =

     3     3

D

size(D)

D4 = shiftdim(D, 3)

size(D4)
D(:,:,1) =

     4     7
     1     5
     4     3


D(:,:,2) =

     5     1
     3     6
     8     3


D(:,:,3) =

     9     5
     1     9
     4     5


ans =

     3     2     3


D4(:,:,1) =

     4     7
     1     5
     4     3


D4(:,:,2) =

     5     1
     3     6
     8     3


D4(:,:,3) =

     9     5
     1     9
     4     5


ans =

     3     2     3

circshift

A = floor(10*rand(5, 5))
A =

     2     8     3     0     7
     5     0     4     2     1
     7     0     8     7     1
     7     7     0     7     0
     7     7     6     0     8

A

circshift(A, 1)

circshift(A, [1, 1])
A =

     2     8     3     0     7
     5     0     4     2     1
     7     0     8     7     1
     7     7     0     7     0
     7     7     6     0     8


ans =

     7     7     6     0     8
     2     8     3     0     7
     5     0     4     2     1
     7     0     8     7     1
     7     7     0     7     0


ans =

     8     7     7     6     0
     7     2     8     3     0
     1     5     0     4     2
     1     7     0     8     7
     0     7     7     0     7

Matrices can be sparse

sparse, nnz, nonzeros, sprand

N = 10^3;
A = zeros(N, N);

size(A)
ans =

        1000        1000

N = 10^5;
B = sparse(N, N);

size(B)
ans =

      100000      100000

B(1, 5) = 9;
B(4, 9) = 12;

B = B .^ 2;

B(1, 5)
ans =

    81

nnz(B)

nonzeros(B)



C = sprand(N, N, 0.0005);
ans =

     2


ans =

    81
   144

nnz(C)
imagesc(C(1:100, 1:100)); axis image;
ans =

     4998683

Creating indexes

:, randperm, sub2ind, ind2sub

X = rand(100,1);
N = length(X);

i = randperm(N);
X(i(1:10))


[i, j] = ind2sub([5, 5], 14)
ans =

    0.3139
    0.2701
    0.4732
    0.2856
    0.1056
    0.1234
    0.6130
    0.9145
    0.4224
    0.1527


i =

     4


j =

     3

Avoiding loops

repmat, find, circshift, relational operators, sort, permute

a = rand(10, 10);
[i, j] = find(a < 0.5)


[i, j]
i =

     1
     3
     4
     5
     6
     8
     9
     1
     2
     3
     5
     7
     8
    10
     1
     2
     3
     5
     7
     9
     2
     5
     7
    10
     3
     6
     8
     1
     2
     3
     4
     6
     7
     8
    10
     1
     2
     3
     8
     1
     7
    10
     2
     3
     4
     6
     7
     9
    10
     2
     4
     5
     7
    10


j =

     1
     1
     1
     1
     1
     1
     1
     2
     2
     2
     2
     2
     2
     2
     3
     3
     3
     3
     3
     3
     4
     4
     4
     4
     5
     5
     5
     6
     6
     6
     6
     6
     6
     6
     6
     7
     7
     7
     7
     8
     8
     8
     9
     9
     9
     9
     9
     9
     9
    10
    10
    10
    10
    10


ans =

     1     1
     3     1
     4     1
     5     1
     6     1
     8     1
     9     1
     1     2
     2     2
     3     2
     5     2
     7     2
     8     2
    10     2
     1     3
     2     3
     3     3
     5     3
     7     3
     9     3
     2     4
     5     4
     7     4
    10     4
     3     5
     6     5
     8     5
     1     6
     2     6
     3     6
     4     6
     6     6
     7     6
     8     6
    10     6
     1     7
     2     7
     3     7
     8     7
     1     8
     7     8
    10     8
     2     9
     3     9
     4     9
     6     9
     7     9
     9     9
    10     9
     2    10
     4    10
     5    10
     7    10
    10    10

a = [1, 2, 3]
a([2, 1, 3])
a =

     1     2     3


ans =

     2     1     3

X = rand(100, 2);
p = rand(1, 2);
figure(1); clf;
hold on;
scatter(X(:, 1), X(:, 2))
scatter(p(1, 1), p(1, 2), 'r+')
hold off;
dists = sum((X - repmat(p, 100, 1)).^2, 2);
i = find(dists < 0.01)

[C, I] = min(dists)
i =

     1
     8
    25
    27
    30
    39


C =

    0.0010


I =

    39

Strings

declaring, concatenating, indexing, converting, strfind, strtok

a = 'hello';

length(a)

b = [a, ' blake'];


strfind(b, 'll')

strfind(b, 'afdas')


%c = ['string1'; 'this is string 2'; 'hi']
ans =

     5


ans =

     3


ans =

     []

basic types: double, char unit8

char(double(b) + 1)


b(5)

b(2:5)
ans =

ifmmp!cmblf


ans =

o


ans =

ello

Cells

declaring, concatenating

A = cell(4, 1);

A{1} = 'this is a string';

A{2} = rand(10, 10);

A{3} = 'this is another string';

A{4} = cell(2, 2);


B = cell(2, 2)

C = cell(2, 2)

D = {B, C}

D = {rand(10), 10, 'hello'}

D = [B C]
B = 

     []     []
     []     []


C = 

     []     []
     []     []


D = 

    {2x2 cell}    {2x2 cell}


D = 

    [10x10 double]    [10]    'hello'


D = 

     []     []     []     []
     []     []     []     []

Saving and Loading variables

who, whos, clear, save, load

whos

save results.mat

clear

whos

whos -file results.mat

load results.mat
  Name         Size             Bytes  Class     Attributes

  A            4x1               1132  cell                
  B            2x2                 16  cell                
  C            2x2                 16  cell                
  D            2x4                 32  cell                
  D2           3x1x3               72  double              
  D3           3x3                 72  double              
  D4           3x2x3              144  double              
  I            1x1                  8  double              
  N            1x1                  8  double              
  X          100x2               1600  double              
  a            1x5                 10  char                
  ans          1x4                  8  char                
  b            1x11                22  char                
  c            1x25                50  char                
  dists      100x1                800  double              
  flatD       18x1                144  double              
  i            6x1                 48  double              
  j           54x1                432  double              
  p            1x2                 16  double              
  s            1x2                  4  char                

  Name         Size             Bytes  Class     Attributes

  A            4x1               1132  cell                
  B            2x2                 16  cell                
  C            2x2                 16  cell                
  D            2x4                 32  cell                
  D2           3x1x3               72  double              
  D3           3x3                 72  double              
  D4           3x2x3              144  double              
  I            1x1                  8  double              
  N            1x1                  8  double              
  X          100x2               1600  double              
  a            1x5                 10  char                
  ans          1x4                  8  char                
  b            1x11                22  char                
  c            1x25                50  char                
  dists      100x1                800  double              
  flatD       18x1                144  double              
  i            6x1                 48  double              
  j           54x1                432  double              
  p            1x2                 16  double              
  s            1x2                  4  char                

User Input

input, str2num

s = input('what is the temp today?\n', 's');
Error using ==> input
Cannot call INPUT from EVALC.
str2num(s) + 1

About HW3

Talk about rot13 encoding, and the caesar cipher

Quiz review

%{
Class Notes 1:3

Working with matrices:
http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/math/f4-988203.html

Basic Flow Control:
http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/learn_matlab/f4-1931.html

%}