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