3. Matlab – dátové typy

01. Máj, 2009, Autor článku: Blaho Michal, MATLAB/Comsol
Ročník 2, číslo 5 This page as PDF Pridať príspevok

Matlab reprezentuje dáta ako matice a vektory. Skôr ako začneme pracovať so samostatným maticami a vektormi je potrebné poznať aké základné dátové typy môžeme do matíc a vektorov ukladať. Matlab podporuje niekoľko dátových typov a niektoré z nich si dnes popíšeme.

Základné dátové typy Matlabu sú reprezentované triedami, ktorých je spolu 15. Každá trieda je vo forme matice alebo vektora, ktoré môžu byť rozmeru 0x0 alebo n-rozmerného vektora. Všetky základné dátové typy sú na nasledujúcom obrázku napísané malým rovným písmom. Premenné v Matlabe nemusíme deklarovať explicitne, deklarácia sa uskutoční pri prvom priradení do premennej. Dátový typ bude rovnaký ako je výraz na pravej strane.

Obr.1 Základné dátové typy

Užívatelia si môžu dodefinovať vlastné objektovo orientované dátové typy (na obrázku šikmým písmom). Dvojrozmerné matice typu double a logical môžeme uložiť vo dvoch formátoch full a sparse. Formát full uloží celu maticu a formát sparse šetrí miestom v maticiach kde sa vyskytuje veľa núl a v pamäti zaberá menej miesta. Samozrejme každý dátový typ zaberá rôznu veľkosť v pamäti, preto si treba dávať pozor pri operáciach s nimi (hlavne v súboroch).

Logický dátový typ (logical) reprezentuje logické hodnoty pravda (true) a nepravda (false) číslami 1 alebo 0. Premennú s logickým dátovým typom deklarujeme tak, že do nej priradíme kľúčové slová true alebo false.

a = true

Vytvoriť ju môžeme aj z číselného dátového typu príkazom logical. Logické dátové typy sa využívajú najmä pri relačných operáciach, ktoré sú v nasledujúcej tabuľke.

Operátor Popis
< menej ako
<= menej a rovné ako
> viac ako
>= viac alebo rovné ako
== je rovné
~= nie je rovné

Tab.1 Relačné operácie

S logickými premennými môžeme robiť logické operácie. V Matlabe sa logické operácie delia do troch skupín – elementové, bitové a skrátené. Elementové a skrátené sú popísané ďalšej tabuľke. Medzi bitové patria príkazy bitand, bitor, bitcmp a bitxor. Skrátené bitové operácie sa vykonávajú postupne. Pokračovať na ďalšiu časť výrazu sa môže ak to dovoľuje predchádzajúca časť.

Operátor Popis
& (funkcia and) vráti 1 ak sú oba elementy 1
| (funkcia or) vráti 1 ak je aspoň jeden element 1
~ (funkcia not) vráti opačnú hodnotu elementu
xor (funkcia xor) vráti 1 ak majú elementy opačné hodnoty
&& skráteny and
|| skráteny or

Tab.2 Logické operácie

Číselné triedy obsahujú dátové typy ako celé čísla a kladné celé čísla, čísla v pohyblivej radovej čiarke s jednoduchou a dvojnásobnou presnosťou. Matlab má štyri typy celých čísiel a štyri typy kladných celých čísel. Kladné celé čísla poskytujú širší rozsah čísel za cenu, že neobsahuj záporné čísla. Celočíselná premenná sa deklaruje nasledovne

b = int32(325)

Rozsah intervalov celočíselných typov je daný pamäťou, ktorú zaberajú. Všetky celočíselné typy sú uvedené v nasledujúcej tabuľke

Trieda Rozsah Typ
int8 -27 až 27-1 celé 8-bitové číslo
int16 -215 až 215-1 celé 16-bitové číslo
int32 -231 až 231-1 celé 32-bitové číslo
int64 -263 až 263-1 celé 64-bitové číslo
uint8 0 až 28-1 celé kladné 8-bitové číslo
uint16 0 až 216-1 celé kladné 16-bitové číslo
uint32 0 až 232-1 celé kladné 32-bitové číslo
uint64 0 až 264-1 celé kladné 64-bitové číslo

Tab.3 Rozsahy celých čísel Matlabu

Maximálne rozsahy celočíselných typov môžeme zistiť príkazom intmax a intmin. Pri vykonávaní aritmetickej operácie, ktorá presiahne rozsah typu Matlab nastaví maximálnu hodnotu rozsahu. Dátový typ double je 64-bitový podľa štandardu IEEE 754 pre dvojnásobnú presnosť a v Matlabe sa používa ako východzí dátový typ. Dátový typ single je 32-bitový podľa štandardu IEEE 754 pre jednoduchú presnosť, preto aj zaberá menej pamäte. Číslo s pohyblivou čiarkou definujeme nasledovne

c = 12.857

