Programming WithMatlab Complete Lessons

Download as pdf or txt
Download as pdf or txt
You are on page 1of 123

Lesson 1: Introduction to MATLAB

by

Akos Ledeczi and Mike Fitzpatrick


 Lead instructor: Mike Fitzpatrick
 Supported by: Akos Ledeczi and Robert Tairas
 Vanderbilt University School of Engineering
 Purpose
◦ To teach computer programming to people who have little
or no experience with programming
 Level
◦ Introductory college course
 Length:
◦ 8 weeks of video lectures
◦ Extra week for final homework submission
 First high-level language: FORTRAN (1954)
◦ To make programming easier, especially to solve
numerical problems
 Today’s languages: 1970s-
◦ For commercial, “shrink-wrapped”, large, complex
programs: C, C++, Java, C#, etc.
◦ To make programming easier and to solve numerical
problems: MATLAB
 Invented by Prof. Cleve Moler to make
programming easy for his students
◦ Late 1970s
◦ University of New Mexico
 The MathWorks, Inc. was formed in1984
◦ By Moler and Jack Little
◦ One product: MATLAB
 Today
◦ 100 products
◦ Over 1,000,000 users
◦ Taught in 5,000 universities
 In 2012 the IEEE gave Cleve Moler its annual
Computer Pioneer Award
◦ “For Improving the quality of mathematical software,
making it more accessible, and creating MATLAB”
 This course is our effort to add to the impact
of Moler’s creation by using it to make
computer programming more accessible to
you.
 We approach MATLAB programming as part
of computer science.
 We use the concepts and vocabulary of
computer science to introduce computer
programming.
 This approach gives an idea of how computer
scientists think...
 and makes it easier to learn MATLAB!
 www.mathworks.com
 Paying for MATLAB
◦ Student: $50
◦ MATLAB instructor: Free!
◦ Companies: $100s per user
 Trying MATLAB for free
◦ For everybody: 30 days
◦ For students in this course: free for12 weeks!
 How to get it? Visit class website for info.
 eBook
 Title and authors:
same as the course!
 Recommended, but not
required.
 Current version used at
Vanderbilt since 2013
 Previous versions used at
Vanderbilt since 2000
J. Michael Fitzpatrick
and Ákos Lédeczi
 Both Apple (iBook for
iPad and Mac) and PDF
versions are available for
$9.99 at
◦ cs103.net
 Three main chapters
◦ Chapters 1 and 2 are covered
in this course
◦ The more advanced concepts
in Chapter 3 can be learned
on your own from the book
after completion of this
course J. Michael Fitzpatrick
and Ákos Lédeczi
Lesson 2: Matrices and Operators

by

Akos Ledeczi and Mike Fitzpatrick


 Array
◦ Any set of numbers arranged in a rectangular
pattern.
10 14 48 25

Example—
A page with six rows
24 34 17 35

of four numbers each


is a two-dimensional 22 33 29 44

array
32 8 11 48

35 6 37 27

37 25 13 7
 Array
◦ Any set of numbers arranged in a rectangular
pattern.
10 14 48 25
27 1 9 23
8 46 18 38
Three-dimensional
24 34 17 35
39 17 30 5
Example— 13 18 41
22
37
33 29 44
A stack of such 46 8 13 12
pages 42 10 29
32
19
8 11 48
7 39 33 45
13 13 27 28
35 6 37 27
28 16 34 8
40 31 45 4
37 25 13 7
24 26 37 41
12 24 15 3
 Higher dimensions are uncommon
 The most common have special names:
◦ 2D array = “matrix” (plural is “matrices”)
◦ 1D array = “vector”
 Most ingenious part of Cleve Moler’s
invention of MATLAB was the way he set it up
to deal with matrices.
 MATLAB stands for “Matrix Laboratory”!
>> X = [1:4; 5:8; 9:12];

1: 1 2 3 4
2: 5 6 7 8 rows
3: 9 10 11 12
>> X = [1:4; 5:8; 9:12];

1: 2: 3: 4:

1 2 3 4
5 6 7 8
9 10 11 12
columns
>> X = [1:4; 5:8; 9:12];
>> X(2,3)
3:

1 2 3 4
2: 5 6 7 8
9 10 11 12

>> ans =
7
 Z = X + Y means
◦ Z(m,n) = X(m,n) + Y(m,n) for all valid m and n
 Different from Array Multiplication!
 Z = X * Y means that for all valid m and n

 Not always legal:


◦ Inner dimensions of X and Y must be the same
 Z = X./Y
◦ means that for each m and n, Z(m,n) = X(m,n)/Y(m,n)
 Z = X.\Y
◦ means that for each m and n, Z(m,n) = Y(m,n)/X(m,n)
 Try these out in MATLAB on your own!
 Matrix division is a complicated concept in
linear algebra, so we are not covering it here
◦ But you can check out the advanced concepts of the
textbook for detailed explanation
 x = a + b + c
◦ order does not matter with addition
 y = c + a * b is not the same as
 y = (c + a) * b
 Multiplication has priority over addition
◦ In programming, this is called precedence

Precedence Table
 x = a + b + c
 x = a * b * c
◦ order does not matter with addition or multiplication
 y = a ^(b ^ c) is not the same as
 y = (a ^ b)^ c
 In programming, the order in which operators
of the same precedence are executed is called
associativity
 In MATLAB, it is left to right
 y = a ^ b ^ c is the same as
 y = (a ^ b) ^ c
Lesson 3: Functions

by

Akos Ledeczi and Mike Fitzpatrick


 function [out_arg1, out_arg2, ...] =
function_name (in_arg1, in_arg2, ...)
 Examples
◦ function func
◦ function func(in1)
◦ function func(in1, in2)
◦ function out1 = func
◦ function out1 = func(in1)
◦ function [out1, out2] = func
◦ function [out1, out2] = func(in1, in2)
◦ …
 Use meaningful names that tell you
something about what your function does
 Do not use existing names, e.g., plot, sum,
sqrt, sin, etc.
◦ MATLAB already has these
◦ It would get really confusing really fast
◦ To check whether a name is already in use, try the
built-in exist function. To see how it works, try

>> help exist


 Functions allow you to break down large,
complex problems to smaller, more
maneagable pieces
 Functional decomposition
 Reusability
 Generality
◦ A function can solve a set of related problems not just
a specific one by accepting input arguments.
◦ For example, the built-in function plot can draw a
wide range of figures based on its input
Lesson 4: Programmer’s Toolbox

by

Akos Ledeczi and Mike Fitzpatrick


 Polymorphic: having multiple forms
 If a function can handle calls when the same
input argument has different types:
polymorphic function
 If a function can handle a variable number of
input arguments: polymorphic also
 Many MATLAB functions return an output that
has the same shape as the input provided
(e.g., sqrt)
 Polymorphism is very powerful
 When we start MATLAB and call rand, it
always returns the same exact number:
0.8147 (As an exercise, try it at home!)
 Pseudo random number generator: initialized
at startup and it generates the exact same
sequence of numbers every time
 Repeatability for testing the program: good!
 What if we want “truly” random numbers?
 Initialize the MATLAB pseudo random number
generator with rng!
 It is easy to make mistakes!
 Syntax errors:
◦ MATLAB catches these
 Semantic errors
◦ Some may cause errors that MATLAB can catch
◦ Some may cause the wrong result every time
◦ Some may only cause problems occasionally (e.g.,
with a certain combination of inputs):
 Hard to notice and find the cause of
 MATLAB has built-in debugger
◦ Tool to help find errors (bugs)
Lesson 5: Selection

by

Akos Ledeczi and Mike Fitzpatrick


 Sequential control
◦ Sequence of commands executed one after the other
 MATLAB interpreter
◦ Part of the MATLAB program that interprets and
executes the various commands
◦ Sequential control: default
 Control construct
◦ A method by which the interpreter selects the next
command to execute
◦ Sequential control: default
◦ Selection or Branching
 Most common selection construct: if-statement
 Example:
function guess_my_number(x)
if x == 2
fprintf('Congrats! You guessed my number.\n');
end
 Begins with control statement
◦ if keyword followed by a condition
 Ends with statement: end
 In between: statements to be executed if and
only if condition is true
control
control
statement
statement

x == 2

block
control
statement
control
statement

x == 2

block
control
statement
control
statement

x == 2

block
 Executing a different set of statements based
on the condition:

function guess_my_number(x)
if x == 2
fprintf('Congrats! You guessed my number!\n');
else
fprintf('Not right, but a good guess.\n');
end
control
statement

x == 2

block2

block1
control
statement

x == 2

block2

block1
control
statement

x == 2

block2

