Contents

A command window használata

A Command window-ot lehet simán számolásra is használni

234*76
ans =

       17784

vagy bonyolultabb kifejezéseket is tud értelmezni.

exp(i*pi)
ans =

  -1.0000 + 0.0000i

Viszont numerikus kerekítési hibák előfordulhatnak.

exp(i*pi)+1
ans =

   0.0000e+00 + 1.2246e-16i

A dupla egyenlőságjellel kérdezzük meg, hogy egynlő-e? A kimenet azt mondja hogy nem. A 0 jelenti a logikailag hamis állítást az 1 (vagy bármilyen nem nulla szám) az igazat.

ans==0
ans =

  logical

   0

Értékadás

Egy álatalunk kitalált nevű változónak a "=" -el adhatunk értéket.

a=3.2
a =

    3.2000

b=4
b =

     4

A who paranccsal kérdezhetjük meg már meglévő változóink neveit.

who
Your variables are:

a    ans  b    


Ha simán lefuttatunk egy parancsot és nem tároljuk el a választ akkor a válasz az "ans" (vagyis answer-válasz) nevű változóban tárolódik el. Ezzel a változóval ugyanúgy lehet bánni mint a többi válatozóval.

ans
ans =

  logical

   0

Az értékadás úgy történik, hogy előzör kiértékalik a jobboldalt majd az így kapott értéket a baloldalba rakjuk.

ans=ans+1
ans =

     1

A "whos" parancs az is kiírja, hogy a változóink mekkorák, és milyen pontossággal vannak (belül a Matlabban) ábrázolva.

whos
  Name          Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  ans       1x1                 8  double              
  b         1x1                 8  double              


c=5.6
c =

    5.6000

Egy valós számnak az alakját a format paranccsal változtathatjuk

format long
c
c =

   5.600000000000000

Itt csak a kiírás alakjét változtatjuk (nem a belső ábrázolásét).

Ha rámegyünk egy parancsra akkor F1-el segítséget kérhetünk róla. Vagy lefuttatjuk a 'doc parancsnév' parancsot akkor ugyazez töténik.

doc format

Ha a terminálba akarunk leírást kérni (mondjuk nincs grafikus felület a számítógépen) akkor a 'help parancsnév'-vel tehetjül ezt meg.

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


Az ':' operátor

A 'a:b' operátorral felsoroljuk az összes elemet 1 lépésközzel az 'a' és 'b' elem közt pl:

v=1:10
v =

     1     2     3     4     5     6     7     8     9    10

Az 'a:c:b' ugyanezt csinálja 'c' lépésközzel

v2=1:2:10
v2 =

     1     3     5     7     9

A kifejezést nem zavarja ha nem egész számról kezdünk

0.5:13
ans =

  Columns 1 through 3

   0.500000000000000   1.500000000000000   2.500000000000000

  Columns 4 through 6

   3.500000000000000   4.500000000000000   5.500000000000000

  Columns 7 through 9

   6.500000000000000   7.500000000000000   8.500000000000000

  Columns 10 through 12

   9.500000000000000  10.500000000000000  11.500000000000000

  Column 13

  12.500000000000000

Ha zavar minket, hogy a valós számokat tűl hosszan ábrázolja, akkor kiírathatjuk őket rövidebben is

format short
ans
ans =

  Columns 1 through 7

    0.5000    1.5000    2.5000    3.5000    4.5000    5.5000    6.5000

  Columns 8 through 13

    7.5000    8.5000    9.5000   10.5000   11.5000   12.5000

Látjuk hogy az 'ans' itt már nem 1x1-es

whos
  Name          Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  ans       1x13              104  double              
  b         1x1                 8  double              
  c         1x1                 8  double              
  v         1x10               80  double              
  v2        1x5                40  double        

x1=1:2:13
x1 =

     1     3     5     7     9    11    13

