MATLAB: Difference between revisions

From OpenWetWare
Jump to navigationJump to search
Line 127: Line 127:


==PROGRAMMING==
==PROGRAMMING==
; function name and file name
* function name and file name should be the same
; programs vs scripts
* % comments
; % comments
* help and comments
; help and comments
: help myfun will return the first block of comments in myfun.m
; if (x~=1)
: (see the following example as well)
; elseif
* return is implicit. For example
; end - ENDs all blocks
    % my function to calculate max of two numbers
; for k=1:100 (not i!!)
    %
; All addressing is from 1:n
    function a=mymax(x,y)
; handling arguments
    if (x>y)
; for loops is bad programming... there should be vectorisable alternatives!!
        a=x;
    else
        a=y'
    end
    return %optional: whatever a is at the end of the
          %function file, that value will be returned. 
* programs vs scripts
: Scripts don't have a function keyword. They're just 'scripts', which run a series of commands. The variables are all in memory after the execution of the script
* if (x~=1)
: This is a significant difference from C/C++: instead of x!=1, use x~=1.
* elseif
* end - ENDs any blocks - for, if, elseif, while etc (roughly equivalent of } in C++; there is no { if (x~=1) itself implies — loosely— if(x!=1){ of C++))
* for k=1:100 (not i!!)
* All addressing is from 1:n
* handling arguments
:Multiple arguments can be specified in the function definition
    function [mean,median,mode,variance]=statistics(x)
* for loops is bad programming... there should be vectorisable alternatives!!


==BIOINFORMATICS TOOLBOX==
==BIOINFORMATICS TOOLBOX==

Revision as of 02:22, 15 February 2006

About MATLAB

MATLAB is a numerical computing environment and programming language. Created by The MathWorks, MATLAB allows easy matrix manipulation, plotting of functions and data, implementation of algorithms, creation of user interfaces, and interfacing with programs in other languages. Although it specializes in numerical computing, an optional toolbox interfaces with the Maple symbolic engine, making it a full computer algebra system. It is used by more than one million people in industry and academia and runs on most modern operating systems, including Windows, Mac OS, Linux and Unix. The current version is MATLAB 7.1 Service Pack 3. It is available for commercial use for approximately US$2000 and US$100 for an academic license with a limited set of Toolboxes.
— from Wikipedia:MATLAB

For Bioinformatics and Systems Biology, there are useful toolboxes available:

Elementary Tutorial

The following is an unstructured quick introduction to some of MATLAB's important commands/functions. MATLAB is reasonably easy to use and intuitive to pick up, so go ahead and experiment and learn!

GENERAL COMMANDS

clc
clears the command window
clear
removes all variables from the workspace
clear all
removes all variables, globals, functions and MEX links
ls
Returns listing of the current directory (works on Windows as well)
!ls
Use ! to run shell commands both in windows and linux. In windows, !explorer . maybe a useful command, to browse the current directory
pwd
Shows the present working directory (in Windows too)
help <command name>
gives a brief documentation
doc <command name>
gives the complete documentation
lookfor <text>
looks for the string <text> n the first comment line of the HELP text in all M-files (MATLAB functions/scripts) found on MATLABPATH.
whos
It lists all the variables in the current workspace, together with information about their size, bytes, class, etc.
whos -file <filename.mat>
lists the variables in the specified .MAT file.
type <filename>
'cats' or echoes the file to the screen


ESSENTIAL FUNCTIONS

size
returns the size of the matrix
length
returns the maximum dimension of a matrix
A'
transposes a matrix
1:1:100
Generates numbers upto 100 beginning from 1 in steps of 1.
linspace
linspace(a,b,n) generates n linearly spaced points between a and b
logspace
generates a logpspace
:
: (colon) is a wildcard (similar to * in shell). e.g. A(:,4:end). This returns all rows of A and columns from 4 onwards. end is a keyword that tells MATLAB to take elements untill the last column is reached.
A([1 3 5 7],[2 4 6 8])
any submatrix can be addressed; it can even be assigned a value. For example A([1 3 5 7],[2 4 6 8])=0 sets those elements to zero!
prod(size(x))
a simple construct for calculating the number of elements in x.
find(A)
returns the indices of the non-zero elements in a vector. For matrices, it is better to give two outputs: [i,j]=find(A).
sqrt(i)
complex variables are handled seamlessly. i and j are both square roots of -1. Avoid i,j in loops, therefore.
inline
Can create functions like [math]\displaystyle{ f(x,y)=\sin(x^2+y^2+xy) }[/math]. e.g.:
   >> f=inline('sin(x.^2+y.^2+x.*y)')
   
   f =
   
        Inline function:
        f(x,y) = sin(x.^2+y.^2+x.*y)
