Escolar Documentos
Profissional Documentos
Cultura Documentos
6.094
• How long did it take?
Introduction to programming in MATLAB
• Common issues:
• The ODE file should be separate from the command that
Lecture 4: Advanced Methods solves it. ie. you should not be calling ode45 from within
your ODE file
• The structure of the output of an ode solver is to have time
running down the columns, so each column of y is a
variable, and the last row of y are the last values
Danilo Šüepanoviü
• HW 4 was updated today, so download it again if you
already started. Show a juliaAnimation
IAP 2010 • Today is the last required class: make sure the sign-in
sheet is accurate regarding your credit/listener status
Outline Statistics
(1) Probability and Statistics • Whenever analyzing data, you have to compute statistics
» scores = 100*rand(1,100);
(2) Data Structures
(3) Images and Animation • Built-in functions
¾ mean, median, mode
(4) Debugging
(5) Online Resources • To group data into a histogram
» hist(scores,5:10:95);
¾ makes a histogram with bins centered at 5, 15, 25…95
» N=histc(scores,0:10:100);
¾ returns the number of occurrences between the specified
bin edges 0 to <10, 10 to <20…90 to <100. you can plot
these manually:
» bar(0:10:100,N,'r')
Random Numbers Changing Mean and Variance
• Many probabilistic processes rely on random numbers • We can alter the given distributions
» y=rand(1,100)*10+5;
• MATLAB contains the common distributions built in ¾ gives 100 uniformly distributed numbers between 5 and 15
» rand » y=floor(rand(1,100)*10+6);
¾ draws from the uniform distribution from 0 to 1 ¾ gives 100 uniformly distributed integers between 10 and
» randn 15. floor or ceil is better to use here than round
400
» y=randn(1,1000)
300
» random 250
200
¾ can give random numbers from many more distributions » y2=y*5+8 150
100
¾ see doc random for help ¾ increases std to 5 and makes the mean 8 50
0
-25 -20 -15 -10 -5 0 5 10 15 20 25
70
50
40
rand('state',0); rand(1); 30
20
10
0
-25 -20 -15 -10 -5 0 5 10 15 20 25
» x=zeros(10000,1);
» for n=2:10000
» if rand<0.5
» x(n)=x(n-1)-1;
» else
» x(n)=x(n-1)+1;
» end
» end
» figure;
» hist(x,50);
Outline Advanced Data Structures
• A cell is just like a matrix, but each field can contain • To initialize a cell, specify the size
anything (even other matrices): » a=cell(3,10);
¾ a will be a cell with 3 rows and 10 columns
3x3 Matrix 3x3 Cell Array
2
J o h n • or do it manually, with curly braces {}
1.2 -3 5.5 4 » c={'hello world',[1 5 6 2],rand(3,2)};
32
-2.4 15 -10
M a r y 27 1 ¾ c is a cell with 1 row and 3 columns
7.8 -1.1 4 18
[]
• Each element of a cell can be anything
L e o
• To access a cell element, use curly braces {}
» a{1,1}=[1 3 4 -10];
• One cell can contain people's names, ages, and the ages of » a{2,1}='hello world 2';
their children » a{1,2}=c{3};
• To do the same with matrices, you would need 3 variables
and padding
Structs Struct Arrays
• Structs allow you to name and bundle relevant variables • To initialize a struct array, give field, values pairs
¾ Like C-structs, which are objects with fields » ppl=struct('name',{'John','Mary','Leo'},...
'age',{32,27,18},'childAge',{[2;4],1,[]});
• To initialize an empty struct:
¾ size(s2)=1x3
» s=struct([]);
¾ every cell must have the same size
¾ size(s) will be 1x1
¾ initialization is optional but is recommended when using large
» person=ppl(2);
structs ¾ person is now a struct with fields name, age, children
¾ the values of the fields are the second index into each cell
• To add fields » person.name
» s.name = 'Jack Bauer'; ¾ returns 'Mary' ppl ppl(1) ppl(2) ppl(3)
» s.scores = [95 98 67]; » ppl(1).age
» s.year = 'G3';
¾ returns 32 name: 'John' 'Mary' 'Leo'
¾ Fields can be anything: matrix, cell, even struct
¾ Useful for keeping variables together
age: 32 27 18
• To access 1x1 struct fields, give name of the field • Write a script called sentGen
» stu=s.name; • Make a 3x2 cell, and put three names into the first column,
» scor=s.scores; and adjectives into the second column
¾ 1x1 structs are useful when passing many variables to a • Pick two random integers (values 1 to 3)
function. put them all in a struct, and pass the struct • Display a sentence of the form '[name] is [adjective].'
• Run the script a few times
• To access nx1 struct arrays, use indices
» person=ppl(2);
¾ person is a struct with name, age, and child age
» personName=ppl(2).name;
¾ personName is 'Mary'
» a=[ppl.age];
¾ a is a 1x3 vector of the ages; this may not always work,
the vectors must be able to be concatenated.
Exercise: Cells Outline
• Every graphics object has a handle • Images can be imported into matlab
» L=plot(1:10,rand(1,10)); » im=imread('myPic.jpg');
¾ gets the handle for the plotted line
» A=gca; • MATLAB supports almost all image formats
¾ gets the handle for the current axis ¾ jpeg, tiff, gif, bmp, png, hdf, pcx, xwd, ico, cur, ras, pbm,
» F=gcf; pgm, ppm
¾ gets the handle for the current figure ¾ see help imread for a full list and details
• To see the current property values, use get
» get(L); • To write an image, give an rgb matrix or indices and
» yVals=get(L,'YData'); colormap
» imwrite(rand(300,300,3),'test1.jpg');
• To change the properties, use set
» set(A,'FontName','Arial','XScale','log'); » imwrite(ceil(rand(200)*256),jet(256),...
'test2.jpg');
» set(L,'LineWidth',1.5,'Marker','*');
¾ see help imwrite for more options
• Everything you see in a figure is completely customizable
through handles
Animations Making Animations
• MATLAB makes it easy to capture movie frames and play • Plot frame by frame, and pause in between
them back automatically » close all
» for t=1:30
• The most common movie formats are: » imagesc(rand(200));
¾ avi » colormap(gray);
¾ animated gif » pause(.5);
» end
• Avi
¾ good when you have ‘natural’ frames with lots of colors and
few clearly defined edges • Can also use drawnow instead of pause
• Animated gif • When plotting lines or points, it's faster to change the
¾ Good for making movies of plots or text where only a few
xdata and ydata properties rather than plotting each time
colors exist (limited to 256) and there are well-defined » h=plot(1:10,1:10);
lines » set(h,'ydata',10:1);
• A movie is a series of captured frames • You can use imwrite to save an animated GIF. Below is a
» close all trivial example
» for n=1:30
» imagesc(rand(200)); » temp=ceil(rand(300,300,1,10)*256);
» colormap(gray); » imwrite(temp,jet(256),'testGif.gif',...
» M(n)=getframe; 'delaytime',0.1,'loopcount',100);
» end
• Alternatively, you can use getframe, frame2im, and
• To play a movie in a figure window
rgb2ind to convert any plotted figure to an indexed image
» movie(M,2,30);
and then stack these indexed images into a 4-D matrix and
¾ Loops the movie 2 times at 30 frames per second pass them to imwrite. Read the doc on imwrite and these
• To save as an .avi file on your hard drive other functions to figure out how to do this.
» movie2avi(M,'testMovie.avi','FPS',30, ...
'compression', 'cinepak');
• See doc movie2avi for more information
Outline display
(1) Probability and Statistics • When debugging functions, use disp to print messages
» disp('starting loop')
(2) Data Structures » disp('loop is over')
(3) Images and Animation ¾ disp prints the given string to the command window
(4) Debugging
(5) Online Resources • It's also helpful to show variable values
» disp(strcat(['loop iteration ',num2str(n)]));
¾ strcat concatenates the given strings
¾ Sometimes it's easier to just remove some semicolons
Two breakpoints
• It can be useful to know how long your code takes to run • For more complicated programs, use the profiler
¾ To predict how long a loop will take » profile on
¾ To pinpoint inefficient code ¾ Turns on the profiler. Follow this with function calls
» profile viewer
• You can time operations using tic/toc: ¾ Displays gui with stats on how long each subfunction took
» tic
» CommandBlock1
» a=toc;
» CommandBlock2
» b=toc;
¾ tic resets the timer
¾ Each toc returns the current value in seconds
¾ Can have multiple tocs per tic
(1) Probability and Statistics • The website – the MATLAB Central File Exchange!!
• Lots of people's code is there
(2) Data Structures • Tested and rated – use it to expand MATLAB's functionality
(3) Images and Animation
• http://www.mathworks.com/matlabcentral/
(4) Debugging
(5) Online Resources
End of Lecture 4
THE END