Laplacen yhtälö neliössä, Reuna-arvoista vektori b

../matlab/Lapreunabee.m

Contents

Annetaan parametreille arvot.

m=4;  % Sisäsolmujen lkm x/y-suunnassa
N=m^2; % Sisäsolmujen lkm neliössä

%Reuna-arvovektorit:

oik=ones(m,1); yla=2*oik'; vas=3*oik; ala=10*yla;

Muodostetaan m x m-matriisi, jossa reunoilla on reuna-arvot

(nurkka-arvot laskettuna yhteen), sisällä nollaa.

reunaM=zeros(m,m);
reunaM(1,:)=yla;
reunaM(:,1)=reunaM(:,1)+vas;
reunaM(m,:)=reunaM(m,:)+ala;
reunaM(:,m)=reunaM(:,m)+oik;
reunaM=-reunaM;

Tässä meillä on b-vektori matriisimuodossa,

kun vain luetaan alkiot alhaalta vasemmalta aloittaen ja edeten ylös oikealle.

Muuntaminen b-vektoriksi käy leikiten:

M=flipud(reunaM)';
b=M(:)
b =

   -23
   -20
   -20
   -21
    -3
     0
     0
    -1
    -3
     0
     0
    -1
    -5
    -2
    -2
    -3

Indeksimuunnoksen havainnollistus:

indeksit=1:16   % Tässä on haluttu lopputulos.
                 % Edetään takaperin matrisiisiin.
IndM=reshape(indeksit,4,4)
IndM=IndM'
Matriisijarjestys=flipud(IndM)     % Tästä lähdetään liikkeelle.
indeksit =

  Columns 1 through 14

     1     2     3     4     5     6     7     8     9    10    11    12    13    14

  Columns 15 through 16

    15    16


IndM =

     1     5     9    13
     2     6    10    14
     3     7    11    15
     4     8    12    16


IndM =

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16


Matriisijarjestys =

    13    14    15    16
     9    10    11    12
     5     6     7     8
     1     2     3     4

Voidaan tarkistaa "maanläheisesti", että meni oikein:

B=-[ala(1)+vas(1);
ala(2);
ala(3);
ala(4)+oik(1);
vas(2);
0;0;
oik(2);
vas(3);0;0;
oik(3);
vas(4)+yla(1);
yla(2);
yla(3);
yla(4)+oik(4)];

vertaasarakkeita=[b B]
vertaasarakkeita =

   -23   -23
   -20   -20
   -20   -20
   -21   -21
    -3    -3
     0     0
     0     0
    -1    -1
    -3    -3
     0     0
     0     0
    -1    -1
    -5    -5
    -2    -2
    -2    -2
    -3    -3