5. laborgyakorlat

Numerikus számítások fizikusoknak

Contents

clear all, close all

Iterációs eljárások lineáris egyenletrendszerek megoldására

Alsó háromszögmátrix rész (k. átló és alatta)

A= hilb(5);
tril(A,-1)
ans =
  Columns 1 through 3
                   0                   0                   0
   0.500000000000000                   0                   0
   0.333333333333333   0.250000000000000                   0
   0.250000000000000   0.200000000000000   0.166666666666667
   0.200000000000000   0.166666666666667   0.142857142857143
  Columns 4 through 5
                   0                   0
                   0                   0
                   0                   0
                   0                   0
   0.125000000000000                   0

Felső háromszögmátrix rész (k. átló és felette)

A= hilb(5);
triu(A,1)
ans =
  Columns 1 through 3
                   0   0.500000000000000   0.333333333333333
                   0                   0   0.250000000000000
                   0                   0                   0
                   0                   0                   0
                   0                   0                   0
  Columns 4 through 5
   0.250000000000000   0.200000000000000
   0.200000000000000   0.166666666666667
   0.166666666666667   0.142857142857143
                   0   0.125000000000000
                   0                   0

Jacobi-iteráció (diagonálisan domináns mátrixú egyenletrendszer esetén)

A=hilb(5)+2*eye(5);
b=ones(5,1);
L=-tril(A,-1);
R=-triu(A,1);
D=diag(diag(A));

B=D\(L+R);
f=D\b;

x=zeros(5,1);

for i=1:25
    x=B*x+f;
end
x

% pontos megoldás
A\b
x =
   0.190393396740113
   0.292147815747131
   0.339425311557676
   0.368164698748943
   0.387814784476461
ans =
   0.190393396693669
   0.292147815696678
   0.339425311513461
   0.368164698710511
   0.387814784442693

Gauss-Seidel-iteráció (diagonálisan domináns vagy szimmetrikus poz. def. mátrixú egyenletrendszer esetén)

A=hilb(5)+2*eye(5);
b=ones(5,1);
L=-tril(A,-1);
R=-triu(A,1);
D=diag(diag(A));

B=(D-L)\R;
f=(D-L)\b;

x=zeros(5,1);

for i=1:25 %
    x=B*x+f;
end
x

% Pontos megoldás
A\b
x =
   0.190393396693669
   0.292147815696678
   0.339425311513461
   0.368164698710511
   0.387814784442693
ans =
   0.190393396693669
   0.292147815696678
   0.339425311513461
   0.368164698710511
   0.387814784442693