## Saturday, May 30, 2009

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

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/

## Thursday, May 21, 2009

### Efficient Matlab Coding

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 34 5 6



>> repmat(A, 3, 3)



ans =



1 2 3 1 2 3 1 2 3

 4 5 6 4 5 6 4 5 61 2 3 1 2 3 1 2 34 5 6 4 5 6 4 5 61 2 3 1 2 3 1 2 34 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 56 7 8 9



>> reshape (A, 4, 2)

ans =



2 4

 6 83 57 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/

## 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

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 34 5 6



>> repmat(A, 3, 3)



ans =

1 2 3 1 2 3 1 2 3

 4 5 6 4 5 6 4 5 61 2 3 1 2 3 1 2 34 5 6 4 5 6 4 5 61 2 3 1 2 3 1 2 34 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 56 7 8 9



>> reshape (A, 4, 2)

ans =



2 4

 6 83 57 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/

## 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

## Monday, May 4, 2009

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

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

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

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

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

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