Dr. Sajid Muhaimin Choudhury

>

image
Hello,

I'm Dr. Sajid Muhaimin Choudhruy

I am currently working in the Department of Electrical and Electronic Engineering of Bangladesh University of Engineering and Technology, Dhaka-1205. My official website is located at sajid.buet.ac.bd. I previously maintained various personal blogs and websites (sajidmc.net). I decided to move to a permanent web solution to host all my previous blogposts.

Blog

ব্লগে ল্যাটেক্স এর সমীকরণ

Using the Wordpress for Latex Plugin, I'm able to use Latex Equations in my post now
$$\alpha+\beta\geq\gamma$$

This might come in handy, for explaining some equations here. I could not install Latex on my webserver, so I am just using the default public server given by wordpress
http://wordpress.org/extend/plugins/latex/

Using the Wordpress for Latex Plugin, I'm able to use Latex Equations in my post now
$$\alpha+\beta\geq\gamma$$

This might come in handy, for explaining some equations here. I could not install Latex on my webserver, so I am just using the default public server given by wordpress
http://wordpress.org/extend/plugins/latex/


Efficient Matlab Coding

(This article is inspired by Omar's Article)

Most people programming at Matlab first get accustomed to some other programming languages like C, C++, Java or even Visual Basic. They learn tactics of manipulating arrays with loops. But as more and more loops are added to a program, the clumsier it gets. In Matlab also, the techniques learned at the previous mentioned languages can apply. But Matlab has some other advantages. In Matlab, every variable is a matrix. This gives some inherent advantages of matrix manipulation. In C, (and in C++ without having a custom class) you will not be able to do a matrix multiplication by simple A*B, in Matlab, you have a provision of doing so.

Ok let's start with some basic array operations. These may not be arcane secrets, still it's always good to know.

Identity Matrix, Zero Matrix and Unity Matrix


n = 3;
A = eye (n); %creates n x n identity matrix
A = eye (n, 1); %creates n x 1 identity matrix
A = zeros(n); % creates n x n zero matrix (all elements zero)
A = ones(n); %  creates n x n  matrix (all elements one)

A set of linearly increasing values


This one is useful if you are making a sine wave or other functions.  linspace (initialvalue, finalvalue, number of samples)
t = linspace (0, 2*pi, 1000); %creates linearly increasing array with values 0 to 2*pi
S = sin (t);  % creates the sine wave

Accessing a particular row or column


A(i,:) = 1 % makes all the elements of row i of matrix/vector A equal to 1.
A(:,i) = 1 % does the same thing with column 1.
B = A(i,:) % stores row i in a row vector B

Accessing more than one rows/columns simultaneously


A = ([1,
A([i,j],:) = 1 % makes all elements of rows i and j equal to 1
B = A(:,[i,j])% B is a matrix with columns i and j of A as its two columns

Swapping rows / columns


A([i,j],:) = A([j,i],:) % swaps the elements of rows i and j
A(:,[i,j]) = A(:,[j,i]) % swaps the column elements of col i and col j

Replacing Values of A


To make a unipolar signal bipolar:
A = double(A); % required if the signal is of boolean type
A (A==0) = -1;

The find( ) function


Used to find index of elements satisfying some condition.
find(A) % returns indices of all non-zero elements
find(A > 5) % finds indices of all elements greater than 5.
length(find(A==1)) %number of ones in A

Inserting blank Rows / Columns:


A = [zeros(1,n-1); A]; % insert column
A = [A zeros(n,1)]; %insert Row

Repeating or tiling a Matrix


Use repmat() to tile matrix to form a larger version.

A = [1 2 3; 4 5 6]


A =



1 2 3
4 5 6




>> repmat(A, 3, 3)



ans =



1 2 3 1 2 3 1 2 3

4 5 6 4 5 6 4 5 6
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6

Deleting a row/column of a matrix


A(i) = [] % Deletes the i-th element of a row/column vector A
A(i,:) = [] % Deletes an entire row
A(:,i) = [] % Deletes an entire row

Changing Size of Matrix


Wanna make a 3x4 matrix a 2x6 Matrix?
use the reshape command

A = [2 3 4 5; 6 7 8 9]




A =

2 3 4 5
6 7 8 9




>> reshape (A, 4, 2)

ans =



2 4

6 8
3 5
7 9


If you want to make only a vector,
B = A(:);

Warning: reshape, *ALWAYS* takes data from columns, and put them in column serially. You may get unexpected result, if, you want the data to be taken from rows instead. Try to transpose the matrix (A') instead.

Ctrl+C. Break the running loop of Matlab.


You may need to select the command window first to activate this.

Making Plots pretty


http://blogs.mathworks.com/loren/2007/12/11/making-pretty-graphs/
http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-creating-better-figures-and-plots
http://www.nada.kth.se/~hjorth/matlab/

Repeating Values of a Matrix


Kronecker Tensor Product


Use the Kronecker Tensor Product function (kron),

A = [1 2 3]

A =

1 2 3

>> kron (A, ones(1, 3))

ans =

1 1 1 2 2 2 3 3 3

Tony's Trick


This is a popular (and allegedly faster) trick used to form a matrix by repeating a row/column vector. (Courtesy of omar)

B = A(ones(3,1),:)
*Example:
>> A =[1 2 3] % A is a row vector

>> B = A(ones(3,1),:)
>> B =

1 2 3
1 2 3
1 2 3

>> A = [1 ; 2 ; 3] % A as a column vector

>> B = A(:,ones(3,1))

>> B =

1 1 1
2 2 2
3 3 3

And WOW! it's really faster for replication in one dimension! For matrix A given above:
Elapsed time is 0.014354 seconds. %Using repmat()function
Elapsed time is 0.000063 seconds. %Using Tony's trick

Repeating Matlab row elements:

Based on the Tony's trick mentioned above, this is a program I've written for the 'time scaling' a matrix by repeating elements.
 %time scaling
function y = timescale (Mat, L)
[m, n] = size(Mat);
temp = zeros(m, n*L);
for i = 1:m
cur_row =Mat(i,:);
cur_row = cur_row (ones(1,L),:);
temp(i,:) = reshape(cur_row, 1, n*L);
end
y = temp;
end
(This article is inspired by Omar's Article)

Most people programming at Matlab first get accustomed to some other programming languages like C, C++, Java or even Visual Basic. They learn tactics of manipulating arrays with loops. But as more and more loops are added to a program, the clumsier it gets. In Matlab also, the techniques learned at the previous mentioned languages can apply. But Matlab has some other advantages. In Matlab, every variable is a matrix. This gives some inherent advantages of matrix manipulation. In C, (and in C++ without having a custom class) you will not be able to do a matrix multiplication by simple A*B, in Matlab, you have a provision of doing so.

Ok let's start with some basic array operations. These may not be arcane secrets, still it's always good to know.

Identity Matrix, Zero Matrix and Unity Matrix


n = 3;
A = eye (n); %creates n x n identity matrix
A = eye (n, 1); %creates n x 1 identity matrix
A = zeros(n); % creates n x n zero matrix (all elements zero)
A = ones(n); %  creates n x n  matrix (all elements one)

A set of linearly increasing values


This one is useful if you are making a sine wave or other functions. linspace (initialvalue, finalvalue, number of samples)
t = linspace (0, 2*pi, 1000); %creates linearly increasing array with values 0 to 2*pi
S = sin (t);  % creates the sine wave

Accessing a particular row or column


A(i,:) = 1 => makes all the elements of row i of matrix/vector A equal to 1.
A(:,i) = 1 => does the same thing with column 1.
B = A(i,:) => stores row i in a row vector B

Accessing more than one rows/columns simultaneously


A = ([1,
A([i,j],:) = 1 => makes all elements of rows i and j equal to 1
B = A(:,[i,j])=> B is a matrix with columns i and j of A as its two columns

Swapping rows / columns


A([i,j],:) = A([j,i],:) => swaps the elements of rows i and j
A(:,[i,j]) = A(:,[j,i]) => swaps the column elements of col i and col j

Replacing Values of A


To make a unipolar signal bipolar:
A = double(A); % required if the signal is of boolean type
A (A==0) = -1;

The find( ) function


Used to find index of elements satisfying some condition.
find(A) % returns indices of all non-zero elements
find(A > 5) % finds indices of all elements greater than 5.
length(find(A==1)) %number of ones in A

Inserting blank Rows / Columns:


A = [zeros(1,n-1); A]; % insert column
A = [A zeros(n,1)]; %insert Row

Repeating or tiling a Matrix



A = [1 2 3; 4 5 6]


A =



1 2 3
4 5 6




>> repmat(A, 3, 3)



ans =

1 2 3 1 2 3 1 2 3

4 5 6 4 5 6 4 5 6
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6

Deleting a row/column of a matrix


A(i) = [] % Deletes the i-th element of a row/column vector A
A(i,:) = [] % Deletes an entire row
A(:,i) = [] % Deletes an entire row

Chaning Size of Matrix


Wanna make a 3x4 matrix a 2x6 Matrix?
use the reshape command

A = [2 3 4 5; 6 7 8 9]




A =

2 3 4 5
6 7 8 9




>> reshape (A, 4, 2)

ans =



2 4

6 8
3 5
7 9


If you want to make only a vector,
B = A(:);

Warning: reshape, *ALWAYS* takes data from columns, and put them in column serially. You may get unexpected result, if, you want the data to be taken from rows instead. Try to transpose the matrix (A') instead.

Ctrl+C. Break the running loop of Matlab.


You may need to select the command window first to activate this.

Making Plots pretty


http://blogs.mathworks.com/loren/2007/12/11/making-pretty-graphs/
http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-creating-better-figures-and-plots
http://www.nada.kth.se/~hjorth/matlab/

Repeating Values of a Matrix


Kronecker Tensor Product


Use the Kronecker Tensor Product function (kron),

A = [1 2 3]

A =

1 2 3

>> kron (A, ones(1, 3))

ans =

1 1 1 2 2 2 3 3 3

Tony's Trick


This is a popular (and allegedly faster) trick used to form a matrix by repeating a row/column vector. (Courtesy of omar)

B = A(ones(3,1),:)
*Example:
>> A =[1 2 3] % A is a row vector

>> B = A(ones(3,1),:)
>> B =

1 2 3
1 2 3
1 2 3

>> A = [1 ; 2 ; 3] % A as a column vector

>> B = A(:,ones(3,1))

>> B =

1 1 1
2 2 2
3 3 3

And WOW! it's really faster for replication in one dimension! For matrix A given above:
Elapsed time is 0.014354 seconds. %Using repmat()function
Elapsed time is 0.000063 seconds. %Using Tony's trick

Repeating Matlab row elements:

Based on the Tony's trick mentioned above, this is a program I've written for the 'time scaling' a matrix by repeating elements.
 %time scaling
function y = timescale (Mat, L)
[m, n] = size(Mat);
temp = zeros(m, n*L);
for i = 1:m
cur_row =Mat(i,:);
cur_row = cur_row (ones(1,L),:);
temp(i,:) = reshape(cur_row, 1, n*L);
end
y = temp;
end

শান্তির সন্ধানে

তান্ত্রিক জগতটার তন্দ্রা ছিড়ে
শকুনীর হিংস্র চোখের ফাঁদ চিরে
বাধ ভাঙ্গার উল্লাসে ওঠো মেতে,
ঝঞ্ঝা মাতোয়ারা এ রক্তিম ধরণীতে।

অশান্ত ধরায় যত ভয়াল দানব,
খঞ্জরের শিঞ্জনে আজ শিহরিত মানব!
রক্তের হোলিতে মেতেছে জন্তু জানব-
পিঞ্জর ভেঙ্গে ছুটে যাও শান্তির ঝান্ডা নেড়ে।

রণাঙ্গনের কলরবে পরিশ্রান্ত এ ধরা
যুদ্ধের দামামা আর শুনতে চায়না তারা
সাদা পতাকা, সাদা পায়রা, হোক না উড্ডীন
পিশাচীর যত রক্তপিপাসা, হয়ে যেতে দাও লীন।তান্ত্রিক জগতটার তন্দ্রা ছিড়ে
শকুনীর হিংস্র চোখের ফাঁদ চিরে
বাধ ভাঙ্গার উল্লাসে ওঠো মেতে,
ঝঞ্ঝা মাতোয়ারা এ রক্তিম ধরণীতে।

অশান্ত ধরায় যত ভয়াল দানব,
খঞ্জরের শিঞ্জনে আজ শিহরিত মানব!
রক্তের হোলিতে মেতেছে জন্তু জানব-
পিঞ্জর ভেঙ্গে ছুটে যাও শান্তির ঝান্ডা নেড়ে।

রণাঙ্গনের কলরবে পরিশ্রান্ত এ ধরা
যুদ্ধের দামামা আর শুনতে চায়না তারা
সাদা পতাকা, সাদা পায়রা, হোক না উড্ডীন
পিশাচীর যত রক্তপিপাসা, হয়ে যেতে দাও লীন।

Visit My Official Website at BUET

Contact Me
Sajid Choudhury
+9665650
Dhaka, Bangladesh