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.