Ez a felsorolás tulajdonképpen egy vektor. A Matlab negyon szereti a vektorokat. A vektor elemeire zárójellel hivatkozhatunk, pl x(1) az első elem

x1(1)
x1(3)
ans =

     1


ans =

     5

Ha olyan elemet kérdezünk ami még nincs, akkor hibát kapunk

x1(10)
Index exceeds the number of array elements (7).

Ha olyan elemét definiáljuk a vektorrnak ami "túlnyúl" a vektor elemein akkor a nem definiélt elemk 0-ék lesznek.

x1(10)=7
x1 =

     1     3     5     7     9    11    13     0     0     7

A ' jellel lehet a vektort transzponálni

x2=x1'
x2 =

     1
     3
     5
     7
     9
    11
    13
     0
     0
     7

Ha elütünk valamit a program próbál segítni

y=Linspace(1,3,7)
Cannot find an exact (case-sensitive) match for 'Linspace'

The closest match is: linspace in /home/local/MATLAB/R2019a/toolbox/matlab/elmat/linspace.m

A linspace(a,b,c) arra használatos, hogy készítsen egy vektort aminek elemei 'a' és 'b' között vannak egyenletes felosztással és 'c' dimenziós (vagyis 'c' elemből áll)

y=linspace(1,3,7)
y =

    1.0000    1.3333    1.6667    2.0000    2.3333    2.6667    3.0000

Vektort úgy adunk meg hogy elemeit, szögeltes zárójelben, egymás után írjuk és köztük SPACET hagyunk, vagy vesszőt írnuk.

x2=[1 3 1]
x2 =

     1     3     1

Az x2-t transzponálhatjuk és elrkhatjuk az x2-be. Így mér oszlopvektor

x2=x2'
x2 =

     1
     3
     1

Ugyanígy oszlopvektort kapunk ha az elemek közé ;-t írunk

x2=[1; 3; 1]
x2 =

     1
     3
     1

Mátrixot úgy kapunk hogy sovektorokat oszlopvektorba írunk

x2=[1 3; 3 4; 1 5]
x2 =

     1     3
     3     4
     1     5

Beépített függvények

A lenght() függvény a vektor hosszát adja meg.

length(x1)
ans =

    10

Tényleg, hiszen x1 értéke

x1
x1 =

     1     3     5     7     9    11    13     0     0     7

volt. Ezzel a függvénnyel pl. lecsippenthetjük 'x1' vektor végét.

x1=x1(1:length(x1)-1)
x1 =

     1     3     5     7     9    11    13     0     0

Itt a jobboldalon hivatkozok az 'x'-re az első elemétől az utolső előtti eleméig. Vagy ha az elejéből és a végéből is le akarok csippenteni akkor

x1=x1(2:length(x1)-1)
x1 =

     3     5     7     9    11    13     0

Az 'x1' mérete nem egyenlő a hosszával

size(x1)
ans =

     1     7

A vektornak nincs nullasik eleme 1-el kezdődik. x1(0)

A Mátrixok mérete Sor X Oszlop. Az 'x1' vektor is egy olyan mátrixnak van kezelve aminek egy sora van.

size(x2)
ans =

     3     2

Tényleg:

x2
x2 =

     1     3
     3     4
     1     5

Ha vektorokkal végzünk műveleteket például megszorozzuk őket konstanssal akkor az vektor műveletnek veszi (minden elemét megszorozza).

x1*5
ans =

    15    25    35    45    55    65     0

Ha szorozni szeretnénk vektorokat egymással akkor azt mátrix műveletnek veszi

x1*x1
Error using *
Incorrect dimensions for matrix multiplication. Check that the number of columns in the first matrix matches the number of rows in the second matrix. To perform elementwise multiplication, use '.*'.
x1*x1'
ans =

   454

Így már kompatibilisek a dimenziók. A '.' azt jelenti hogy az utána jövő műveletet elemenkánt hatjuk végre.

