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