Első labor
Contents
A command window használata
2+3
ans = 5
2*pi% Pi nem működik, számít a kisbetű-nagybetű
ans = 6.2832
3/exp(1)
ans = 1.1036
Egy már végrehajtott parancs nem módosítható, de a nyilak segítségével visszahozhatjuk korábbi parancsokat, illetve parancs elejének begépelése + felfelé nyíl hatására csak az adott elejű parancsokat hívja elő
i*3^4
ans = 0.0000 +81.0000i
Értékadás
a=5.1
a = 5.1000
a
a = 5.1000
Az aktuális értékkel rendelkező változók listájának lekérdezése a whos paranccsal történik.
who
Your variables are: a ans
Ha a típusok és az elfoglalt memória mennyisége is érdekel minket, akkor a whos parancsot használjuk.
whos
Name Size Bytes Class Attributes a 1x1 8 double ans 1x1 16 double complex
Egy változót a clear változóneve paranccsal törölhetünk
clear a
whos
Name Size Bytes Class Attributes ans 1x1 16 double complex
Formátum megadása
Kiírás beállítása (nem a számolási pontosságé!)
format short
5.123456789
ans = 5.1235
A parancsok leírását megkapjuk, ha beírjuk a parancssorba a help parancsneve sort. Részletes leírás a doc parancsneve segítségével kérhető.
help format
FORMAT Set output format. FORMAT with no inputs sets the output format to the default appropriate for the class of the variable. For float variables, the default is FORMAT SHORT. FORMAT does not affect how MATLAB computations are done. Computations on float variables, namely single or double, are done in appropriate floating point precision, no matter how those variables are displayed. Computations on integer variables are done natively in integer. Integer variables are always displayed to the appropriate number of digits for the class, for example, 3 digits to display the INT8 range -128:127. FORMAT SHORT and LONG do not affect the display of integer variables. FORMAT may be used to switch between different output display formats of all float variables as follows: FORMAT SHORT Scaled fixed point format with 5 digits. FORMAT LONG Scaled fixed point format with 15 digits for double and 7 digits for single. FORMAT SHORTE Floating point format with 5 digits. FORMAT LONGE Floating point format with 15 digits for double and 7 digits for single. FORMAT SHORTG Best of fixed or floating point format with 5 digits. FORMAT LONGG Best of fixed or floating point format with 15 digits for double and 7 digits for single. FORMAT SHORTENG Engineering format that has at least 5 digits and a power that is a multiple of three FORMAT LONGENG Engineering format that has exactly 16 significant digits and a power that is a multiple of three. FORMAT may be used to switch between different output display formats of all numeric variables as follows: FORMAT HEX Hexadecimal format. FORMAT + The symbols +, - and blank are printed for positive, negative and zero elements. Imaginary parts are ignored. FORMAT BANK Fixed format for dollars and cents. FORMAT RAT Approximation by ratio of small integers. Numbers with a large numerator or large denominator are replaced by *. FORMAT may be used to affect the spacing in the display of all variables as follows: FORMAT COMPACT Suppresses extra line-feeds. FORMAT LOOSE Puts the extra line-feeds back in. Example: format short, pi, single(pi) displays both double and single pi with 5 digits as 3.1416 while format long, pi, single(pi) displays pi as 3.141592653589793 and single(pi) as 3.1415927. format, intmax('uint64'), realmax shows these values as 18446744073709551615 and 1.7977e+308 while format hex, intmax('uint64'), realmax shows them as ffffffffffffffff and 7fefffffffffffff respectively. The HEX display corresponds to the internal representation of the value and is not the same as the hexadecimal notation in the C programming language. See also DISP, DISPLAY, ISNUMERIC, ISFLOAT, ISINTEGER. Reference page in Doc Center doc format
Vektorok és mátrixok létrehozása
Elemenként: szögletes zárójelben a sorvektort, az elemek közé , vagy semmi.
v=[1 2 4];
;-el elválasztva az oszlopvektort:
w=[5 ; 6 ; -1]
w = 5 6 -1
Mátrixok esetén a sorok közé ; kell, a mátrix voltaképpen egy (sor)vektorokból álló (oszlop)vektor
C=[1 0 3; 4 3 -1; 3 -5 8]
C = 1 0 3 4 3 -1 3 -5 8
itt az 1 0 3 az első sor,
Vagy lehet előre definiált függvényekkel:
Olyan mátrix aminek diagonálisa (főátlója) a bemenetként kapott vektor
A=diag(v)
A = 1 0 0 0 2 0 0 0 4
5*5-os egység mátrix
I=eye(5)
I = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
csupa 0-t tartalmazó 5*2-os mátrix
Z=zeros(5,2)
Z = 0 0 0 0 0 0 0 0 0 0
csupa egyet
E=ones(2,3)
E = 1 1 1 1 1 1
a mátrix mérete
size(C)
ans = 3 3
sorainak száma
size(E,1)
ans = 2
oszlopainak a száma
size(E,2)
ans = 3
a sorainak és oszlopainak száma közül a nagyobb (vektor esetén a hossz)
length(E)
ans = 3
Számokból álló sorvektor létrehozására használhatjuk a : operátort a:b:c módon. Első szám: kezdőérték, második szám: lépésköz, harmadik szám végpont (pontosabban az az érték amit a végpont nem haladhat meg). Például:
x=0:0.3:1
x = 0 0.3000 0.6000 0.9000
Ez egy sorvektor
whos
Name Size Bytes Class Attributes A 3x3 72 double C 3x3 72 double E 2x3 48 double I 5x5 200 double Z 5x2 80 double ans 1x1 8 double v 1x3 24 double w 3x1 24 double x 1x4 32 double
Másik lehetőség sorvektor létrehozására: egyenlő osztásközű sorvektor, a harmadik számnyi elemmel
y_sor=linspace(1,2,5)
y_sor = 1.0000 1.2500 1.5000 1.7500 2.0000
Vigyázat a Matlab megkülönbözteti a sor- és oszlopvektorokat!
Indexelés
A sorvektor egyes elemeit a () segítségével indexelhetjük, a sorszámozás 1-el kezdődik
x(1)
x(2)
% de x(6)!
ans = 0 ans = 0.3000
értékadásnál nagyon oda kell figyelnünk, mert:
x(6)=5
x = 0 0.3000 0.6000 0.9000 0 5.0000
sőt
x2(12)=5
x2 = 0 0 0 0 0 0 0 0 0 0 0 5
egy konkrét elem lekérdezése (3. sor 2. oszlop)
C(3,2)
ans = -5
oszlopfolytonosan számítva a 6. elem
C(6)
ans = -5
Első sor lekérése
C(1,:)
ans = 1 0 3
ez itt a felső 2*2-es mátrix
C(1:2,1:2)
ans = 1 0 4 3
Ez pedig C minden második oszlopa
C(:,1:2:3)
ans = 1 3 4 -1 3 8
Műveletek
x_sor=0:0.3:1
x_sor = 0 0.3000 0.6000 0.9000
x vektor elemeinek száma
length(x_sor)
ans = 4
az aposztróf a transzponálás jele
x_oszlop=x_sor'
x_oszlop = 0 0.3000 0.6000 0.9000
Méret. Nem mindegy, hogy 1*4 (sorvektor) vagy 4*1 (oszlopvektor)!
size(x_sor)
ans = 1 4
size(x_oszlop)
ans = 4 1
konstanssal való szorzás
5*x
ans = 0 1.5000 3.0000 4.5000 0 25.0000
skaláris szorzat, azaz egy szám
x*x'
ans = 26.2600
van rá külön parancs is a dot
dot(x,x)
ans = 26.2600
diádszorzat, azaz egy mátrix
D=x_sor'*x_sor
D = 0 0 0 0 0 0.0900 0.1800 0.2700 0 0.1800 0.3600 0.5400 0 0.2700 0.5400 0.8100
az x vektor elemenkénti négyzete, általában is a pont az elemenkénti műveletet jelenti.
x_sor.*x_sor
ans = 0 0.0900 0.3600 0.8100
A Matlab nagyon sok beépített függvénnyel rendelkezik. Ahol rendelkezésre áll, ott ezeket célszerű használni, hiszen ezek optimalizálva vannak. Egy példa:
min(x_sor)
ans = 0
Ezek döntõ többsége polimorf, azaz többféleképpen is meghívható, és a válasz attól függ hogyan hívtuk meg. Hasonlítsuk össze:
min(x_sor)
ans = 0
De
[minertek,minpozicio]=min(x_sor)
minertek = 0 minpozicio = 1
Editor használata
Mi magunk is készíthetünk saját függvényeket. Ehhez nyissunk egy editor ablakot, majd üres scriptet létrehozva, az első sorba írjuk a függvény fejlécét:
function [kimenet(ek)]=függvénynév(bemenet(ek))
a második sorba egy % jel után a függvény rövid leírása kerül, majd ezután a végrehajtandó parancsok. Végül egy .m végződésű fájlba kell mentenünk a munkákat. Ügyeljünk arra, hogy a fejlécben szereplő függvénynevet használjuk fájlnévnek is.
Például ez a függvény kap egy vektort bemenetként, és visszaadja az első elemét:
function w=elsoelem(v) % A függvény visszaadja a bemenetként kapott sorvektor első elemét. % Meghívásának módja: elsoelem(v), ahol v egy sorvektor. w=v(1);
A függvényüket a parancssorból tudjuk használni, ha abban a könyvtárban vagyunk, ahová mentettük. Ezt a pwd paranccsal (vagy a felső sorban) ellenőrizhetjük.
elsoelem([-1 0 2 3])
ans = -1
Vigyázat, minden a függvény belsejében szereplő változó lokális, azaz a függvény futása után nem tudjuk elérni, például v-t sem látjuk!
A beépített leírás a help parancs segítségével érhető el.
help elsoelem
A függvény visszaadja a bemenetként kapott sorvektor első elemét. Meghívásának módja: elsoelem(v), ahol v egy sorvektor.
Lehet több kimenet is, az alábbi függvény visszaadja egy mátrix bal felső és jobb alsó elemét
function [uleft, lright]=corners(A) % Visszaadja egy mátrix bal felső és jobb alsó elemét. % Meghívásának módja: [bf, ja]=elemek(A), ahol A egy tetszőleges méretű mátrix. uleft=A(1,1); lright=A(end, end);
Használata:
[bf, ja]=elemek(D)
bf = 0 ja = 0.8100
Több bemenet is lehetséges, ez a függvény például visszaadja a bemeneteként kapott számok összegét és szorzatát
function [osszeg, szorzat]=szamol(a,b) % Visszaadja a bemeneteként kapott számok összegét és szorzatát % Meghívásának módja: [o, s]=szamol(a,b) osszeg=a+b; szorzat=a*b;
Vessük össze:
szamol(2,3)
ans = 5
[p,q]=szamol(2,3)
p = 5 q = 6
Órai feladatok
Egyetlen feladat megoldásához sem kell ciklust írni, sőt!
1. feladat: Írjunk olyan függvényt, melynek bemenete két darab pozitív valósakból álló oszlopvektor, melyek rendre egy derékszögű háromszög két befogójának hosszát tartalmazzák. A kimenet legyen egy olyan oszlopvektor, amely rendre az átfogókat tartalmazza.
function ki=pitagoraszTetel(be1,be2)
ki=sqrt(be1.^2+be2.^2);
2. feladat: Írjunk olyan függvényt, amelynek bemenete egy sorvektor, kimenete pedig a legkisebb és a legnagyobb elemének különbsége.
function ki=terjedelem(v)
ki=min(v)-max(v);
4. feladat: Írjunk olyan függvényt, melynek bemenete egy n pozitív szám, a kimenete pedig egy 2*n-szer 2*n-es mátrix, melynek balfelső n*n-es sarkában csupa 1-es áll, a jobbfelsõ n*n-es sarkában csupa 3-as, a balalsó sarkában csupa 2-es, a jobbalsó sarkában pedig csupa 0-s.
function ki=fura(n) ki=zeros(2*n); ki(1:n,1:n)=1; %bal felső rész ki(1:n,n+1:2*n)=3; %jobb felső rész ki(n+1:2*n,1:n)=2; %bal alsó rész
6. feladat: Írjunk olyan függvényt, amelynek bemenete egy négyzetes mátrix. A függvény keresse meg a legnagyobb elemet a mátrixban azok közül, amelyek valamelyik páratlanadik sorban vannak.
function ki=maxPtlan(A)
ki=max(max(A(1:2:end, :)));
Beküldhető házik
3. feladat: Írjunk olyan függvényt, melynek bemenete egy valós elemű mátrix és egy pozitív egész n, a kimenete pedig a mátrix bal felső n*n-es sarka.
5. feladat: Írjunk olyan függvényt, melynek két bemenete n és m pozitív egészek, és készít egy olyan n*m-es mátrixot ("sakktáblát"), melyben csupa 0 és 1 szerepel, méghozzá úgy, hogy a bal felső elem 1-es, és a szomszédos mezőkön különböző számok állnak.