Do výpočtu vektora najčastejšie vstupuje iný vektor (môže byť taktiež vypočítaný), alebo zoznam (pole) vektorov. Počet vektorov vstupujúcich do výpočtu nie je umelo obmedzený, avšak čím viac vektorov je potrebné spracovať, tým viac stúpa časová a pamäťová náročnosť výpočtu.
Pri načítaní hodnôt a zoznamov vektorov sú rozlišované dva typy funkcií. Prvý typ sprístupňuje obsah entít cez ich meno a druhý vracia načítaný obsah do lokálnej premennej príslušného typu. Odporúča sa použiť druhý typ - načítanie obsahu do lokálnej premennej.
- Sprístupnenie obsahu:
- Načítanie do lokálnej premennej:
Nasledovný príklad načítava hodnoty vektora Vector.Src v rovnakom časovom rozsahu, ako je načítavaný výsledný vypočítaný vektor s rovnakým krokom ako má výsledný vypočítaný vektor.
VECTOR _v; -- Hodnoty budú prístupné cez identifikátor Vector.Src %LoadVector(Vector.Src, _BT, _ET, _STEP); -- Hodnoty budú prístupné cez premennú _v _v := %LoadVectorData("Vector.Src", _BT, _ET, _STEP);
Načítanie vektora s parametrami
Do výpočtu vypočítaného vektora je možné voliteľne podsunúť parametre. Počet parametrov odovzdaných do výpočtu vektora je možné získať funkciou %GetParamsNr. Parameter je identifikovaný svojim indexom. Hodnotu kontrétneho parametra je možné priradiť do lokálnej premennej funkciou %GetParamValue. Ak hodnota parametra nie je kompatibilná s typom lokálnej premennej, do ktorej je priraďovaná, je generovaná chyba.
REAL _value; VECTOR _v; IF %GetParamsNr() > 0 THEN -- Priradí hodnotu parametra na indexe 1 do premennej _value %GetParamValue(1, _value); END IF; %CreateVectorInit(_v, _value, _BT, _ET, _STEP); RETURN _v;
Načíta vektor Vector.Calc s podsunutím hodnoty prvého parametra 2,5.
%LoadVektorWithParams(Vector.Calc, _BT, _ET, _STEP, 2.5); RETURN Vector.Calc;
Pre zvýšenie prehľadnosti kódu a zjednodušenie práce s parametrami je odporúčané použitie pomenovaných parametrov.
Načítanie vektora s pomenovanými parametrami
Ide o načítanie vektora, ktorý má jasne menom definované parametre. Hodnoty sú týmto parametrom automaticky pridelené pri načítaní vektora. Nezadané parametre budú obsahovať neplatnú hodnotu. Nasledovný príklad pozostáva z dvoch vektorov. Vektor, ktorý spracováva výpočet s parametrami (Vector.Calc) a vektor, ktorý načítava vektor Vector.Calc a odovzdáva mu hodnoty parametrov (Vector.Result).
Nasledujúci predpis zobrazuje vektor Vector.Calc, ktorý má definovaný pomenovaný parameter _value typu reálne číslo (1).
PARAM REAL _value; -- (1) VECTOR _v; %CreateVectorInit(_v, _value, _BT, _ET, _STEP); RETURN _v;
Vektor Vector.Result už len volá načítanie vektora Vector.Calc, ktorému odovzdá hodnotu parametra _value (1). Ako hodnotu parametra je možné zadať akýkoľvek výraz, ktorého výsledný typ je kompatibilný s typom parametra.
VECTOR _v; v := %LoadVectorData("Vector.Calc", _BT, _ET, _STEP, , , _value => 2.5); -- (1) RETURN _v;
Načítanie zoznamu vektorov
Načítanie zoznamu vektorov je zvyčajne realizované načítaním scenára vektorov (%LoadScenario, %LoadScenarioData) alebo skupiny vektorov (%LoadGroup, %LoadGroupData). Je však možné načítať aj ľubovolný zoznam vektorov na základe SQL príkazu (%LoadFilter, %LoadFilterSimple). Ak do výpočtu vstupujú aj hodnoty vektorov z načítaného zoznamu, je potrebné ich načítať/sprístupniť.
INT _i, _nr; VECTOR _v; %CreateVector(_v, _BT, _ET, _STEP); %LoadScenario(Scenario.Test, 1); _nr := %ValuesNr(Scenario.Test); IF _nr > 0 THEN -- Sprístupní hodnoty vektorov v zozname FOR _i = 1 TO _nr LOOP %LoadVector(Scenario.Test[_i], _BT, _ET, _STEP); END LOOP; -- Vypočíta súčet hodnôt na rovnakých indexoch _v := %Sum(Scenario.Test); END IF;
Štruktúra VECTORS môže okrem EDA vektorov obsahovať aj odkazy na lokálne vektory (premenné typu VECTOR). V prípade odovzdania takejto štruktúry do iného vypočítaného vektora, budú hodnoty zdrojového lokálneho vektora dostupné na modifikáciu aj vo vnorenom vypočítanom vektore, pričom zmena hodnôt sa prejaví v každej úrovni vnorenia. Nasledovný predpis predstavuje jednoduchý príklad použitia odkazov na lokálne vektory v poli vektorov.
VECTOR _v1, _v2; VECTORS _w; INT _i, _j; %CreateVector(_v1, 5); %CreateVector(_v2, 10); -- Do poľa vektorov pridá lokálne vektory _v1 a _v2 _w := _w + _v1 + _v2; -- Modifikuje hodnoty lokálnych vektorov nepriamo cez zoznam vektorov FOR _i = 1 TO %ValuesNr(_w) LOOP FOR _j = 1 TO %ValuesNr(_w[_i]) LOOP _w[_i][_j] := _i + _j; END LOOP; END LOOP;
Súvisiace stránky: