0% found this document useful (0 votes)
51 views

MATLAB III: More Arrays and Design Recipe

This document summarizes key points about arrays and functions in MATLAB: 1) Built-in MATLAB functions that operate on single values, like min, max, sum, etc. can also operate element-wise on entire arrays or matrices. These functions produce results with the same dimensions as the inputs. 2) Functions like min, max, sum operate column-wise on matrices, finding the minimum, maximum, or sum of each column. 3) Arrays support element-wise operations like addition, subtraction, and logical comparisons using operators like <, >, &, |. 4) Logical arrays produced from comparisons can be used to index into and extract elements from other arrays and matrices.

Uploaded by

kareem gamel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views

MATLAB III: More Arrays and Design Recipe

This document summarizes key points about arrays and functions in MATLAB: 1) Built-in MATLAB functions that operate on single values, like min, max, sum, etc. can also operate element-wise on entire arrays or matrices. These functions produce results with the same dimensions as the inputs. 2) Functions like min, max, sum operate column-wise on matrices, finding the minimum, maximum, or sum of each column. 3) Arrays support element-wise operations like addition, subtraction, and logical comparisons using operators like <, >, &, |. 4) Logical arrays produced from comparisons can be used to index into and extract elements from other arrays and matrices.

Uploaded by

kareem gamel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 43

Lecture 16

MATLAB III: More Arrays


and Design Recipe
Last Time (lectures 14 & 15)
Lecture 14: MATLAB I
• “Official” Supported Version in CS4: MATLAB 2018a
• How to start using MATLAB:
• CS Dept. Machines - run ‘cs4_matlab’
• Total Academic Handout (TAH) Local Install -
software.brown.edu
• MATLAB Online (currently 2019a) - matlab.mathworks.com
• Navigating the Workspace (command window, variables,
etc.)
• Data types in MATLAB (everything is a 64-bit double float
by default!)
• MATLAB Programs
• scripts (like Python)
• functions (file-based, outputs defined in signature)
• Anonymous functions and overwriting function names
(oops!)
2
Last Time (lectures 14 & 15)
Lecture 15: MATLAB II
• Conditional Statements
• if...end
• if...else...end
• if...elseif...else...end
• switch...end
• Arrays and Matrices (default numeric type)
• scalars (1x1 value)
• 1D vectors (1xN or Nx1 arrays)
• 2D matrices (MxN)
• linspace(a, b, n) vs. first:step:max
• Array concatenation, slicing, and indexing
• Array Manipulation
• zero-padding
• removing elements
• row-to-column x(:)
• Size of arrays (numel and size; not length)
3
Lecture 16 Goals: MATLAB III
• Multi-dimensional arrays:
• Applying built-in functions to matrices
• Scalar operations on matrices
• Element-wise operations on matrices
• Logical array comparisons
• Array indexing with ‘find’
• 3D arrays

4
Arrays as function arguments

◻ Many MATLAB functions that work on single numbers will


also work on entire arrays; this is very powerful!
◻ Results have the same dimensions as the input, results are
produced “elementwise”
◻ For example:
>> av = abs([-3 0 5 1])
av =
3 0 5 1

5
Powerful Array Functions

◻ There are a number of very useful function that are built-in


to perform operations on vectors, or column-wise on
matrices:
■ min the minimum value
■ max the maximum value
■ sum the sum of the elements
■ prod the product of the elements
■ cumprod cumulative product
■ cumsum cumulative sum

6
min, max Examples

>> vec = [4 -2 5 11];


>> min(vec)
ans =
-2
>> mat = randi([1, 10], 2,4)
mat =
6 5 7 4
3 7 4 10
>> max(mat)
ans =
6 7 7 10

• Note: the result is a scalar when the argument is a vector; the result is a 1 x n
vector when the argument is an m x n matrix

7
sum, cumsum vector Examples

◻ The sum function returns the sum of all elements; the


cumsum function shows the running sum as it iterates
through the elements (4, then 4+-2, then 4-2+5, and finally
4-2+5+11)
>> vec = [4 -2 5 11];
>> sum(vec)
ans =
18
>> cumsum(vec)
ans =
4 2 7 18

8
What is the value of b?

a = [2 3 1; -2 0 -6; 8 7 -1];
b = min(a);

What is the value of b?


A) -6 B) [-2 0 -6]
C) [1 -6 -1] D) [-6 -6 -6]

9
What is the value of b?

