What are good ways to write matlab code in matrix way?



Writing fast code in MATLAB is to let MATLAB do all the iteration over matrices all the time.

Anytime you are writing a "for loop" to iterate over all matrix elements, realize that MATLAB has a way of doing this for you and you just need to find it.

Here are the things to know:

  • If a variable in an expression is a matrix, MATLAB will do the looping automatically if it can figure out what you meant
  • Every built-in MATLAB function will take a matrix as well as a scalar. If you pass a matrix, it means "do this to each element of the matrix"
  • The iteration can span the equal sign of an assignment in certain cases
  • A subset of elements can be operated on using the binary "logical" data type or using "absolute indexing"
  • Every variable in MATLAB is actually a 2-dimensional matrix (or larger). To MATLAB, a scalar value is a 2-dimensional 1x1 matrix. A 1-dimensional vector is either a 1xN matrix or an Nx1 matrix.
  • Aggregating operations (e.g. sum, mean, min, max, std) operate on only 1 dimension of a 2D matrix X at a time. By default, they operate on dimension #1 unless X is a 1xN vector (then dimension #2 is used). However you can always specify which dimension you want used as a parameter. To operate on all elements as a giant vector, pass in X(:).

Here are some examples. Assume x, y, and z are a matrices (2 dimensional) or vectors (1 dimensional). All looping operations are done by MATLAB:

                x = zeros(n,m);          % initialize x to all zeros
x = ones(n,m) * 5;       % initialize all x to 5s
x(4,:) = 5;              % assign 5 to all elements of row #4
x(:,1) = x(:,1) + x(:,2);% add column #2 to column #1
y = x(2:5, 1:6);         % copy inner block rows 2-5 and columns 1-6 to y
z = x + y;               % add all elements of x and y, store in z
z = x * y;               % matrix multiply x and y, store in z
z = x .* y;              % individually multiply elements of x and y, store in z
z = x .^ 2;              % set each element of z to the same element of x squared
w = find(x == 5);        % search x for elements == 5, store integer indices in w
w = (x == 5);            % create binary matrix w that has a 1 anywhere x == 5
x(w) = 8;                % set value of all elements found above (either case) to 8
z = sum(x(:) < 1);         % count how many elements have value < 1
x(x < 0) = 0;            % set all negative elements of x to zero
y = mean(x, 1);          % set y(1,i) to the average of each column of x
y = mean(x(:));          % set y to the average of all elements of x
y = mean2(x);            % set y to the average of all elements of x (2D only)
x = [y, x];              % prepend columns of y to matrix x
x(:,end+1) = 5;          % add a column of 5s to the right side of x
z = sqrt(mean(x(:).^2)); % set z to the root-mean-square of all elements in x
if any(x(:) == 5)        % true if any element of x == 5
if all(x(:) == 0)        % true if all elements of x == 0
if any(all(x == 0, 2))   % true if any rows are all zeros
x = bsxfun(@times, x, 1./sum(x));   % normalize x so each column sums to 1
x = (x - min(x(:))) ./ (max(x(:)) - min(x(:))); % normalize x so min==0 and max==1

Matlabsolutions.com provides guaranteed satisfaction with a commitment to complete the work within time. Combined with our meticulous work ethics and extensive domain experience, We are the ideal partner for all your homework/assignment needs. We pledge to provide 24*7 support to dissolve all your academic doubts. We are composed of 300+ esteemed Matlab and other experts who have been empanelled after extensive research and quality check.

Matlabsolutions.com provides undivided attention to each Matlab assignment order with a methodical approach to solution. Our network span is not restricted to US, UK and Australia rather extends to countries like Singapore, Canada and UAE. Our Matlab assignment help services include Image Processing Assignments, Electrical Engineering Assignments, Matlab homework help, Matlab Research Paper help, Matlab Simulink help. Get your work done at the best price in industry.