block1
 if-statement:

if conditional
block
end
 Produces a result that depends on the
relation between its two operands
 It can appear outside if-statements!
 Logical values:
◦ Non-zero: true
◦ Zero: false
◦ MATLAB returns 1 for true
 How to combine logical values?
 Logical operators:
 not:
◦ flips the value of its (single) operand
 and:
◦ true if and only if both of its operands are true
 or:
◦ false if and only if both of its operands are false

false false
false true
true false
true true
 not:
◦ flips the value of its (single) operand
 and:
◦ true if and only if both of its operands are true
 or:
◦ false if and only if both of its operands are false
>> help precedence
1. transpose (.'), power (.^), complex conjugate
transpose ('), matrix power (^)
2. unary plus (+), unary minus (-), logical negation (~)
3. multiplication (.*), right division (./), left
division (.\), matrix multiplication (*), matrix right
division (/), matrix left division (\)
4. addition (+), subtraction (-)
5. colon operator (:)
6. less than (<), less than or equal to (<=),
greater than(>), greater than or equal to (>=),
equal to (==), not equal to (~=)
7. element-wise logical AND (&)
8. element-wise logical OR (|)
9. short-circuit logical AND (&&)
10. short-circuit logical OR (||)
 if-statements can contain other if-statements
 Consider the example with a single if-elseif-
else statement:

function ultimate_question(x)
if x == 42
fprintf('Wow! You answered the question.\n');
elseif x < 42
fprintf('Too small. Try again.\n');
else
fprintf('Too big. Try again.\n');
end
 Here is a version with nesting:

function ultimate_question_nested(x)
if x == 42
fprintf('Wow! You answered the question.\n');
else
if x < 42
fprintf('Too small. Try again.\n');
else
fprintf('Too big. Try again.\n');
end
end
 Here is another version with nesting:

function ultimate_question_nested2(x)
if x <= 42
if x == 42
fprintf('Wow! You answered the question.\n');
else
fprintf('Too small. Try again.\n');
end
else
fprintf('Too big. Try again.\n');
end
 Functions that behave differently based on
◦ Number of input or output arguments
◦ Type of input or output arguments
 Many built-in functions are polymorphic
(sqrt, max, size, plot, etc.)
 How do we make our functions
polymorphic?
 Two built-in functions:
◦ nargin: returns the number of actual input
arguments that the function was called with
◦ nargout: returns the number of output arguments
that the function caller requested
function [table summa] = multable(n, m)

 The function multable returns an n-by-m


multiplication table in the output argument table
 Optionally, it can return the sum of all elements
in the output argument summa
 If m is not provided, it returns and n-by-n matrix
function [table summa] = multable(n, m)

if nargin < 2
m = n;
end

table = (1:n)' * (1:m);

if nargout == 2
summa = sum(table(:));
end
 A function declaration specifies:
◦ Name of the function,
◦ Number of input arguments, and
◦ Number of output arguments
 Function code and documentation specify:
◦ What the function does, and
◦ The type of the arguments
◦ What the arguments represent
 Robustness
◦ A function is robust if it handles erroneous input and
output arguments, and
◦ Provides a meaningful error message
function [table summa] = multable(n, m)

if nargin < 1
error('must have at least one input argument');
end
if nargin < 2
m = n;
elseif ~isscalar(m) || m < 1 || m ~= fix(m)
error('m needs to be a positive integer');
end
if ~isscalar(n) || n < 1 || n ~= fix(n)
error('n needs to be a positive integer');
end

table = (1:n)' * (1:m);

if nargout == 2
summa = sum(table(:));
end
 Extra text that is not part of the code
 MATLAB disregards it
 Anything after a % is a comment until the end
of the line
 Purpose:
◦ Extra information for human reader
◦ Explain important or complicated parts of the program
◦ Provide documentation of your functions
 Comments right after the function declaration
are used by the built-in help function
function [table summa] = multable(n, m)

%MULTABLE multiplication table.


% T = MULTABLE(N) returns an N-by-N matrix
% containing the multiplication table for
% the integers 1 through N.
% MULTABLE(N,M) returns an N-by-M matrix.
% Both input arguments must be positive
% integers.
% [T SM] = MULTABLE(...) returns the matrix
% containing the multiplication table in T
% and the sum of all its elements in SM.

if nargin < 1
error('must have at least one input argument');
end

>> help multable
 Variables:
◦ Local
◦ Global
◦ Persistent
 Persistent variable:
◦ It’s a local variable, but its value persists from one
call of the function to the next.
◦ Relatively rarely used
◦ None of the bad side effects of global variables.
Lesson 6: Loops

by

Akos Ledeczi and Mike Fitzpatrick


 The loop is a new control construct that makes it
possible to repeat a block of statements a
number of times.
 We have already used loops without knowing it:
>> n = 1:5;
>> total = sum(n);
 MATLAB uses loops internally both to compute
the result of the colon operator and to compute
the sum of the elements of the vector n above.
 Implicit loop
 Let’s compute the sum of 1 trough 5 without using
the built-in sum function!
 Use a loop:
Set total to 0

Repeat for n = 1 to 5

Add n to total

Print total
 Set total to 0
 Set n to 1
 Execute Add n to total (total equals 1)
Set total to 0
 Set n to 2
 Execute Add n to total (total equals 3)
 Set n to 3 Repeat for n = 1 to 5
 Execute Add n to total (total equals 6)
Add n to total
 Set n to 4
 Execute Add n to total (total equals 10)
 Set n to 5
Print total
 Execute Add n to total (total equals 15)
 Print total
 MATLAB implementation using a for-loop:

total = 0;
for n = 1:5
total = total + n;
end
fprintf('total equals %d\n',total);
total = 0;
for n = 1:5 control statement
loop total = total + n; body
end
fprintf('total equals %d\n',total);
 Here is another example:
list = rand(1,5); % assigns a row vector of random numbers
for x = list
if x > 0.5
fprintf('Random number %f is large.\n',x)
else
fprintf('Random number %f is small.\n',x)
end
end

Random number 0.141890 is small.


Random number 0.421760 is small.
Random number 0.915740 is large.
Random number 0.792210 is large.
Random number 0.959490 is large.
 Notice that we do not need the list variable at all:

for x = rand(1,5)
if x > 0.5
fprintf('Random number %f is large.\n',x)
else
fprintf('Random number %f is small.\n',x)
end
end
 The values assigned to the loop index do not
have to be
◦ integers,
◦ regularly spaced, or
◦ assigned in increasing order,
 In fact, they do not have to be scalars either:
◦ The loop index will be assigned the columns of the array
 Any other control construct can be used in the
body of the for-loop
◦ if-statements
◦ other loops
◦ etc.
 for-loops work well when we know the
number of necessary iterations before
entering the loop
 Consider this problem:
◦ Starting from 1, how many consecutive positive
integers do we need to add together to exceed 50?
◦ The only way to solve this with a for-loop is to guess
a large enough number for the number of iterations
and then use a break statement.
◦ There is a better solution: a while-loop!
function [n total] = possum(limit)
total = 0;
n = 0;
while total <= limit
n = n + 1;
total = total + n;
end
fprintf('sum: %d count: %d\n', total, n);
function [n total] = possum(limit)
total = 0;
n = 0;
while total <= limit
n = n + 1;
total = total + n;
end
fprintf('sum: %d count: %d\n', total, n);

>> possum(50)
sum: 55 count: 10

ans =

10
function [n total] = possum(limit)
total = 0;
n = 0;
while total <= limit control statement
n = n + 1;
loop body
total = total + n;
end
fprintf('sum: %d count: %d\n', total, n);
while conditional
block
end

if conditional
block
end

 Difference:
 while condition is evaluated repeatedly
 block is executed repeatedly as long as condition is true
 Problem: given a vector, v, of scalars, create a
second vector, w, that contains only the non-
negative elements of v
 Traditional solution:
w = [];
jj = 0;
for ii = 1:length(v)
if v(ii) >= 0
jj = jj + 1;
w(jj) = v(ii);
end
end
 MATLAB provides a more elegant solution:

w = [];
for ii = 1:length(v)
if v(ii) >= 0
w = [w v(ii)];
end
end
 The ultimate solution needs only a single line:

w = v(v >= 0);

 This is an example of logical indexing.


 To understand why and how this works, we
need to introduce logical arrays
Lesson 7: Data Types

by

Akos Ledeczi and Mike Fitzpatrick


 Real numbers in mathematics:
◦ Can be infinitely large
◦ Have infinitely fine resolution
 Computers: Finite memory
◦ Upper limit on the largest number that can be
represented
◦ Lower limit on the absolute value of any non-zero
number
 The set of values that can be represented by
a MATLAB variable is finite.
 MATLAB: many different data types
 A data type is defined by:
◦ Set of values
◦ Set of operations that can be performed on those values
 MATLAB:
◦ All elements of a given array must be of the same type
◦ Elementary type
 Type of a MATLAB array is defined by
◦ Number of dimensions
◦ Size in each dimension
◦ Elementary type
 double
◦ Default type in MATLAB
◦ Floating point representation
-2
 Example: 12.34 = 1234 * 10
 Mantissa and exponent
◦ 64 bits (8 bytes)
 single
◦ 32-bit floating point
 Integer types
◦ Signed, unsigned
◦ 8-, 16-, 32-, 64-bit long
Inf:
“Infinity”
NaN:
“Not-a-number”
 Type check:
◦ class
◦ isa
>> isa(x,’double’)
 Range check:
◦ intmax, intmin
◦ realmax, realmin
>> intmax(’uint32’)
 Conversion:
◦ Name of function = name of desired data type
◦ int8(x), uint32(x), double(x), etc.
 Arithmetic operators
◦ Operands of the same data type: No problem
◦ Different data types:
 “mixed-mode arithmetic”
 Many rules and restrictions
 Relational operators
◦ Different data types are always allowed
◦ Result is always of logical type
 Text: string
 We have used them already:
◦ Argument to fprintf and other functions
 String: vector of char-s
 Numerical type
◦ Uses an encoding scheme
◦ Each character is represented by a number
◦ ASCII scheme
 American Standard Code
for Information
Interchange
 Developed in the1960’s
 7 bits, 128 characters:
◦ Latin alphabet
◦ Digits
◦ Punctuation
◦ Special characters
 Newer schemes with far
more characters
 ASCII is a subset of them
 Print out the visible characters of the ASCII
table:

function char_codes
for ii = 33:126
fprintf('%s',char(ii));
end
fprintf('\n');
 An array must be homogeneous:
◦ It cannot contain elements of multiple types.
 A struct can be heterogeneous:
◦ It can contain multiple types.
 A struct is different from an array:
◦ fields, not elements
◦ field names, not indices
◦ Fields in the same struct can have different types.
 Versatility inside:
◦ A field of a struct can contain another struct.
>> r.ssn = 12345678
r =
ssn: 12345678
>> class(r)
ans =
struct
>> class(r.ssn)
ans =
double
>> r.name = 'Homer Simpson'
r =
ssn: 12345678
name: 'Homer Simpson‘
>> r.address.street = '742 Evergreen Terrace'
r =
ssn: 12345678
name: 'Homer Simpson'
address: [1x1 struct]
 An array must be homogeneous:
◦ It cannot contain elements of multiple types.
 A struct can be heterogeneous:
◦ It can contain multiple types.
 A struct is different from an array:
◦ fields, not elements
◦ field names, not indices
◦ Fields in the same struct can have different types.
 Versatility inside:
◦ A field of a struct can contain another struct.
◦ Structs can hold arrays, and arrays can hold structs.
 How to store a page of text?
◦ Each line should be a separate string
◦ Cannot use an array of chars:
 Each line would have to have the same length
◦ A vector of objects with each referring to one line
 Pointer
◦ Each variable (scalar, vector, array, etc.) is stored in
the computer memory.
◦ Each memory location has a unique address.
◦ A pointer is a variable that stores an address.
◦ MATLAB calls a pointer a “cell”.
 MATLAB has a restrictive pointer model
◦ Strict rules on what can be done with cells
◦ Harder to make mistakes
 But it is a powerful way to store
heterogeneous data
◦ Cell arrays
◦ Used more frequently than structs
 New syntax:
◦ To access the data a cell points to, use: { }
>> p = cell(2,3)
p =
[] [] [] p
[] [] []
>>

[]
>> p = cell(2,3)
p =
[] [] [] p
[] [] []
>> p{2,1} = pi
p =
[] [] []
[3.14] [] []
>> 3.14

[]
>> p = cell(2,3)
p =
[] [] [] p
[] [] []
>> p{2,1} = pi -17
p =
[] [] []
[3.14] [] []
>> p{1,1} = int8(-17) 3.14
p =
[-17] [] []
[]
[3.14] [] []
>>
>> p = cell(2,3)
p =
[] [] [] p
[] [] []
>> p{2,1} = pi -17
p =
[] [] []
[3.14] [] []
>> p{1,1} = -17 3.14
p =
[-17] [] []
[]
[3.14] [] []
>> p{2,2} = 'Awesome'
P =
[-17] [] []
[3.14] 'Awesome'[] ‘A’ ‘w’ ‘e’ ‘s’ ‘o’ ‘m’ ‘e’
>> p{2,3} = [2 4; 6 8; 10 12]
P =
[-17] [] []
[3.14] ‘Awesome’[3x2 double] p
>> -17

2 4

3.14
6 8

[] 10 12

‘A’ ‘w’ ‘e’ ‘s’ ‘o’ ‘m’ ‘e’


>> p{2,3} = [2 4; 6 8; 10 12]
P =
[-17] [] []
[3.14] ‘Awesome’[3x2 double] p
18 24

>> p{1,3} = sum(p{2,3}); -17


>>
2 4

3.14
6 8

[] 10 12

‘A’ ‘w’ ‘e’ ‘s’ ‘o’ ‘m’ ‘e’


>> p{2,3} = [2 4; 6 8; 10 12]
P = Inf
[-17] [] []
[3.14] ‘Awesome’[3x2 double] p
18 24

>> p{1,3} = sum(p{2,3}); -17


>> P{1,2} = 1/0;
>> 2 4

3.14
6 8

[] 10 12

‘A’ ‘w’ ‘e’ ‘s’ ‘o’ ‘m’ ‘e’


>> p{2,3} = [2 4; 6 8; 10 12]
P = Inf
[-17] [] []
[3.14] ‘Awesome’[3x2 double] p
18 24

>> p{1,3} = sum(p{2,3}); -17


>> P{1,2} = 1/0;
>> class(p) 2 4
ans =
cell 3.14
>> 6 8

[] 10 12

‘A’ ‘w’ ‘e’ ‘s’ ‘o’ ‘m’ ‘e’


>> p{2,3} = [2 4; 6 8; 10 12]
P = Inf
[-17] [] []
[3.14] ‘Awesome’[3x2 double] p
18 24

>> p{1,3} = sum(p{2,3}); -17


>> P{1,2} = 1/0;
>> class(p) 2 4
ans =
cell 3.14
>> class(p{1,2}) 6 8
ans =
double [] 10 12
>>

‘A’ ‘w’ ‘e’ ‘s’ ‘o’ ‘m’ ‘e’


>> p{2,3} = [2 4; 6 8; 10 12]
P = Inf
[-17] [] []
[3.14] ‘Awesome’[3x2 double] p
18 24

>> p{1,3} = sum(p{2,3}); -17


>> P{1,2} = 1/0;
>> class(p) 2 4
ans =
cell 3.14
>> class(p{1,2}) 6 8
ans =
double [] 10 12
>> class(p(1,2))
ans =
cell
>>
‘A’ ‘w’ ‘e’ ‘s’ ‘o’ ‘m’ ‘e’
>> p{2,3}(3,2)
ans = Inf

>>
12
p
18 24

-17

2 4

3.14
6 8

[] 10 12

‘A’ ‘w’ ‘e’ ‘s’ ‘o’ ‘m’ ‘e’


Lesson 8: File Input/Output

by

Akos Ledeczi and Mike Fitzpatrick


 File:
◦ Area in permanent storage (disk drive)
◦ Stores information
◦ Managed by the operating system
◦ Can be copied or moved
◦ Can be accessed by programs
 File Input/Output (I/O)
◦ Data exchange between programs and computers
◦ Data exchange between the physical world and computers
◦ Saving your work so you can continue with it later
 MATLAB can handle
◦ Mat-files and M-files AND text, binary, and Excel files
 Microsoft Excel® is a widely used data-analysis tool
 Many other programs support reading and writing
Excel files
 MATLAB does too with two built-in functions
◦ xlsread
◦ xlswrite
>> [num,txt,raw] = xlsread('Nashville_climate.xlsx');
>> num
num =
46 28 3.98
51 31 3.7
61 39 4.88
70 47 3.94
78 57 5.08
85 65 4.09
NaN NaN NaN
NaN NaN NaN
89 69 3.78
88 68 3.27
82 61 3.58
71 49 2.87
59 40 4.45
49 31 4.53
>> num
num =
46 28 3.98
51 31 3.7
61 39 4.88
70 47 3.94
78 57 5.08
85 65 4.09
NaN NaN NaN
NaN NaN NaN
89 69 3.78
88 68 3.27
14
82 61 3.58
71 49 2.87
59 40 4.45
49 31 4.53 3
>> num
num =
46 28 3.98
51 31 3.7
61 39 4.88
70 47 3.94
78 57 5.08
85 65 4.09
NaN NaN NaN
NaN NaN NaN
89 69 3.78
88 68 3.27
14
82 61 3.58
71 49 2.87
59 40 4.45
49 31 4.53 3
>> txt =
txt =
[1x30 char] '' '' '' ''
[1x40 char] '' '' '' ''
'' '' '' '' ''
'' '' 'High temp (F)' 'Low temp (F)' 'Precip (in)'
'' 'Jan' '' '' ''
'' 'Feb' '' '' ''
'' 'March' '' '' ''
'' 'April' '' '' ''
'' 'May' '' '' ''
'' 'June' '' '' ''
'' '' '' '' ''
'' '' 'High temp (F)' 'Low temp (F)' 'Precip (in)'
'' 'July‘ '' '' ''
'' 'Aug' '' '' ''
'' 'Sep' '' '' ''
'' 'Oct' '' '' ''
'' 'Nov' '' '' ''
'' 'Dec' '' '' ''
>> raw
raw =
[1x30 char] [ NaN] [ NaN] [ NaN] [ NaN]
[1x40 char] [ NaN] [ NaN] [ NaN] [ NaN]
[ NaN] [ NaN] [ NaN] [ NaN] [ NaN]
[ NaN] [ NaN] 'High temp (F)' 'Low temp (F)' 'Precip (in)'
[ NaN] 'Jan' [ 46] [ 28] [ 3.98]
[ NaN] 'Feb' [ 51] [ 31] [ 3.7]
[ NaN] 'March' [ 61] [ 39] [ 4.88]
[ NaN] 'April' [ 70] [ 47] [ 3.94]
[ NaN] 'May' [ 78] [ 57] [ 5.08]
[ NaN] 'June‘ [ 85] [ 65] [ 4.09]
[ NaN] [ NaN] [ NaN] [ NaN] [ NaN]
[ NaN] [ NaN] 'High temp (F)' 'Low temp (F)' 'Precip (in)'
[ NaN] 'July‘ [ 89] [ 69] [ 3.78]
[ NaN] 'Aug' [ 88] [ 68] [ 3.27]
[ NaN] 'Sep' [ 82] [ 61] [ 3.58]
[ NaN] 'Oct' [ 71] [ 49] [ 2.87]
[ NaN] 'Nov' [ 59] [ 40] [ 4.45]
[ NaN] 'Dec' [ 49] [ 31] [ 4.53]
 Text files contain characters
 They use an encoding scheme:
◦ ASCII or
◦ Any one of many other schemes
◦ MATLAB takes care of encoding and decoding
 Before using a text file, we need to open it
 Once done with the file, we need to close it
 Opening: fid = fopen(filename, permission)
 Closing: fclose(fid)
 fid: Unique file identifier for accessing file
 Permission: what we want to do with the file—
◦ read, write, overwrite, append, etc.
 One line at a time
 type prints a text file in the command window
 Let’s re-implement it:
function view_text_file(filename)
fid = fopen(filename,'rt');
if fid < 0
error('error opening file %s\n\n', filename);
end

% Read file as a set of strings, one string per line:


oneline = fgets(fid);
while ischar(oneline)
fprintf('%s',oneline) % display one line
oneline = fgets(fid);
end
fprintf('\n');
fclose(fid);
 Reading lines into string variables is easy
 Parsing these strings to get numerical data is
much harder
 Not covered
 Binary files are more suited for numerical data
 Binary file = “not a text file”
 Many different ways to represent numbers
 All we need to know are their types.
 Binary files need to be
◦ Opened with fopen
◦ Closed with fclose
 Data type is important
 Example: write a double array into a binary file

function write_array_bin(A,filename)
fid = fopen(filename,'w+');
if fid < 0
error('error opening file %s\n‘, filename);
end

fwrite(fid,A,'double');

fclose(fid);
 Example: read a double array from a binary file

function A = read_bin_file(filename,data_type)
fid = fopen(filename,'r');
if fid < 0
error('error opening file %s\n',filename);
end

A = fread(fid,inf,data_type);

fclose(fid);

You might also like