3. laborgyakorlat

Numerikus számítások fizikusoknak

Contents

clear all, close all

Skaláris- és vektoriális szorzás

x=[1,2,3], y=[5,6,7]
dot(x,y) % skaláris szorzás
cross(x,y) % vektoriális szorzás
x =
     1     2     3
y =
     5     6     7
ans =
    38
ans =
    -4     8    -4

Lineáris egyenletrendszerek megoldása

Egyenletmegoldás

H=hilb(8) % Hilbert-mátrix, h_{ij}=1/(i+j-1)
b=ones(8,1)

x=linsolve(H,b) % lin. egyenletrendszer megoldása, vagy
x=H\b % balról osztás művelet
H =
  Columns 1 through 7
    1.0000    0.5000    0.3333    0.2500    0.2000    0.1667    0.1429
    0.5000    0.3333    0.2500    0.2000    0.1667    0.1429    0.1250
    0.3333    0.2500    0.2000    0.1667    0.1429    0.1250    0.1111
    0.2500    0.2000    0.1667    0.1429    0.1250    0.1111    0.1000
    0.2000    0.1667    0.1429    0.1250    0.1111    0.1000    0.0909
    0.1667    0.1429    0.1250    0.1111    0.1000    0.0909    0.0833
    0.1429    0.1250    0.1111    0.1000    0.0909    0.0833    0.0769
    0.1250    0.1111    0.1000    0.0909    0.0833    0.0769    0.0714
  Column 8
    0.1250
    0.1111
    0.1000
    0.0909
    0.0833
    0.0769
    0.0714
    0.0667
b =
     1
     1
     1
     1
     1
     1
     1
     1
x =
  1.0e+005 *
   -0.0001
    0.0050
   -0.0756
    0.4620
   -1.3860
    2.1622
   -1.6817
    0.5148
x =
  1.0e+005 *
   -0.0001
    0.0050
   -0.0756
    0.4620
   -1.3860
    2.1622
   -1.6817
    0.5148

Más példa balról ill. jobbról osztásra.

A=[1,2;3,4]; B=[3,5;2,4];
X=A\B % AX=B megoldása
A*X
X=B/A % XA=B megoldása
X*A
X =
   -4.0000   -6.0000
    3.5000    5.5000
ans =
     3     5
     2     4
X =
    1.5000    0.5000
    2.0000         0
ans =
     3     5
     2     4

A kondíciószám fogalma

Egy mátrix kondíciószáma azt méri, hogy az egyenletrendszer adatainak megváltozása mekkora hatással van az eredmény megváltozására (ha nagy, az a rossz). Parancsa: cond(A). A Hilbert-mátrix rosszul kondicionált. A lenti érték azt mutatja, hogy 1%-ot változtatva az adatokon, a megoldás akár 1.5*10^10 %-ot is változhat.

cond(H)
ans =
  1.5258e+010
b(end)=1.01
y=H\b;
megoldasbeli_kulonbseg=y-x
megoldasbeli_szazalekos_kulonbseg=(y-x)./x*100
b =
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0100
megoldasbeli_kulonbseg =
  1.0e+006 *
   -0.0005
    0.0288
   -0.3892
    2.1622
   -5.9459
    8.5622
   -6.1838
    1.7668
megoldasbeli_szazalekos_kulonbseg =
  1.0e+003 *
    6.4350
    5.7200
    5.1480
    4.6800
    4.2900
    3.9600
    3.6771
    3.4320

Vektorok távolsága

Vektorok távolsága maximum- ill. 2-es normában.

norm(megoldasbeli_kulonbseg,inf) % max. norma
norm(megoldasbeli_kulonbseg) % 2-es norma
ans =
  8.5622e+006
ans =
  1.2444e+007

LU-felbontás

Linenáris egyenletrendszerek általános megoldási módszere a Gauss-módszer. Ez egy eliminációs lépésből és egy visszahelyetesítési lépésből áll. A módszer végrehajtása folyamán létrejön egy L alsó háromszögmátrix 1-esekkel a főátlóban, és egy U felső háromszögmátrix. Ezen mátrixokkal az A mátrix A=LU alakban írható. (A konkrét megvalósítás, a műveletszámok összehasonlítása gyakorlaton.)

A futási idő mérése

A tic, toc, clock parancsok használata.

A=rand(1000); b=rand(1000,1);
tic, A\b; toc
tic, inv(A)*b; toc
Elapsed time is 0.493880 seconds.
Elapsed time is 0.917577 seconds.