sparse
Use whenever memory problems are possible due to the usage of large matrices. MATLAB intelligently applies the corresponding algorithms. Typically, just saying A=sparse(A) may cause your code to run 10 times faster, if your matrix is large and sparse.

SPECIAL MATRICES

ones(m,n[,p,..])
Generates a matrix of the corresponding size with all elements 1.
zeros(m,n)
Generates a matrix filled with zeroes; useful for initialisation some times.
rand(n)
gives an n-by-n matrix with random entries, chosen from
   a uniform distribution on the interval (0.0,1.0).
eye(n)
eye(n) is the N-by-N identity matrix.
eye(m,n)
is an m-by-n matrix with 1's on the diagonal and zeros elsewhere.

Note that a single argument usually creates a square matrix for the above functions.

diag
Can be used to extract the diagonal of a matrix or even create diagonal matrices.

INPUT/OUTPUT RELATED

x=1 vs x=1;
; suppresses the output
   >> x=1
   
   x =
   
        1
   
   >> x=1;
   >> 
disp
Suppresses some of the extra lines...
   >> x
   
   x =
   
        1
   
   >> disp(x)
        1
   
   >> 
sprintf
similar to sprintf of C/++.
fprintf
similar to sprintf of C/C++. Use either this or sprintf to print on stdout (command window).
load
loads files. Simplest file is one with equal number of entries in each row separated by space or tab. MATLAB will crib if number of entries in any row are different from others.
importdata
Useful for loading text files and other files you would usually load using File>Import...
xlsread
Can read Microsoft Excel files directly
save
Without filename, all variables are saved to 'matlab.mat'. With filename, all are saved to the corresponding file. You can even specify what variables to save, even with a regular expression!
format long
Displays many digits of precision (default format shows only 4 decimals)
format rat
Displays output as rational numbers!
format
Resets format

MATRIX FUNCTIONS

MATLAB has a host of matrix-related functions. lookfor should come handy for searches.

inv
Inverse of a matrix.
inv vs \
Inverse of a matrix is expensive to compute and to be avoided. MATLAB supports the beautiful slash operator: Just as for ax=b, x=b/a, for matrices, i.e. when [math]\displaystyle{ \mathbf{A}\mathbf{x}=\mathbf{b} }[/math] MATLAB allows, x=A\b (try to see it is a b/A!)
*
Matrix multiplication
.*
Element-wise multiplication
.
. does element-wise operations. For example: A^5 vs A.^5 dot. A^5 multiplies A with itself 5 times (matrix product; possible only when A is square) whereas A.^5 raises every element of A to the 5th power.
norm
Various norms maybe calculated for a matrix.
expm(A) vs exp(A)
exp(A) does [math]\displaystyle{ e^{a_{ij}}\ \forall \ a_{ij} \in \mathbf{A} }[/math], whereas expm is defined as:

[math]\displaystyle{ e^\mathbf{A}=\mathbf{I}+\mathbf{A}+\frac{\mathbf{A^2}}{2!}+\frac{\mathbf{A^3}}{3!}+\dots \infty }[/math] This is of great use while solving systems of differential equations.

svd
Singular Value Decomposition
eig
Eigenvalue/Eigenvector finding
chol
Cholesky Decomposition

OTHER FUNCTIONS

polyval
compan

ADVANCED

cell
symbolic

FIGURE RELATED FUNCTIONS

clf
figure
close
close all
hold on
waitforbuttonpress
subplot
plot
ezplot
surf
mesh
title
colormap

PROGRAMMING

  • function name and file name should be the same
  • % comments
  • help and comments
help myfun will return the first block of comments in myfun.m
(see the following example as well)
  • return is implicit. For example
   % my function to calculate max of two numbers
   % 
   function a=mymax(x,y)
   if (x>y)
       a=x;
   else
       a=y'
   end
   return %optional: whatever a is at the end of the 
          %function file, that value will be returned.  
  • programs vs scripts
Scripts don't have a function keyword. They're just 'scripts', which run a series of commands. The variables are all in memory after the execution of the script
  • if (x~=1)
This is a significant difference from C/C++: instead of x!=1, use x~=1.
  • elseif
  • end - ENDs any blocks - for, if, elseif, while etc (roughly equivalent of } in C++; there is no { if (x~=1) itself implies — loosely— if(x!=1){ of C++))
  • for k=1:100 (not i!!)
  • All addressing is from 1:n
  • handling arguments
Multiple arguments can be specified in the function definition
   function [mean,median,mode,variance]=statistics(x)
  • for loops is bad programming... there should be vectorisable alternatives!!

BIOINFORMATICS TOOLBOX

clustergram

SBMLToolBox

~libSBML for MATLAB!