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