%% Lesson 2a: More vector and matrix operations % % Objectives: % * Understand how to perform vector operations in MATLAB % * Understand arithmetic and basic functions in MATLAB %% Vector operations % In lesson 1, we saw how to create a vector with the colon operator and % linspace. Now let's perform some operations on them! % % There are two common classes of operations that you can perform on vectors: % element-wise operations (which produce another vector) and aggregate % operations (which produce a scalar value). There are also many functions that % don't fall under these categories, but these cover many of the common % functions. %% Element-wise operations % Many operations that work on scalars (which are really degenerate matrices) % also work element-wise on vectors (or matrices). x = 0:0.01:2*pi; % Create a linearly-spaced vector y = sin(x); % sin() works element-wise on vectors! y = abs(x); % same with abs()! y = x .^ 4; % element-wise power y = power(x, 4); % same as above plot(x, y); % Plot y vs. x (line graph) title('y vs. x'); %% Aggregate operations % Another common class of operations produce a single output or statistic about % a vector (or matrix). length(x); % number of elements in x sum(x); % sum of the elements of x mean(x); % average of the elements of x min(x); % minimum element of x diff(x); % difference between adjacent elements of x %% Exercise 1 : Vector operations T = 1e-6; % Sampling period (s) t = 0:T:2e-3; % Time (domain/x-axis) f0 = 50; % Initial frequency (Hz) b = 10e6; % Chirp rate (Hz/s) A = 10; % Amplitude y1 = A * cos(2*pi*f0*t + pi*b*t.^2); figure; plot(t,y1); %% Exercise: Numerical calculus % See numerical_calculus.m. %% Basic indexing in MATLAB % The process of extracting values from a vector (or matrix) is called % "indexing." In MATLAB, indices start at 1, rather than 0 in most languages % (in which it is more of an "offset" than a cardinal index). %% Exercise 2 : Basic indexing % The syntax for indexing is "x(indices)", where x is the variable to index, % and indices is a scalar or a vector of indices. There are many variations on % this. Note that indices can be any vector x(1); % first element of x x(1:3); % elements 1, 2 and 3 (inclusive!) x(1:length(x)); % all elements in x x(1:end); % same as above x(:); % same as above x(end); % last element of x x(3:end); % all elements from 3 onwards x([1,3,5]); % elements 1, 3, and 5 from x x(1:2:end); % all odd-indexed elements of x ind = 1:2:length(x); x(ind); % same as the previous example %% Exercises to improve your understanding % Take some time to go through these on your own. x([1,2,3]); % Will these produce the same result? x([3,2,1]); x2 = 1:5; x2(6); % What will this produce? x2(0); % What will this produce? x2(1:1.5:4); % What will this produce? ind = 1:1.5:4; x2(ind); % What will this produce? z = 4; z(1); % What will this produce? %% Matrix operations % Matrices is closely related to vectors, and we have also explored some matrix % operations last class. This class, we are going to explore functions that are % very useful but are hard to grasp for beginners, namely reshape, meshgrid, % row-wise and column-wise operations. %% Reshape % Change a matrix from one shape to another. The new shape has to have the same % number of elements as the original shape. % % When you are reshaping an array / matrix, the first dimension is filled % first, and then the second dimension, so on and so forth. I.e., elements % start filling down columns, then rows, etc. M = 1:100; N1 = reshape(M,2,2,[]); % It would create a 2*2*25 matrix N2 = reshape(M,[2,2,25]); % Same as N1 N2(:,:,25); % Gives you 97,98,99,100 N2(:,1,25); % Gives you 97 and 98 %% Row-wise / Column-wise operations % Vector operations can also be performed on matrices. We can perform a vector % operation on each row/column of a matrix, or on a particular row/column by % indexing. H = magic(4); % create the magical matrix H sum(H,1); % column wise sum, note that this is a row vector(default) fliplr(H); % flip H from left to right flipud(H); % flip H upside down H(1,:) = fliplr(H(1,:)); % flip only ONE row left to right H(1,:) = []; % delete the first row %% Exercise 7 : Matrix Operations H2 = randi(20,4,5); % random 4x5 matrix with integers from 1 to 20 sum(H2(:,2)); mean(H2(3,:)); C = reshape(H2,2,2,5); C(2,:,:) = [];