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