3. Matlab – dátové typy
01. Máj, 2009, Autor článku: Blaho Michal, MATLAB/Comsol
Ročník 2, číslo 5
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.
18. Apríl, 2010 o 1:34
mohol by si to doplnit o ‘ubit4′ ? Alebo vysvetlit prikaz
A = fread(B,C,’ubit4′); Dakujem
18. Apríl, 2010 o 7:45
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
18. Apríl, 2010 o 18:15
cize tento prikaz: A = fread(B,C,’ubit4′) nacita premennu C zo subora B a ulozi do premennej A na 4 bity ???
18. Apríl, 2010 o 18:35
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,
18. Apríl, 2010 o 20:31
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.
18. Apríl, 2010 o 20:44
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
20. Apríl, 2010 o 18:28
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
20. Apríl, 2010 o 18:44
toto je uz mimo clanku, treba to dat na matlab.sk, za par dni tieto prispevky zmazem
20. Apríl, 2010 o 19:53
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
20. Apríl, 2010 o 20:05
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
20. Apríl, 2010 o 20:32
Dakujem Vam. Pomohli ste mi