matlab a brief introduction to programming. 1)background and getting started dartmouth college now...
TRANSCRIPT
MATLAB
A brief introduction
to programming
1) Background and Getting Started
Dartmouth College now has a site license http://caligari.dartmouth.edu/downloads/matlab Installs on Mac, Windows, or Linux
Running in the BIL (Linux): Command “matlab” launches latest installed
version Currently, most machines default to MATLAB 8.3
(R2014a) or 8.0 (R2013b)
Launching MATLAB
[aic-bil-ibm1] % matlab &
(&: don’t wait for it to quit in this shell)
The MATLAB Path
The “path” is an ordered list of directories used to match commands to files>> path list the current path
>> addpath xyz add xyz to the path (for this session only)
>> which abc if abc is a command, give file it runs from
2) MATLAB Data & Variables
Numbers in MATLAB are “floating point” (not integer)Some image types are int or unsigned intFor the most part, floats are fine for
anything numeric
Other basic data types are char (characters), struct (data structure), and cell (list element)
Basic Data Types
Most types can be turned into arrays:Numbers: vectorsChars: strings (or character arrays)Structs: struct arraysCells: cell arrays
Arrays elements are accessed with “( )” (cell arrays also use “{ }”)
Variables
Note that variable names are case sensitive: A ≠ a
To see current variables in MATLAB:>> whos
Examples
Create a vector (number array):>> a = [ 0 1 2 5 ] (brackets)
Create a string (char array):>> b = 'my string’ (single quotes)
Create a cell array:>> c{1} = a (allows mixing of>> c{2} = b various types)OR: >> c = { [ 0 1 2 5 ], ‘my string’ }
3) Scripts and Functions
Scripts are MATLAB commands saved into a fileExactly equivalent to typing in MATLABAll variables remain after execution
Functions are packaged scripts that operate in their own environments Input in, output outOnly designated output remains
Recommendations
Use scripts for quicker work Easier to debug, when smallCan access all calculated values
Use functions for larger projects and reusable codeLess likely to cause trouble (multiple
definition of variables, interdependencies) “Cleaner” and more easily verified
How To…
Create a script: Save commands in a file ending with ‘.m’ Note: file must be in the path to execute!
Create a function: as above, but start with a “function” line:
e.g. function myfunc
or function x = myfunc(y)
or function [x1, x2] = myfunc(y1, y2, y3)
4) Help
Nearly all commands (all built-in, and most others) have documentation
The help command:>> help xyz help on command “xyz”
>> help list of built-in functions
by category
>> lookfor abc search help by keyword
5) The Debugger
MATLAB’s debugger can suspend a program while it is executing
Way to examine function contents before they are cleared
Most frequent usage:>> dbstop if error Go to debugger
on error>> dbquit Quit debugger
More Debugger Commands
Other useful debugger commands:>> dbup Examine calling function
>> dbdown Reverse a dbup
>> dbstop in xyz at 123 Stop in function xyz at line 123
>> dbclear all Undo current dbstops
Tip 1: Continuations
You can continue a line on the next line by ending it with “…”
>> mylongvariable = {‘mylongstring1’, …>> ‘mylongstring2’, ‘etc.’}
(this is particularly helpful in scripts and functions)
Tip 2: Command Output
You can use “;” to suppress printing of a return value
>> x = 5
x =
5
>> y = 3;
(the second assignment is made quietly)
Tip 3: Notes on ‘cd’
The ‘cd’ command is used to change directories in MATLAB and in Linux… but it works slightly differently>> cd /home/fmri % cd /home/fmri
(changes to directory in both)>> cd % cd
(prints current directory) (changes to home directory)>> cd(‘/home/fmri’)>> cd(myinputdir)
(also legal, and useful with string variables)
Tip 4: Shell Commands
You can use Linux commands in MATLAB using “!”
>> ! rm -r mydir
>> ! cp /home/fmri/file1 .
(Note: the current directory is always MATLAB’s current directory)
Tip (Trick?) 5: Bad Names
Beware of using variable names that “shadow” functions(sometimes MATLAB will alert you…)>> end = 1Error: Illegal use of reserved keyword "end".
(…but often it won’t)>> spm = 5>> spmspm =
5
Tip 6: Clearing Variables
You can unassign variables with “clear”:>> clear d*(clear variables starting with “d”)
Clearing variables may prevent some problems with scripts>> clear all (clear all variables)
Tip 7: Saving a Session
The ‘diary’ command can save everything printed in the MATLAB window to a file:
>> diary myfile.txt
>> diary on
…
>> diary off
Programming Fundamentals
» Control - if-then, while loops, and for loops
» Expressions - operators and syntax
» Output – disp
If-Then Loop Structure
if expr
commands
elseif expr % note: can use repeatedly
commands
else
commands
end
While Loop Structure
while expr % evaluated each time!
commands
end
For Loop Structure
for var = values % often 1:N
commands % note: evaluated for
% each value
end
Expression Format
» Expressions are built using operators
» Common operators:&& - logical AND
|| - logical OR (note: two vertical pipe symbols)
== - test of equality (note: = is assignment)
>, <, >=, <= - inequalities
~= and ~ - inequality and negation
() - parentheses can be used for grouping
Example
done = 0;
while ~done
x = myfunc;
if x < 0 || x > 10
done = 1;
end
end
The disp Command
» The simplest way to print a variable» Note: non-string variables must be
converted to strings:
disp(num2str(x))
» Can also display other text:disp(‘Finished:’)
disp([‘The value of x is ’ num2str(x)])
First Programming Task
» Try to create a small but non-trivial program as an exercise
» Example:» Ask the user to pick a date in some way» Compare to today’s date and tell the user
how many days until that date comes, or how many days ago it passed
Notes
» Months have different numbers of days… so this seems non-trivial!
» MATLAB functions can help: for example, can use date in MATLAB (it returns a string like ‘10-Apr-08’) and datenum
» How should we ask the user for a date? » A calendar looks nice, but this is hard—it will
introduce days of the week, which we don’t otherwise need
» The menu command can present a list of choices (e.g., ask for a year, a month, and then a day)
Other Sample Learning Projects
» 1. Get historical population data for NH, VT, and some other states from the Wikipedia, save it to a file, and create code to read it into MATLAB. Write a program that gives users menu options to plot population growth graphs and to use an extrapolation to predict what the population might be in a future year.
» New commands to learn: fopen, fread, fclose, plot, hold, legend, polyfit
Other Sample Learning Projects
» 2. Write a simple DICOM browser. The program should be able to search for a given DICOM file pattern and present a list of files to select from. It should allow a user to see particular fields (by calling Linux tools that can read DICOM fields and parsing their output), or print multiple fields in a tabular view.
» New commands to learn: system, listdlg, strfind, strcmp, strrep, sprintf
Other Sample Learning Projects
» 3. Implement Mad Libs (Mad Lab version?). Create a set of one or more template files that have markers like %NOUN% to replace key words. Read a random template into MATLAB, then ask the user to input an appropriate set of parts of speech, and display the result of substituting these words for the markers.
» New commands to learn: fopen, fread, fclose, strrep, rand, round, msgbox