Important: Please read the installation page for details about how to install the toolboxes. $\newcommand{\dotp}[2]{\langle #1, #2 \rangle}$ $\newcommand{\enscond}[2]{\lbrace #1, #2 \rbrace}$ $\newcommand{\pd}[2]{ \frac{ \partial #1}{\partial #2} }$ $\newcommand{\umin}[1]{\underset{#1}{\min}\;}$ $\newcommand{\umax}[1]{\underset{#1}{\max}\;}$ $\newcommand{\umin}[1]{\underset{#1}{\min}\;}$ $\newcommand{\uargmin}[1]{\underset{#1}{argmin}\;}$ $\newcommand{\norm}[1]{\|#1\|}$ $\newcommand{\abs}[1]{\left|#1\right|}$ $\newcommand{\choice}[1]{ \left\{ \begin{array}{l} #1 \end{array} \right. }$ $\newcommand{\pa}[1]{\left(#1\right)}$ $\newcommand{\diag}[1]{{diag}\left( #1 \right)}$ $\newcommand{\qandq}{\quad\text{and}\quad}$ $\newcommand{\qwhereq}{\quad\text{where}\quad}$ $\newcommand{\qifq}{ \quad \text{if} \quad }$ $\newcommand{\qarrq}{ \quad \Longrightarrow \quad }$ $\newcommand{\ZZ}{\mathbb{Z}}$ $\newcommand{\CC}{\mathbb{C}}$ $\newcommand{\RR}{\mathbb{R}}$ $\newcommand{\EE}{\mathbb{E}}$ $\newcommand{\Zz}{\mathcal{Z}}$ $\newcommand{\Ww}{\mathcal{W}}$ $\newcommand{\Vv}{\mathcal{V}}$ $\newcommand{\Nn}{\mathcal{N}}$ $\newcommand{\NN}{\mathcal{N}}$ $\newcommand{\Hh}{\mathcal{H}}$ $\newcommand{\Bb}{\mathcal{B}}$ $\newcommand{\Ee}{\mathcal{E}}$ $\newcommand{\Cc}{\mathcal{C}}$ $\newcommand{\Gg}{\mathcal{G}}$ $\newcommand{\Ss}{\mathcal{S}}$ $\newcommand{\Pp}{\mathcal{P}}$ $\newcommand{\Ff}{\mathcal{F}}$ $\newcommand{\Xx}{\mathcal{X}}$ $\newcommand{\Mm}{\mathcal{M}}$ $\newcommand{\Ii}{\mathcal{I}}$ $\newcommand{\Dd}{\mathcal{D}}$ $\newcommand{\Ll}{\mathcal{L}}$ $\newcommand{\Tt}{\mathcal{T}}$ $\newcommand{\si}{\sigma}$ $\newcommand{\al}{\alpha}$ $\newcommand{\la}{\lambda}$ $\newcommand{\ga}{\gamma}$ $\newcommand{\Ga}{\Gamma}$ $\newcommand{\La}{\Lambda}$ $\newcommand{\si}{\sigma}$ $\newcommand{\Si}{\Sigma}$ $\newcommand{\be}{\beta}$ $\newcommand{\de}{\delta}$ $\newcommand{\De}{\Delta}$ $\newcommand{\phi}{\varphi}$ $\newcommand{\th}{\theta}$ $\newcommand{\om}{\omega}$ $\newcommand{\Om}{\Omega}$
This tour shows some basics about Matlab/Scilab programming.
from __future__ import division
import nt_toolbox as nt
from nt_solutions import introduction_1_basics as solutions
%matplotlib inline
%load_ext autoreload
%autoreload 2
Matlab and Scilab are very similar languages. One of the main difference is that Matlab uses the character |%| to write comments, whereas Scilab uses the C-like syntax |//|.
this is a Matlab comment
It is thus very important, in all the numerical tours, to replace |%| comments by |//| comments if you are using Scilab.
The basic data is a 1D or 2D array.
a = 1; a = 2 + 1i; % real and complex numbers
b = [1 2 3 4]; % row vector
c = [1; 2; 3; 4]; % column vector
d = 1: 2: 7; % here one has d = [1 3 5 7]
You an acess one entry of an array, or select a sub-array by indexing.
display the size
size(d)
display the first entry
d(1)
display the sub-array containing entries 1 and 2
d(1: 2)
You can create pre-defined array using some basic functions
identity, 1 and random matrices
A = eye(4, 4)
B = ones(4, 4)
C = rand(4, 4)
transpose
c = b'
The multiplication operator || is the matrix multiplication. To actually multiplies each entry of a vector, you need to use |.|
note the difference
D = C*A
D = C.*A
You can apply functions to each entry of a matrix
E = A./ C; % division
E = sin(A); % sinus is applied to each entry
E = abs(A + 1i*C); % modulus of each entry
You can modify matrices and arrays in various way.
b = sort(b); % sort values
b = b .* (b >2); % set to zeros (threshold) the values below 2
b(3) = []; % suppress the 3rd entry of a vector
B = [b; b]; % create a matrix of size 2x4
c = B(: , 2); % to access 2nd column
Is is possible to access directly the last entry of a vector using the keyword |end| in Matlab and |$| in Scilab.
The equivalent Scilab code is b($-2:$) = 1;
b(end-2: end) = 1; % to access the last entries
The equivalent Scilab code is b = b($:-1:1);
b = b(end: -1: 1); % reverse a vector
Advanced instructions
disp('Hello'); % display a text
x = 1.23456
disp(sprintf('Value of x = %.2f', x)); % print a values with 2 digits
A(A = =Inf) = 3; % replace Inf values by 3
A(: ); % flatten a matrix into a column vector
max(A(: )); % max of a matrix
threshold to 0 values below .3.
C = C .* (abs(C) >.3)
To display information of about a function, use the |help| command, for instance |help perform_wavelet_transf|.
Basic programming constructions include |for|, |while| and |switch| instructions.
for i in 1: 3: # repeat the loop
disp(i); % make here something
i = 3
while i >0 % while syntax
disp(i); % do smth
i = i-1
Load and display an image (download function load_image.m should be in the toolboxes)
n = 256; % size of the image
M = load_image('lena', n)
imageplot(M)
You can manipulate an image just like an arbitrary array
imageplot(M(1: 50, 1: 50), 'Zoom', 1, 2, 1)
imageplot(-M, 'Reversed contrast', 1, 2, 2)