Maximálne rozsahy týchto dátových typov zistíme aj funkciami realmax a realmin. Špeciálny typ čísel sú čísla -inf, inf a NaN, ktoré reprezentujú mínus nekonečno, nekonečno a žiadne číslo (Not a Number). Tieto čísla vznikajú väčšinou pri delení nulou. S číselnými dátovými typmi môžeme vykonávať nasledujúce operácie

Operátor Popis Operátor Popis
+ sčítanie .^ mocnina
- odčítanie .’ transpozícia
.* násobenie komplexná konjunkcia
./ delenie sprava * maticové násobenie
.\ delenie zľava / maticové delenie sprava
+ unárny plus \ maticové delenie zľava
- unárny mínus ^ maticová mocnina
: operátor dvojbodky    

Tab.4 Číselné operácie

Znakové premenné v Matlabe sú celočíselné hodnoty konvertované na znaky Unicode. Reťazce znakov sú potom polia znakov. Ak by sme chceli reťazce ukladať do matíc musia mať rovnakú dĺžku, aby mali riadky matice rovnaký rozmer. Znakovú premennú vytvoríme zapísaním znaku medzi jednoduché apostrofy. Ak by sme chceli vytvoriť reťazec dlhší ako jeden znak, napíšeme medzi apostrofy všetky požadované znaky

Text = 'Matlab.sk'

Viac o znakových premenných a operáciach s nimi nájdete v budúcich článkoch. Dátovým typom, ktoré sme si dnes nespomenuli sa budeme venovať taktiež v nasledujúcich článkoch.

11 príspevky(ov) k článku “3. Matlab – dátové typy”

  1. Miro napísal:

    mohol by si to doplnit o ‘ubit4′ ? Alebo vysvetlit prikaz
    A = fread(B,C,’ubit4′); Dakujem

  2. Blaho Michal napísal:

    pokial viem, vsetky datove typy su nasobkami 8 bitov teda 1 bajtu, funkcia fread umoznuje citat zo subora aj po niekolko bitoch v dvoch tvaroch

    ‘bitN’ signed integer, N bits (1<=N<=64).
    'ubitN' unsigned integer, N bits (1<=N<=64).

    cize funkcia fread dokaze pracovat s takymto formatom, ale medzi zakladne datove typy matlabu sa neradia

  3. Miro napísal:

    cize tento prikaz: A = fread(B,C,’ubit4′) nacita premennu C zo subora B a ulozi do premennej A na 4 bity ???

  4. Blaho Michal napísal:

    C je podla manualu dlzka SIZE, nemusi sa pri tomto formate pouzivat, B je identifikator subora, A bude premenna v tomto pripade asi o velkosti unsigned integer, v ktorej je vysledok pravdepodovne ako najnizsie 4 bity,

  5. Miro napísal:

    da sa potom povedat, ze ’ubit4′ kontroluje velkost premennej A ? a v pamati matlabu bude reprezentovana 4-oma bitmi ?
    PS: Dakujem, ze odpovedas na moje prispevky. Este raz dakujem.

  6. Blaho Michal napísal:

    nekontroluje ale urcuje, v matlabe bude reprezentovana datovym typom matlabu, kedze maximum je 64 bitov predpokladam ze to bude uint64, ale pre kratsie hodnoty to mozu byt aj kratsie typy uint, treba to odskusat

    inac otazky radsej na http://www.matlab.sk

  7. Miro napísal:

    Ahoj, pomohol by si mi este rozlustit, co sa deje v nasledujucich skriptoch. Budem velmi povdacny. Dakujem za predosle reakcie-pomohlo to. mail: socko20@azet.sk

    data = sprintf(‘ubit%i’, 5);
    fwrite(info, premenna, data);
    fwrite(info, premenna1, ‘ubit4′);
    for i=1:25
    subor = find((floor(urob([1:N/2],N/2,Fs))+1)==i);
    data = sprintf(‘ubit%i’, premenna1,(i));
    if ((premenna1,(i) ~= 0) & (premenna1,(i) ~= 1))
    fwrite(info, Data(subor(1):subor(end)) ,data);
    end
    end

  8. Blaho Michal napísal:

    toto je uz mimo clanku, treba to dat na matlab.sk, za par dni tieto prispevky zmazem

  9. Miro napísal:

    ja viem, ale tam som nenasiel take forum, co sa tomu venuje
    ak mi vies helpnut, bol by som velmi rad a uz ta nebudem otravovat

  10. Blaho Michal napísal:

    vsetko staci do hlavneho fora, v data bude text ubit5 zapise sa premenna a premenna 1 do suboru, neviem co robi funkcia urob, potom v data bude retazec ubit s nejakym cislom za tym zase neviem co je premenna1 a pokial nebude ta premenna1 0 alebo 1 zapisu sa data do suboru, tazko sa to lusti, ked neviete co to robi treba dat prec bodkociarku na konci a vypise vam to do command linu matlabu, alebo help prikaz a postudovat co ten prikaz robi

  11. Miro napísal:

    Dakujem Vam. Pomohli ste mi

Napísať príspevok