Exercises 1

The following exercise will allow you to practise what you have learned so far in this unit.

Let A be a sparse symmetric positive definite matrix of dimension (N1)2×(N1)2 entered in MATLAB (for a given N) by the function buildA as follows:

function A=buildA(N)
    dx=1/N;
    nvar=(N-1)^2;
    e1= ones(nvar,1);
    e2=e1; e2( 1:N-1:nvar)=0;
    e3=e1; e3(N-1:N-1:nvar)=0;
    A=spdiags([-e1 4*e1 -e1],-(N-1):N-1:N-1,nvar,nvar)...
        +spdiags([-e3 -e2], -1: 2 : 1,nvar,nvar);
    A=A/dx^2;
end

We will consider manipulation of the matrix A, which will be used again in later exercises as the solution to the linear system containing this A. This corresponds to a finite difference solution to Poisson’s equation:

2u=f

on the unit square with zero Dirichlet boundary conditions.

Question
  1. Copy the function buildA above into a new file buildA.m in your current working directory.

  2. Set N=4 and produce a spy plot of the matrix A. How many non-zero diagonals are there? How many non-zero entries are there?

  3. What is the determinant of A when N=4?

  4. When N=4, which entries of A1 are greater than 0.02?

  5. For N=4, check that A is symmetric by producing a spy plot of AAT: if A is symmetric there should be no non-zero entries. Check that A is positive definite by looking at its eigenvalues: they should all be strictly positive.

Expand for solution
Solution
  1. To create the spy plot of the matrix A, use the MATLAB function spy(A). From this we see that there are five non-zero diagonals. Using nnz(A) we see that there are 33 non-zero entries. Spy plot of A

  2. When N=4, the MATLAB command det(A) gives the determinant as 6.8961e+15.

  3. Letting B=inv(A), the command [i,j]=find(B>0.02) tells us that the entries (2,2), (4,4), (5,5), (6,6) and (8,8) are greater than 0.02.

  4. The spy plot spy(A-A') shows no non-zero entries. Likewise, A-A' yields All zero sparse: 9×9. Both tell us that A is symmetric.

    The command e=eigs(A,9) tells us the eigenvalues are:

    >> e=eigs(A,9)
    e =
      109.2548
       86.6274
       86.6274
       64.0000
       64.0000
       64.0000
       41.3726
       41.3726
       18.7452
    

    and, hence, are all strictly greater than zero.

Note

Here, by default, eigs(A) only gives a subset of the eigenvalues, but we can force MATLAB to calculate all eigenvalues by specifying the number that we want: hence, eigs(A,9).

An N×N matrix will always have N eigenvalues, although some may be repeated, as is the case here.