a = [2 3 1; -2 0 -6; 8 7 -1];
b = min(a);

What is the value of b?


A) -6 B) [-2 0 -6]
C) [1 -6 -1] D) [-6 -6 -6]

10
What is the value of b?

a = [2 3 1; -2 0 -6; 8 7 -1];
b = min(a’);

What is the value of b?


A) -6 B) [-2 0 -6]
C) [1 -6 -1] D) [-6 -6 -6]

11
What is the value of b?

a = [2 3 1; -2 0 -6; 8 7 -1];
b = min(a’);

What is the value of b?


A) -6 B) [-2 0 -6]
C) [1 -6 -1] D) [-6 -6 -6]

12
What is the value of b?

a = [2 3 1; -2 0 -6; 8 7 -1];
b = min(a(:));

What is the value of b?


A) -6 B) [-2 0 -6]
C) [1 -6 -1] D) [-6 -6 -6]

13
What is the value of b?

a = [2 3 1; -2 0 -6; 8 7 -1];
b = min(a(:));

What is the value of b?


A) -6 B) [-2 0 -6]
C) [1 -6 -1] D) [-6 -6 -6]

14
sum, cumsum matrix Examples

◻ For matrices, most functions operate column-wise:


>> mat = randi([1, 10], 2,4)
mat =
1 10 1 4
9 8 3 7
>> sum(mat)
ans =
10 18 4 11
>> cumsum(mat)
ans =
1 10 1 4
10 18 4 11

The sum is the sum for each column; cumsum shows the
cumulative sums as it iterates through the rows

15
prod, cumprod Examples

◻ These functions have the same format as


sum/cumsum, but calculate products
>> v = [2:4 10]
v =
2 3 4 10
>> cumprod(v)
ans =
2 6 24 240
>> mat = randi([1, 10], 2,4)
mat =
2 2 5 8
8 7 8 10
>> prod(mat)
ans =
16 14 40 80

16
Overall functions on matrices

• When functions operate column-wise for matrices, make


nested calls to get the function result over all elements of a
matrix, e.g.:
>> mat = randi([1, 10], 2,4)
mat =
9 7 1 6
4 2 8 5
>> min(mat)
ans =
4 2 1 5
>> min(min(mat))
ans =
1

17
Overall functions on arrays

◻ Alternatively, since linear indexing arranges all the


elements of an array into a column, you can also use this
approach.

>> m = max(A(:)) % Find max of A, regardless of


dim.

18
Scalar operations

•Numerical operations can be performed on every element


in an array
•For example, Scalar multiplication: multiply every
element by a scalar
>> [4 0 11] * 3
ans =
12 0 33
•Another example: scalar addition; add a scalar to every
element
>> zeros(1,3) + 5
ans =
5 5 5

19
Array Operations

• Array operations on two matrices A and B:


• these are applied between individual elements
• this means the arrays must have the same dimensions
• In MATLAB:
• matrix addition: A + B
• matrix subtraction: A – B or B – A
• For operations that are based on multiplication
(multiplication, division, and exponentiation), a dot must be
placed in front of the operator. Unless you’re doing linear
algebra, this point-wise approach is generally what you want.
• array multiplication: A .* B
• array division: A ./ B, A .\ B
• array exponentiation A .^ 2
• matrix multiplication: A*B is NOT an element-wise operation

20
Logical Vectors and Indexing

• Using relational and logical operators on a vector or matrix


results in a logical vector or matrix
>> vec = [44 3 2 9 11 6];
>> logv = vec > 6
logv =
1 0 0 1 1 0
• Can use this to index into a vector or matrix, index and matrix
dimensions must agree (logical linear indexing also OK)
>> vec(logv)
ans =
44 9 11

21
Element-wise logical operators

• | and & applied to arrays operate elementwise; i.e. go through


element-by-element and return logical 1 or 0
>> [1 2 3 -1 1]>[0 1 2 1 0]
ans = 1×5 logical array
1 1 1 0 1
• || and && are used for scalars

22
True/False

◻ false equivalent to logical(0)


◻ true equivalent to logical(1)

◻ false(m,n) and true(m,n) create matrices of


all false or true values

23
Logical Built-in Functions

◻ any, works column-wise, returns true for a column, if it


contains any true values
◻ all, works column-wise, returns true for a column, if all the
values in the column are true

>> M = randi([-5 100], m, n)


