|
|
Hlavní stránka
Přehled kapitol
1. Krátké představení Octave
2. Práce s programem
3. Datové typy
4. Číselné datové typy
5. Řetězce
6. Datové struktury
7. Datové kontejnery
8. Proměnné
9. Výrazy
9.1 Indexové výrazy
9.2 Volání funkcí
Volání hodnotou
Rekurze
9.3 Aritmetické operace
9.4 Relační operace
9.5 Logické výrazy
Log. op. prvek-za-prvkem
Zkratové logické operátory
9.6 Přiřazovací výrazy
9.7 Přírustkové výrazy
9.8 Priorita operátorů
10. Vyhodnocení
11. Příkazy
12. Funkce a skriptovací
soubory
13. Vstup a výstup
14. Vykreslování
15. Práce s maticemi
16. Aritmetika
17. Lineární algebra
18. Nelineární rovnice
19. Kvadratura
20. Diferenciální rovnice
21. Práce s polynomy
22. Teorie řízení
|
|
9.1 Indexové výrazy
Indexové výrazy vám dovolují odkazovat nebo rozbalovat vybrané prvky
matice nebo vektoru.
Ukazatelem mohou být skaláry, vektory, rozsah nebo speciální operátory ":",
které mohou být použity k výběru konkrétního řádku nebo sloupce.
Vektory jsou indexovány použitím jednoduchého výrazu. Matice mohou být
indexovány pomocí jednoho nebo dvou ukazatelů.
Je dána matice:
a = [1, 2; 3, 4]
a všechny tyto následující výrazy jsou rovny jejímu zápisu:
a (1, [1, 2])
a (1, 1:2)
a (1, :)
Indexování skaláru vektorem jedniček může být použito k vytvoření vektoru
stejné velikosti jako je indexový vektor, s každým prvkem rovným hodnotě
originálního skaláru. Například následující tvrzení:
a = 13;
a ([1, 1, 1, 1])
vytvoří vektor, jehož čtyři prvky jsou všechny rovny 13.
Podobně, indexací skaláru se dvěma vektory jedniček můžeme vytvořit matici.
Například následující tvrzení:
a = 13;
a ([1, 1], [1, 1, 1])
vytvoří matici 2x3 se všemi prvky rovnými 13.
Tento zápis je ale nevhodný k používání a měli byste se mu vyhnout. Je mnohem
jednodušší pomocí příkazu ones vytvořit matici požadované velikosti se všemi
prvky rovnými jedné a pak ji jen rozšířit na požadovaný výsledek.
Poznamenejme, že je celkem neefektivní vytvářet vektory pomocí smyčky, jak
je uvedeno v příkladu výše. V tomto případě by bylo lepší použít výrazu:
a = sqrt (1:10);
což cyklus kompletně vynechá. V případech, kde je cyklus stále vyžadován
nebo počet hodnot musí být kombinován aby vytvořil větší matici je v podstatě
mnohem rychlejší nastavit prvně velikost matice a potom vložit prvky pomocí
indexových příkazů. Například daná matice a:
[nr, nc] = size (a);
x = zeros (nr, n * nc);
for i = 1:n
x(:,(i-1)*nc+1:i*nc) = a;
endfor
Je podstatně rychlejší než:
x = a;
for i = 1:n-1
x = [x, a];
endfor
Zvláště pro velké matice protože Octave nemusí opakovaně měnit velikost
výsledku.
|
|