2. laborgyakorlat

Numerikus számítások fizikusoknak

Contents

clear all, close all

m-fájlok (szkriptek és függvények)

A számológép üzemmód mellett parancsainkat elmenthetjük egy szövegfájlba is. Ezeket m-fájloknak hívjuk, mivel a Matlab *.m kiterjesztést ad nekik. Két fajtájuk van: szkriptek ill. függvények. A szkript egyszerűen csak egymás utáni parancsokat tartalmaz, és ha nev.m néven mentettük, akkor a parancssorba írt nev paranccsal futtatható. A szkript fájlban definiált változók a Workspace-en is megjelennek és viszont. A függvényeket tartalmazó m-fájlok a function [kimeneti változók]=függvénynév(bemeneti változók) sorral kezdődnek, és a készenléti jeltől a [kimeneti változók]=függvénynév(bemeneti változók) paranccsal futtathatók. A függvényekben definiált változók nem jelennek meg a Workspace-en és viszont.

Most csak a szkriptekkel foglalkozunk. A függvényekről később lesz szó.

Pl. egy szkriptre: kertersc.m

%{
  % Téglalap kerületének és területének számolása
  % Egy téglalap a és b oldalainak
  % függvényében megadja a téglalap kerületét (kerulet) és területét (terulet).

  % Megadjuk az oldalhosszokat.
    a=3; b=4;
  % Kiszámoljuk a területet és a kerületet.
    kerulet=2*(a+b)
    terulet=a*b
%}

kertersc
whos
help kertersc
kerulet =
    14
terulet =
    12
  Name         Size            Bytes  Class     Attributes

  a            1x1                 8  double              
  b            1x1                 8  double              
  kerulet      1x1                 8  double              
  terulet      1x1                 8  double              

  Téglalap kerületének és területének számolása
  Egy téglalap a és b oldalainak
  függvényében megadja a téglalap kerületét (kerulet) és területét (terulet).

    showdemo kertersc
      

Az m-fájlokat %% jelekkel cellákra bonthatjuk. Ezek a cellák külön futtathatók. Továbbá lehetőség van az m-fájl publikálására is (Menü->Publish). Ekkor a Matlab végrehajta a parancsokat, és a kódból és az eredményekből készít egy pdf, html vagy TeX fájlt. Ez a dokumentum is így készült. A publikálás elvégezhető paranccsal is, pl. az alábbi módon. Az elkészült html fájlt ezek után megtaláljuk a tárhelyünkön.

publish('kertersc','html')
ans =
D:\Oktatas\Tantargyak\Numerikus szamitasok\html\kertersc.html

Mátrixműveletek

Ebben a részben azzal foglalkozunk, hogy hogyan lehet mátrixokat megadni, és azokkal milyen műveleteket lehet végezni.

Mátrixok megadása, almátrixok, elemek

Mátrix megadása

A=[1,2,3
   4,5,6
   7,8,10]
A =
     1     2     3
     4     5     6
     7     8    10

vagy

A=[1,2,3;4,5,6;7,8,10]
A =
     1     2     3
     4     5     6
     7     8    10

Egy mátrixelem megadása mátrixot definiál már.

F(2,3)=2
F
F(4,4)=3
F
F =
     0     0     0
     0     0     2
F =
     0     0     0
     0     0     2
F =
     0     0     0     0
     0     0     2     0
     0     0     0     0
     0     0     0     3
F =
     0     0     0     0
     0     0     2     0
     0     0     0     0
     0     0     0     3

Blokkmátrix

y=[1;2;3];
B=[A,y]
B =
     1     2     3     1
     4     5     6     2
     7     8    10     3

: jelölés használata

C=[1:3
   2:4
   4:5:14]
C =
     1     2     3
     2     3     4
     4     9    14

linspace, logspace

x=linspace(1,6,6) % [1,6] intervallumból 6 egyforma távol lévő pont.
x=logspace(1,4,4) % 10.^linspace(1,4,4)
x =
     1     2     3     4     5     6
x =
          10         100        1000       10000

Mátrixelem

B(2,3)
ans =
     6

Második sor

B(2,:)
ans =
     4     5     6     2

Negyedik oszlop