x1.*x1
ans =

     9    25    49    81   121   169     0

Így 'x1' minden elemét négyzetre emeltük

Fordítva szorozva a transzponálttal diádot kapun

x1'*x1
ans =

     9    15    21    27    33    39     0
    15    25    35    45    55    65     0
    21    35    49    63    77    91     0
    27    45    63    81    99   117     0
    33    55    77    99   121   143     0
    39    65    91   117   143   169     0
     0     0     0     0     0     0     0

x1+x1
ans =

     6    10    14    18    22    26     0

Ha egy művelet elemenként van értelmeze akkor nem llehet '.'-al használni

%x1.+x1

Logikai műveleteket is végrehajthatunk

0 & 1
ans =

  logical

   0

2 & 1
ans =

  logical

   1

A min() függvény megadja a vektor legkisebb elemét

min(x1)
ans =

     0

Tényleg.

x1
x1 =

     3     5     7     9    11    13     0

De ha úgy hívjuk meg hogy

[minertek, minhely]=min(x1)
minertek =

     0


minhely =

     7

Akkor nem csak a legkisebb értéket, hanem a vektor legkisebb elemének idexét is visszadja. Az ilyen függvényeket polimorfnak nevezzük.

A kimenetet elnyomhatjuk a dor végén egy ;-vel.

[minertek, minhely]=min(x1);
[minertek, minhely]=min(v2);
minhely
minhely =

     1

De az értékadás megtörtént.

Saját függvények

Készíthetünk saját függvényeket is. Pédául készíthetünk egy utolsoElem függvényt ami a vektor utolsó elemét adja meg. Egy újszkriptfájba elkészítjük a függvényt

type('utolsoElem.m')
function kimenet=utolsoElem(be)
    kimenet=be(length(be));
end

Ezt a szriptfájlt aztán 'függvénynév'.m néven -most utolsoElem.m néven- metsük el.

utolsoElem(v2)
ans =

     9

Tényleg ez az utolsó eleme.

v2
v2 =

     1     3     5     7     9

Definiálhatunk több kimenetű függvényeket is.

type('OsszegSzorzat.m')
function [osszeg, szorzat]=OsszegSzorzat(be1,be2)
    osszeg=be1+be2;
    szorzat=be1.*be2;
end
[a1,a2]=OsszegSzorzat(v,v)
a1 =

     2     4     6     8    10    12    14    16    18    20


a2 =

     1     4     9    16    25    36    49    64    81   100

Ha nem adunk meg két kimeneti változót akkor csak az elsőnek ad értéket,

OsszegSzorzat(v,v)
ans =

     2     4     6     8    10    12    14    16    18    20

Házi feladatok

Adjunk függvényt ami egy bemeneti vektorhoz kiadja a minimumát maximumát és összegét

function kimenet=tulajd(v)
    kimenet=[min(v),max(v),sum(v)];
end

Adjunk meg olyan függvényt melynek bemenete két darab pozitív valósakból álló sorvektor, melyek rendre egy derékszögû háromszög két befogójának hosszát tartalmazzák. A kimenet legyen egy olyan sorvektor, amely rendre az első befogók meletti szögeket adja meg. (Bónusz: adjuk meg a szögeket fokban, nem radiánban)

function kimenet=szogek(be1,be2)
    kimenet=atand(be2./be1);
end

Adjunk meg egy olyan függvényt aminek bemenete két ugyanolyan hosszú logikai vektor, kimenete pedig egy olyan sorvektor ami rendre a logikai értékek 'és'-ét tratalmazza (tehát kimenet(1)=bemenet1(1)& bemenet2(1), stb.) Bónusz készítsünk a bemenetekből és a kimenetből egy mátrixot ami tulajdonképpen egy logikai tábla.

function kimenettabla=logikaitabla(be1,be2)
    kimenettabla=[be1; be2; be1 & be2];
end