>> any(M<0 | M==5) % returns a 1 x n vector
% elements are true if corresponding
% column in M has any negative
% entries or any 5s in it.
>> all(M(:)>0) % true if all elements strictly positive

24
Finding elements

◻ find finds locations and returns indices


>> vec
vec =
44 3 2 9 11 6
>> find(vec>6)
ans =
1 4 5

◻ find also works on higher dimensional arrays

[i,j] = find(M>0) % returns non-zero matrix


indices
ind = find(A>0) % returns linear array indices

25
Comparing Arrays

◻ The isequal function compares two arrays, and returns


logical true if they are equal (all corresponding elements) or
false if not
>> v1 = 1:4;
>> v2 = [1 0 3 4];
>> isequal(v1,v2)
ans =
0
>> v1 == v2
ans =
1 0 1 1
>> all(v1 == v2)
ans =
0

26
3D Matrices

◻ A three dimensional matrix has dimensions m x n x p


◻ Can create with built-in functions, e.g. the following
creates a 3 x 5 x 2 matrix of random integers; there are 2
layers, each of which is a 3 x 5 matrix
>> randi([0 50], 3,5,2)
ans(:,:,1) =
36 34 6 17 38
38 33 25 29 13
14 8 48 11 25
ans(:,:,2) =
35 27 13 41 17
45 7 42 12 10
48 7 12 47 12

27
Functions diff and meshgrid

◻ diff returns the differences between consecutive elements in


a vector
◻ meshgrid receives as input arguments two vectors, and
returns as output arguments two matrices that specify
separately x and y values
>> [x y] = meshgrid(1:3,1:2)
x =
1 2 3
1 2 3
y =
1 1 1
2 2 2

Where could meshgrid be useful?

28
Common Pitfalls

• Attempting to create a matrix that does not have the same number
of values in each row
• Confusing matrix multiplication and array multiplication. Array
operations, including multiplication, division, and exponentiation,
are performed term by term (so the arrays must have the same size);
the operators are .*, ./, .\, and .^.
• Attempting to use an array of double 1s and 0s to index into an
array (must be logical, instead)
• Attempting to use || or && with arrays. Always use | and & when
working with arrays; || and && are only used with logical scalars.

29
Programming Style Guidelines

• Extending vectors or matrices is not very fast, avoid doing this too
much
• To be general, avoid assuming fixed dimensions for vectors , matrices
or arrays. Instead, use end and colon : in context, or use size and
numel

>> len = numel(vec);


>> [r, c] = size(mat);
>> last_col = mat(:, end);

• Use true instead of logical(1) and false instead of logical(0),


especially when creating vectors or matrices.

30
DESIGN Recipe

31
Testing

• Even simple functions can be deceptively hard to verify as


correct just by “looking at them”
• However, it is easy to test functions on data you understand
(and know what the correct answer should be)
• As functions and programs (which may use lots of functions)
get more complicated this becomes very important

32
assert

In MATLAB, the assert function allows one to easily perform a


test
assert(expr, message)
Stops execution and prints our the message when expr evaluates
to false.

33
Examples

• test_triArea.m
• test_myQuadRoots.m

34
Testing is Programming

• We’ve discovered developing tests first (before writing any


functions) often speeds the development process and helps
ensure programs work correctly
• In fact, designing tests should be viewed as a part of
programming even though you aren’t actively coding a
solution.

35
Design Recipe

Design Recipe

1.Develop important Test Cases – (actually code them, requires


you to first create function header)
2.Code function body
3.Test!
4.Fix code, re-Test until working correctly

36
Example: myFtoC

• Use the Design Recipe to solve the following problem:

“Write a function converts degrees Fahrenheit to degrees


Celsius.”

37
Example: myFtoC

1. Write test_myFtoC
2. Write myFtoC
3. Run test_myFtoC
4. Fix code, re-test until working correctly
5. Look at code, identify any pertinent additional tests
6. Retest, until working correctly

Done!

38
Example: myFtoC

◻ test_myFtoC.m
◻ myFtoC.m

39
Example: quadMin

• Use the Design Recipe to solve the following problem:

“Write a function that finds x that minimizes


ax^2+bx+c
in the interval [L,R]. Assume a>=0, L<R.”

40
Example: quadMin

“Write a function that finds x that minimizes


ax^2+bx+c
in the interval [L,R]. Assume a>=0, L<R.”

What kind of tests should we have?


What are the cases?

41
Example: quadMin

• test_quadMin.m

42

You might also like