Two lecture 2 problem 24.10.18
File Lprobl_boundaries.m
Contents
format compact
Perimeter sum
%{ Using MATLAB indexing, compute the perimeter sum of the matrix “magic(8)”. Perimeter sum adds together the elements that are in the first and last rows and columns of the matrix. Try to make your code independent of the matrix dimensions using end. You can do it at least in 2 ways of thought: 1. Pick the rows and parts of the columns that exclude the corner points, and use sum suitably. 2. Embed a zero-matrix of size n − 2 × n − 2 inside magic(n) (n=8) to produce, say Abd. Then do the summation either sum(sum(...)) or sum(Abd(:)) Answer: 910 %}
Solution 1: Pick the boundaries.
A=magic(8) sum(A(1,:))+sum(A(end,:))+sum(A(2:end-1,1))+sum(A(2:end-1,end))
A = 64 2 3 61 60 6 7 57 9 55 54 12 13 51 50 16 17 47 46 20 21 43 42 24 40 26 27 37 36 30 31 33 32 34 35 29 28 38 39 25 41 23 22 44 45 19 18 48 49 15 14 52 53 11 10 56 8 58 59 5 4 62 63 1 ans = 910
Solution 2.: Fill the inner part A(2:end-1,2:end-1) with zeros
AA=A; % Make a copy (just in case...) AA(2:end-1,2:end-1)=zeros(6,6) % All but boundarie to 0. colsums=sum(AA) % Sum of columns, see the inner zeros. perimetersum=sum(colsums)
AA = 64 2 3 61 60 6 7 57 9 0 0 0 0 0 0 16 17 0 0 0 0 0 0 24 40 0 0 0 0 0 0 33 32 0 0 0 0 0 0 25 41 0 0 0 0 0 0 48 49 0 0 0 0 0 0 56 8 58 59 5 4 62 63 1 colsums = 260 60 62 66 64 68 70 260 perimetersum = 910
Next exercise (Skip or not, let's NOT skip):
%{ - 1. Use reshape to form the matrix A: 1 2 3 4 5 6 7 8 9 10 11 12 Hint: start with a 4 × 3-matrix and transpose it. - 2. Find the size [m,n] of A (pretend, you just forgot it.) - 3. Embed A into a zero-matrix AA of size (m + 2) × (n + 2) - 4. Replace the first row of AA by [1, 2, . . . n + 2] and the last row with [n + 2, n + 1, . . . 1].Hint: step -1, or fliplr - 5. replace the m “inner entries (zeros)” (2,...,end-1) of the first column of AA by -1’s %}
Solution
1-2.
A=reshape(1:12,4,3)' [m,n]=size(A)
A = 1 2 3 4 5 6 7 8 9 10 11 12 m = 3 n = 4
3. Run 1 command at the time, to see what's going on
AA=zeros(m+2,n+2) % To be filled with M as inner part... % and boundaries with the given ones. AA(2:end-1,2:end-1)=A
AA = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 AA = 0 0 0 0 0 0 0 1 2 3 4 0 0 5 6 7 8 0 0 9 10 11 12 0 0 0 0 0 0 0
Boundaries:
AA(1,:)=1:n+2
AA = 1 2 3 4 5 6 0 1 2 3 4 0 0 5 6 7 8 0 0 9 10 11 12 0 0 0 0 0 0 0
AA(end,:)=n+2:-1:1
AA = 1 2 3 4 5 6 0 1 2 3 4 0 0 5 6 7 8 0 0 9 10 11 12 0 6 5 4 3 2 1
AA(2:end-1,1)=-1 % Scalar extension works even here.
AA = 1 2 3 4 5 6 -1 1 2 3 4 0 -1 5 6 7 8 0 -1 9 10 11 12 0 6 5 4 3 2 1