CS150  Fall 2011  Class 22
video

http://www.youtube.com/watch?v=msaWXY3OuQQ
logical expressions
admin
 Matlab lap prep due Friday
 go/codegolf
working directory
 see the matlab basics handout
 We can also just type in working directory directly in the field in the left frame
 as you type, it gives you suggests for how to continue
scripts
 just like in Python we can write our own scripts/programs
 You can generate a new script many different ways:
 type: command+n
 click on the "new script" button in the upper left corner of the matlab window
 Select File>New>Script
 This will bring up the "Editor"
 by default it's a separate window however you can "Dock" the window within the rest of Matlab by clicking the "Dock editor" button (looks like an arrow going to the lower right)
 The editor does a number of nice features we've seen before
 syntax highlighting
 autoindenting
 for Matlab indenting isn't mandatory, but we'll do it for good style
 underlines syntax mistakes
 underlines possible mistakes (i.e. warnings)
 allows us to "run" the script
 other features...
 Just like Python, a Matlab script is just a set of statements
 When you save the file file will have the .m extension (just like python had a .py extension)
 What does the basic_script.m do in
Matlabexamples code
?
 four statements:
 first: displays/prints the text
 second: display the string as a result (so will show the ans = )
 notice that unlike Python, even when running as a script, the variable is output
 third: won't do anything since the line is terminated with a semicolon
 get in the habit of terminating the lines with semicolons since this is the behavior you want most of the time
 fourth: display another string
 we've also put in some comments
 what do you think the comments at the top do?
 like module docstrings: we can use help and it will be returned
>> help basic_script
this is a script. It runs a few statements
comparing different ways of outputting values
 notice that unlike Python, help is immediately available to you without having to do something like import
 We can run scripts different ways:
 By clicking the green arrow
 By typing the name of the script (i.e. the name of the file minus the .m)
>> basic_script
display some text
ans =
a string without a semicolon
another display
 What does guess_game.m do in
Matlabexamples code
?
 picks a random integer between 1 and 10
 prompts the user to guess a number
 input is similar to raw_input in python
 it expects the user to enter a matrix
 it could be a single value
 it could be a string (though the user has to enter it with single quotes)
 if the user doesn't enter anything, it prompts them again
>> help isempty
ISEMPTY True for empty array.
ISEMPTY(X) returns 1 if X is an empty array and 0 otherwise. An
empty array has no elements, that is prod(size(X))==0.
Overloaded methods:
timer/isempty
tscollection/isempty
Reference page in Help browser
doc isempty
 remember, we terminate our loops/control structues with "end"
 checks if the number is too high, low, or correct and outputs the appropriate value
 elseif and else terminate the block before
 end terminates the final block
functions in Matlab
 we can write our own functions, just like in Python
 The syntax is:
function return_variable = function_name(parameter1, parameter2, ...)
 For example: sqrt
function answer = sqrt(x)
answer = x^0.5
 A few interesting things to note:
 like any language, we have a different syntax for definition functions
 Matlab does not return values using a return statement
 to return a value, you just assign to the variable that you declared in your function header as the "return" variable
 this is a bit different than Python, but can be convenient
 There is a return statement that doesn't take any parameters that just exits the function
>> help return
 look at reverse.m in
Matlabexamples code
 in this case "result" is our return variable, so we assign to it to return the result
 how does the function work?
 end:1:1 gives a vector with indices starting at the last up through 1
 for example:
>> 10:1:1
ans =
10 9 8 7 6 5 4 3 2 1
 We then grab these indices from v, which reverses the list
 for example:
>> x = [10, 11, 12]
x =
10 11 12
>> x([1, 2, 3])
ans =
10 11 12
>> x([3, 2, 1])
ans =
12 11 10
>> x([3, 3, 3])
ans =
12 12 12
Parameter passing in matlab
 are vectors mutable?
 yes
>> x = [1, 2, 3];
>> x(1) = 5
x =
5 2 3
 in Python we said every variable was a reference to an object
 How could we see if the same is true for Matlab?
>> x = [1, 2, 3];
>> y = x;
>> y(1) = 5
>> x
x =
1 2 3
 not all languages treat things the same!
 Given this, what would test_parameter_passing.m from
Matlabexamples code
do here:
>> x = [1, 2, 3];
>> test_parameter_passing(x)
>> x
x =
1 2 3
 we also get copies of matrices when they are passed as parameters
 note that test_parameter_passing does NOT return a value so we don't need the 'variable ='
multiple functions in a file
 In many situations, you will only define one function per file
 You can define multiple functions in a file:
 The other functions are called "subfunctions"
 subfunctions are NOT callable from outside the file (they are "private")
 but if you need a helper function or some other functions that are not relevant to other people, you can include them
 if you're helper function is in and of itself useful, then it should be in its own file
Reading from files and plotting
 look at plot_file.m in
Matlabexamples code
 dlmread
 reads numerical data in a file that is delimited by some value (e.g. a space, a tab, a comma)
 if you just call it with the filename it tries to guess the delimiter
 you can optionally specify the delimiter as the second parameter
 reads the file all at once and returns a matrix
 if the file contains nonnumerical data or is not a proper matrix, you will get an error
 plotting in Matlab is very similar to plotting with matplotlib
 "plot" works similarly
 other functions
 title
 xlabel
 ylabel
 ...
 some differences
 unlike matplotlib there is now "show" call when we're done adding stuff to the figure
 by default, each time plot is called, regenerates the plot
 you can change this behavior by adding "hold all"
 tells Matlab to not generate a new plot, but to add each plot command on the same graph
 (see help hold) for more details
 What do we plot?
 plots each column, 2 through the end, as the y values and the first column as the x values
>> plot_file('data.txt')
>> plot_file('data2.txt')
 There are many other variations on reading from files
 see help dlmread for some more complicated examples
 for even more flexibility see the textscan function (and look at examples in the documentation online)
Writing to a file
 Writing to a file is also easy and can be done a matrix at a time using dlmwrite
 by default uses space as a delimiter, though can specify others
 There are also some nice features in Matlab for saving your workspace (or particular variables in your workspace)
 see save and load
matlab performance (didn't cover in class, but if you're curious)
 look at matrix_add.m in
Matlabexamples code
 what does the function do?
 check to make sure that the matrices are the same size
 note that size actually returns a matrix, but we can still ask if two matrices are equal
 for each row
 for each column of each row
 add the i, j value of a and b and store it in m
 adds each entry of the matrix together
 let's look at how fast this function is:
>> matrix_add(ones(10000), ones(10000));
 takes ~10 seconds to run
 if we compare this to the builtin function
>> ones(10000) .* ones(10000);
 takes < a second to run
 Just like R...
 Matlab is optimized to work on matrices
 you should avoid for loops if you can
 often there is a much better way of doing it without a for loop (though sometimes you have to get sneaky)