* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download 10_lecture_20100216_Arrays3
Location arithmetic wikipedia , lookup
Principia Mathematica wikipedia , lookup
Vector space wikipedia , lookup
Classical Hamiltonian quaternions wikipedia , lookup
Mathematics of radio engineering wikipedia , lookup
Basis (linear algebra) wikipedia , lookup
Bra–ket notation wikipedia , lookup
Chapter 3 Arrays (3) 1. Arithmetic Operations Add/subtract Multiply/divide 1. 2. 1. 2. Solving a System of Equations Logical Operations 1. 2. 3. Logical Operators Logical Operations Examples 1 A. B. Add/Subtract Multiply/Divide ARITHMETIC OPERATIONS 2 1. Add & Subtract Overall, you can add and subtract any variable that has the same dimension. Scalars: Result = 2 + 3 – 9 – 2*x ; %assumes x is a scalar Vectors Assume v1, v2, v3 all have 1 row, 3 columns Results = v1 –v2 + v3; Matrices Assume m1, m2, and m3 all have 2 rows, 3 columns Results = m1 + m2 – m3; However, there is one obvious exception.. 3 Using Scalars Adding and subtracting a single scalar to each element of an array is straightforward and obviously does not require the dimensions to match: Original Array: >> A+2 ans = 8 11 6 Addition >> A=[6 9 4; 3 -5 2]' A = 6 3 9 -5 4 2 5 -3 4 >> A-5 ans = 1 4 -1 -2 -10 -3 Subtraction 4 Using Vectors 17 ? 3 9 10 ? Advantage of arrays? 3 variables instead of 6 (one for each value) 5 Source: hyperphysics.phy-astr.gsu.edu/hbase/vect.html Using Vectors There is no limit to the amount/directions of vectors. The dimensions of each vector must match: here [x, y] 6 Source: hyperphysics.phy-astr.gsu.edu/hbase/vect.html Q&A State whether each command works or not: A= [-37.0 4 B = [23 3]; R = A + B 3.3]; A= [-4 56 4]; B = [23 7 3]; R = A - B YES or NO? A= [-37.0 4 B = [23; 6.1; R = A + B 3.3]; 3]; YES or NO? YES or NO? A= [-37.0 4 B = [23; 6.1; R = A + B 3.3]; 3]’; YES or NO? 7 Using Matrices You can add two matrices of the same size by adding individual elements located at the same position (row,col). 6 3 9 -5 4 2 A 1 3 2 2 4 7 6+1 9+1 4+4 3+3 -5+2 2+7 B 7 6 11 -3 8 9 Result 8 Using Matrices You can subtract two matrices of the same size by subtracting individual elements located at the same position (row,col). 6 3 9 -5 4 2 1 3 2 2 4 7 6-1 9-2 4-4 3-3 -5-2 2-7 A-B 1 3 2 2 4 7 5 0 7 -7 0 -5 Result1 6 3 9 -5 4 2 1-6 2-9 4-4 3-3 2--5 7-2 B-A -5 0 -7 7 0 5 Result2 A-B is not equal to B-A! 9 2. Multiplication & Division You can multiple and divide arrays together, not as long as the dimensions match, but rather as long as the MATHEMATICAL EXPRESSION is valid. Caution must be taken even with scalars! Special element-per-element operators (symbols) must be used to bypass the default matrix operations. 10 Source: hyperphysics.phy-astr.gsu.edu/hbase/vect.html Using Scalars with Vectors and Matrices Multiplying, and dividing each element of an array by a single scalar is almost straightforward: >> A=[6 9 4; 3 -5 2]' A = 6 3 9 -5 4 2 Original Array >> A/2 ans = 3.0000 4.5000 2.0000 Division 1.5000 -2.5000 1.0000 >> A*1.1 %or 1.1*A ans = 6.6000 3.3000 9.9000 -5.5000 4.4000 2.2000 Multiplication • What if you wanted to have (2/each element) of the array, like: [ 2/6 2/9 2/4; 2/3 2/-5 2/2]’? Would 2/A work: YES or NO? 11 Using Scalars with Vectors and Matrices Multiplying, and dividing each element of an array by a single scalar is almost straightforward: >> A=[6 9 4; 3 -5 2]' A = 6 3 9 -5 4 2 Original Array To divide by a matrix in Matlab mathematically means “to multiply by the inverse of the matrix”. As written, it is the “matrix division of A into 2”, but to do this, the dimensions of A and 2 have to match (which is not the case!) 12 Element-per-element operator To bypass the matrix-operation, use the element-perelement operator >> . << (pronounced the “dot-operator”). A = 2/6 2/9 2/4 The DOT operator! 2/3 2/-5 2/2 The dot goes BEFORE the / operator! 13 Vector multiplication To calculate the product of two vectors, using the regular star >> * << operator one must be a row vector the other one must be a column vector both must contain the same number of elements But what exactly does it do? … A * B = ? A = B * A = ? 6 9 4 (3 by 1) B = 1 2 -1 ? = 6 18 -4 (1 by 3) ? = 6 18 -4 14 Vector multiplication Matrix multiplication … A = 6 9 4 B = 1 2 -1 (1 by 3) (3 by 1) A * B = ? 15 Vector multiplication B = 1 Matrix multiplication … A = 2 (1 by 3) -1 6 9 4 (3 by 1) B * A = ? This is equivalent to dot(A,B) , and dot(B,A)!! 1*6 + 2*9 + (-1)*4 = 6+18-4 = 20 16 Real Life #1. Dot product and cross product Remember the DOT product? (maybe/maybe not) Credits to: http://www.itee.uq.edu.au/~c ogs2010/cmc/chapters/Hebbi an/ten5.gif The DOT product… In Matlab a = [1; 0.6; -2]; <enter> b = [-1 ; 0; 0.2]; <enter> result = dot(a,b) <enter> 17 Vector multiplication How do we get this? A = 6 9 4 B = 1 2 -1 (1 by 3) (3 by 1) ? = 6 18 -4 (3 by 1) • Again: Use the dot-operator to evaluate element-per-element. In this case, the dimensions MUST match: rows AND columns (hence the apostrophe)! 18 Vector multiplication How about the other direction? A = 6 9 4 B = 1 2 -1 (1 by 3) (3 by 1) ? = 6 18 -4 (1 by 3) 19 Q&A - multiplication State whether each command works or not: A= [-37.0 4 B = [23 3]; R = A * B 3.3]; A= [-4 56 4]; B = [23 7 3]; R = A *. B YES or NO? A= [-37.0 4 B = [23; 6.1; R = B * A 3.3]; 3]; YES or NO? A= [-37.0 R = A * A 4 3.3]; YES or NO? YES or NO? 20 Real life #1 - Plotting graphs In this case: x = linspace(-10,10,20); %array of 20 data points y = x.^2; %calculate array of y’s. %(The dot will be explained next time…) plot(x,y) %plot command Using: y = x*x would not work y = x^2 neither Matlab would try to do vector multiplication! 21 Real life #2 – Calculating 22 Matrix multiplication To multiply matrices using the * operator, the inner-dimensions must match. What this means: .. .. .. .. .. .. .. .. R1 by C1 * .. .. .. .. .. .. .. R2 by C2 C1 must be equal to R2 .. .. .. .. .. .. R1 by C2 Ironically, the resulting matrix has R1 rows and C2 columns! 23 Matrix multiplication 6 3 9 -5 4 2 3 by 2 * 1 3 2 2 6*1+3*2 6*3+3*3 9*1-5*2 9*3-5*2 4*1+2*2 4*3+2*2 2 by 2 3 by 2 Don’t be scared: it’s just math… You’ll learn it eventually. What you need to understand is that the * operator is NOT meant to multiply element by element 24 Matrix multiplication/division M U L T I P L Y Same dimensions: 3 by 2 >> a.*b 6 3 9 -5 4 2 .* 1 3 2 2 4 -1 6*1 3*3 9*2 -5*2 4*4 2*-1 Element per element ans = 6 18 16 3 by 2 9 -10 -2 Same dimensions: 2 by 2 D I V I D E >> c./d 6 3 9 -5 ./ 1 3 2 2 6/1 3/3 9/2 -5/2 ans = 6.0000 4.5000 1.0000 -2.5000 2 by 2 Element per element 25 Left-Division There is an unusual operator that can be applied to matrices: The back-slash: \ The example that follows shows one application of this “left-divide” operator. 26 Real life #2. Solving a system of 2 equations Suppose the following system of equations: X + Y = 11 2*X – Y = 9 Solve for {X,Y} that satisfies both equations simultaneously! Which methods have you used? _______________ 27 Manual Method Solving using substitution: X + Y = 11 2*X – Y = 19 First: Second: Third: Fourth: Use first equation to solve for Y Y = 11 –X Plug that Y back in second equation 2*X – (11-X) = 19 Now, rearrange 3*X – 11 = 19 and solve for X X = (19+11)/3 = 30/3=10 Plug X back into first step to solve for Y Y = 11 – X = 11 – 10 = 1 X=10 Y =1 28 Matlab Method – Matrices (1/2) Recall the original system X + Y = 11 2*X – Y = 19 Take each X and Y coefficient to create a matrix 1*X + 1*Y = 11 2*X – 1*Y = 19 A= 1 1 2 -1 Take the right side values and create a column-vector 1*X + 1*Y = 11 2*X – 1*Y = 19 b= 11 19 29 Matlab Method – Matrices (2/2) Left-divide A by b! Tadaaaa…. Use the \ operator (NOT the regular division symbol) Matlab solves for each unknown, in the order it was placed in matrix A. In our case, X was first, Y came second! 30 Real life #4. Solving a system of 3 equations (1/2) Suppose the following system of equations: x – 3y + 3z = -4 2x + 3y –z = 15 4x – 3y –z =19 Solve for {X,Y,Z} that satisfies both equations simultaneously! What would be A and b? A= ?. ?. ?. 2. ? 3 ?. -1 ? .. 4. -3 . -1 . ?. b= 15 ? . . 19 31 The answer to the system: x=5 y=1 Much faster than manually solving this!!! z = -2 32 A. B. General Idea Examples-examples-examples LOGICAL OPERATIONS 33 General Idea Applied to arrays, this solves problems such as… Find where the positives are positioned Count the number of negatives Delete the negatives Sum all the evens Replace all the negatives by zero … These can easily be solved in 1 or 2 lines, without the use of any loop and if statement. This is very useful in engineering, as tables of data always have to be filtered before use! Note this is UNIQUE to MATLAB. No other software out there does this, so learn your loops and if statements anyway…. 34 General Idea Recall all the logical operators (> >= < <= ~= == && ||) Logical Operations return a: 1 when the condition is evaluated to be true 0 when the condition is evaluated to be false 2>5 2==4 6>=0 In this chapter on arrays, you must only type 1 symbol: &, or | is false, and evaluates to 0 is false, and evaluates to 0 is true, and evaluates to 1 X=4 0<=X && mod(X,2)==0 %positive and even is ______, and evaluates to __ 35 Logical Operations … Matlab evaluates the condition on each element. Prints a 1 when true, a zero when false. How would you use this result to count the number of negative numbers that were randomly generated? ________________________________________ 36 Vector Operations Logical Vectors – an array of 0’s and 1’s indicating which elements meet a criteria: e.g. Values = floor(rand(1, 5)*25); X = mod(Values, 2)==0 % which elements are even? X = 0 1 0 1 1 Used for creating a “mask” – using logical & and |, X can be used to select elements of vectors 37 Vector Operations, cont. Real-Life: Masks for raster graphics http://en.wikipedia.org/wiki/Mask_(computing) 38 Ex1 – Find the actual positions of the positives Matlab offers a built-in function named find(). Applied to a vector, it finds where the condition is true, and returns an array of the actual positions, NOT the zeros and ones. 39 Vector Operations, cont. Logical Indexing: like find()- returns a vector of values meeting a logical criteria Values = floor(rand(1, 5)*25); Z = Values(mod(Values, 2)==0) Z = 18 18 16 4 40 Ex2 – Delete all the numbers less than 32 %Suppose a vector x of values %find the POSITIONS of the numbers < 32 positions = find(x<32); %in x, delete the numbers at these positions x(positions) = []; %delete! OR %Suppose a vector x of values %evaluate where numbers<32 is true whereTrue = x<32; %delete when true x(whereTrue) = []; %delete! 41 Ex3 – Sum all the positive evens %Suppose a vector x of whole values %find the POSITIONS of the positive even numbers positions = find(mod(x,2)==0 & x>=0); %in x, sum the numbers at these positions result = sum(x(positions)); Use only 1 symbol for AND and OR. OR %Suppose a vector x of whole values %evaluate where “numbers is even” is true whereTrue = (mod(x,2)==0 & x>=0); %delete when true result = sum(x(whereTrue)); 42 Ex4 – Sum all the evens %Suppose a vector x of whole values %find the POSITIONS of the even numbers positions = find(mod(x,2)==0); %in x, sum the numbers at these positions result = sum(x(positions)); OR %Suppose a vector x of whole values %evaluate where “numbers is even” is true whereTrue = (mod(x,2)==0); %delete when true result = sum(x(whereTrue)); 43 Ex5 – how about matrices? Part Number Unit Price ($) 101 3.25 65 20.50 290 56.00 450 1.75 The client orders 100 pieces of part number 65. How much is his total bill, with a tax of 6.5%? 44 The part number and quantity can change, hard-coding is not an option! Ex5 – Analyze table, cont. %ask user for part number, and quantity part_number = input(‘Enter part number: ’); quantity = input(‘How many did u buy? ’); %find the row of that part number [row, col] = find(table == part_number); >> [row, col] = find(table == part_number) %in table, get the actual unit price unit_price = table(row,2); row = 2 col = 1 %calculate sub-total sub_total = quantity*unit_price; %add in taxes total_bill = sub_total * (1+0.65); fprintf(‘Your bill adds up to: $%20.2f\n’, total_bill) 45 Ex5 – Analyze table, cont. Note that this wouldn’t go well if the part_number’s value is actually also a unit price! Part Number Unit Price ($) 101 3.25 65 20.50 290 65.00 450 1.75 >> [row, col] = find(table == part_number) row = 2 3 col = 1 2 %find the row of that part number, column1 ONLY row = find(table(:,1) == part_number); That’s SLICING again! 46 Ex6 – Works for strings too! Simulate DNA with a string GATACCAT… The problem is: Generate the matching DNA string! A-T T-A C-G G-C 47 Ex5 – Works for strings too! Using a loop, and an if statement originalDNA =‘GATACCAT’; matchDNA = []; %empty container for the matching DNA length() is used to count the number of elements in a vector, here: number of characters %loop for each letter for ctr = 1:length(originalDNA) if originalDNA(ctr) == ‘T’ %Where it is a ‘T’, make the ‘A’ matchDNA(ctr)=‘A’; elseif originalDNA(ctr) == ‘A’ matchDNA(ctr)=‘T’; elseif originalDNA(ctr) == ‘C’ matchDNA(ctr)=‘G’; elseif originalDNA(ctr) == ‘G’ matchDNA(ctr)=‘C’; end end 48 Ex5 – Works for strings too! Or.. In 5 lines! originalDNA = GATACCAT originalDNA =‘GATACCAT’ %find where T's are matchDNA(originalDNA =='T')='A' matchDNA = A A %find where A's are matchDNA(originalDNA =='A')='T‘ matchDNA = TAT TA %find where G's are matchDNA(originalDNA =='G')='C‘ matchDNA = CTAT TA %find where C's are matchDNA(originalDNA =='C')='G' matchDNA = CTATGGTA 49 One last keyword end It represents automatically the index of the last element in a vector 50