Laplace/Poisson using FD


Let me continue with html

"Assembly"

Decide a numbering scheme
     -----------------------------
     |    |     |     |     |    |
     -----13----14----15----16----
     |    |     |     |     |    |
     -----9-----10----11----12----        Classical numbering,
     |    |     |     |     |    |        here n=5
     -----5-----6-----7-----8-----     
     |    |     |     |     |    |
     -----1-----2-----3-----4-----
     |    |     |     |     |    |
     -----------------------------
This leads to a block tridiagonal matrix of the form

> A=band([-I,B,-I],4); 
                              [B     -I    0     0 ]
                              [                    ]
                              [-I    B     -I    0 ]
                          A = [                    ]
                              [0     -I    B     -I]
                              [                    ]
                              [0     0     -I    B ]

where
> B=band([1,-4,1],4);
                              [-4     1     0     0]
                              [                    ]
                              [ 1    -4     1     0]
                          B = [                    ]
                              [ 0     1    -4     1]
                              [                    ]
                              [ 0     0     1    -4]

and I is the 4 x 4 identity matrix.

In other words
> A=lapmatr(4);
       [-4 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0]
       [                                                              ]
       [1 , -4 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0]
       [                                                              ]
       [0 , 1 , -4 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0]
       [                                                              ]
       [0 , 0 , 1 , -4 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0]
       [                                                              ]
       [1 , 0 , 0 , 0 , -4 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0]
       [                                                              ]
       [0 , 1 , 0 , 0 , 1 , -4 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0]
       [                                                              ]
       [0 , 0 , 1 , 0 , 0 , 1 , -4 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0]
       [                                                              ]
       [0 , 0 , 0 , 1 , 0 , 0 , 1 , -4 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0]
       [                                                              ]
       [0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , -4 , 1 , 0 , 0 , 1 , 0 , 0 , 0]
       [                                                              ]
       [0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , -4 , 1 , 0 , 0 , 1 , 0 , 0]
       [                                                              ]
       [0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , -4 , 1 , 0 , 0 , 1 , 0]
       [                                                              ]
       [0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , -4 , 0 , 0 , 0 , 1]
       [                                                              ]
       [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , -4 , 1 , 0 , 0]
       [                                                              ]
       [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , -4 , 1 , 0]
       [                                                              ]
       [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , -4 , 1]
       [                                                              ]
       [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , -4]

Here we used the procedure lapmatr, to be found also in

/p/edu/mat-1.192/maple/nslib98.mpl 

> lapmatr:=proc(p)
>   local B,C,v;
>   B:=band([1,-4,1],p);
>   C:=diag(seq(B,i=1..p));
>   v:=vector(2*p+1,0);
>   v[1]:=1;v[2*p+1]:=1;
>   evalm(C+band(v,p^2))
> end:

Dirichlet boundary conditions, assembly of RHS