B(:,4)
ans =
     1
     2
     3

1. és 3. sor ill. 2-tól az utolsó oszlop

B([3,1],2:end)
ans =
     8    10     3
     2     3     1

Legyen A második oszlopa csupa 1!

A(:,2)=[1;1;1]
A =
     1     1     3
     4     1     6
     7     1    10

Transzponált

A'
ans =
     1     4     7
     1     1     1
     3     6    10

Kétindexű mátrixelemmegadás

A meshgrid parancs

x=[1,2,3]; y=[1,2,3];

[uj_x,uj_y]=meshgrid(x,y) % uj_x: oszlopindex, uj_y: sorindex

D=uj_y.^2+uj_x % sorindex négyzete + oszlopindex
uj_x =
     1     2     3
     1     2     3
     1     2     3
uj_y =
     1     1     1
     2     2     2
     3     3     3
D =
     2     3     4
     5     6     7
    10    11    12

Nevezetes mátrixok

nullmátrix

zeros(3,4), zeros(3)
ans =
     0     0     0     0
     0     0     0     0
     0     0     0     0
ans =
     0     0     0
     0     0     0
     0     0     0

csupa 1 mátrix

ones(3,4), ones(3)
ans =
     1     1     1     1
     1     1     1     1
     1     1     1     1
ans =
     1     1     1
     1     1     1
     1     1     1

egységmátrix

eye(3,4), eye(3)
ans =
     1     0     0     0
     0     1     0     0
     0     0     1     0
ans =
     1     0     0
     0     1     0
     0     0     1

véletlen mátrix

rand(3,4), rand(3) % egyenletes eloszlás [0,1]
randn(3,4), randn(3) % standard normális eloszlás
ans =
    0.8147    0.9134    0.2785    0.9649
    0.9058    0.6324    0.5469    0.1576
    0.1270    0.0975    0.9575    0.9706
ans =
    0.9572    0.1419    0.7922
    0.4854    0.4218    0.9595
    0.8003    0.9157    0.6557
ans =
   -0.4326    0.2877    1.1892    0.1746
   -1.6656   -1.1465   -0.0376   -0.1867
    0.1253    1.1909    0.3273    0.7258
ans =
   -0.5883    0.1139   -0.0956
    2.1832    1.0668   -0.8323
   -0.1364    0.0593    0.2944

diagonális mátrix

A
d=diag(A)
diag(d)
diag(d,2)
A =
     1     1     3
     4     1     6
     7     1    10
d =
     1
     1
    10
ans =
     1     0     0
     0     1     0
     0     0    10
ans =
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     0    10
     0     0     0     0     0
     0     0     0     0     0

Toeplitz-mátrix

E=toeplitz([1,2,3])
E =
     1     2     3
     2     1     2
     3     2     1

Mátrixok tulajdonságai

A
meret=size(A) % mátrix mérete
max_sor_vagy_oszlop=length(A) % max(sorok száma, oszlopok száma)
determinans=det(A) % determináns
nyom=trace(A) % főátló összege
rang=rank(A) % rang
sajatertekek=eig(A) % sajátérték
[sv,se]=eig(A) % sajátvektor, sajátérték
inverz=inv(A) % inverz mátrix
[m,p]=max(A) % maximum (oszloponként mennyi a max. és hányadik sorban van)
[m,p]=min(A) % minimum (oszloponként mennyi a max. és hányadik sorban van)
A =
     1     1     3
     4     1     6
     7     1    10
meret =
     3     3
max_sor_vagy_oszlop =
     3
determinans =
    -3
nyom =
    12
rang =
     3
sajatertekek =
   12.7650
   -1.0000
    0.2350
sv =
   -0.2532   -0.8433   -0.4135
   -0.5065    0.1054   -0.8269
   -0.8242    0.5270    0.3811
se =
   12.7650         0         0
         0   -1.0000         0
         0         0    0.2350
inverz =
   -1.3333    2.3333   -1.0000
   -0.6667    3.6667   -2.0000
    1.0000   -2.0000    1.0000
m =
     7     1    10
p =
     3     1     3
m =
     1     1     3
p =
     1     1     1
WDEavRCxrZ00029000