Indexová notace - Index notation
v matematika a programování, indexová notace se používá k určení prvků pole čísel. Formalismus způsobu používání indexů se liší podle subjektu. Zejména existují různé metody odkazování na prvky seznamu, vektoru nebo matice, v závislosti na tom, zda někdo píše formální matematický dokument pro publikaci, nebo když píše počítačový program.
V matematice
V matematice je často užitečné odkazovat na prvky pole pomocí dolních indexů. Dolní indexy mohou být celá čísla nebo proměnné. Pole má formu tenzory obecně, protože s nimi lze zacházet jako s vícerozměrnými poli. Zvláštní (a známější) případy jsou vektory (1d pole) a matice (2D pole).
Následuje pouze úvod do konceptu: indexová notace se v matematice používá podrobněji (zejména při reprezentaci a manipulaci tenzorové operace ). Další podrobnosti najdete v hlavním článku.
Jednorozměrná pole (vektory)
Vektor považovaný za pole čísel zápisem jako a řádek vektor nebo vektor sloupce (podle toho, co se použije, závisí na pohodlí nebo kontextu):
Indexová notace umožňuje indikaci prvků pole jednoduchým zápisem Ai, kde je index i je známo, že běží od 1 do n, kvůli n-rozměrům.[1]Například vzhledem k vektoru:
pak jsou některé položky
- .
Zápis lze použít na vektory v matematice a fyzice. Následující vektorová rovnice
lze také psát z hlediska prvků vektoru (neboli komponent), tj
kde indexy nabývají daného rozsahu hodnot. Tento výraz představuje sadu rovnic, jednu pro každý index. Pokud mají vektory každý n prvky, význam i = 1,2...n, pak jsou rovnice výslovně
Proto indexová notace slouží jako efektivní zkratka pro
- představující obecnou strukturu rovnici,
- pokud je použitelný pro jednotlivé komponenty.
Dvourozměrná pole

Více než jeden index se používá k popisu polí čísel ve dvou nebo více dimenzích, jako jsou prvky matice, (viz také obrázek vpravo);
Zadání matice A je psán pomocí dvou indexů, řekněme i a j, s čárkami nebo bez nich k oddělení indexů: Aij nebo Ajá, j, kde první dolní index je číslo řádku a druhý je číslo sloupce. Juxtapozice je také používán jako notace pro násobení; to může být zdrojem záměny. Například pokud
pak jsou některé položky
- .
U indexů větších než 9 může být notace založená na čárkách lepší (např. A3,12 namísto A312).
Maticové rovnice jsou psány podobně jako vektorové rovnice, jako např
pokud jde o prvky matic (aka komponenty)
pro všechny hodnoty i a j. Tento výraz opět představuje sadu rovnic, jednu pro každý index. Pokud každá matice má m řádky a n sloupce, význam i = 1, 2, …, m a j = 1, 2, …, n, pak existují mn rovnice.
Vícerozměrná pole
Zápis umožňuje jasné zobecnění na vícerozměrná pole prvků: tenzory. Například,
představující množinu mnoha rovnic.
V tenzorové analýze se horní indexy používají místo dolních indexů k rozlišení kovariantů od kontrariantních entit, viz kovariance a kontravariance vektorů a zvyšování a snižování indexů.
Ve výpočetní technice
V několika programovacích jazycích je indexová notace způsob adresování prvků pole. Tato metoda se používá, protože je nejblíže tomu, jak je implementována v montážní jazyk přičemž adresa prvního prvku se používá jako základna a násobek (index) velikosti prvku se používá k adresování uvnitř pole.
Například pokud je pole celých čísel uloženo v oblasti paměti počítače, počínaje paměťovou buňkou s adresou 3000 ( základní adresa ) a každé celé číslo zabírá čtyři buňky (bajty), pak jsou prvky tohoto pole na paměťových místech 0x3000, 0x3004, 0x3008,…, 0x3000 + 4 (n - 1) (všimněte si číslování založené na nule ). Obecně platí, že adresa ith prvek pole s základní adresa b a velikost prvku s je b + je.
Podrobnosti implementace
V Programovací jazyk C., můžeme výše napsat jako * (základna + i)
(ukazatel) nebo základna [i]
(formulář indexování pole), což je přesně ekvivalentní, protože standard C definuje formulář indexování pole jako transformaci do formy ukazatele. Shodou okolností, protože přidání ukazatele je komutativní, umožňuje to nejasné výrazy, jako je 3 [základna]
což odpovídá základna [3]
.[2]
Vícedimenzionální pole
Věci se stanou zajímavějšími, když vezmeme v úvahu pole s více než jedním indexem, například dvourozměrnou tabulku. Máme tři možnosti:
- udělejte dvourozměrné pole jednorozměrné výpočtem jediného indexu ze dvou
- zvažte jednorozměrné pole, kde každý prvek je jiné jednorozměrné pole, tj. pole polí
- použijte další úložiště k uložení pole adres každého řádku původního pole a řádky původního pole uložte jako samostatná jednorozměrná pole
V jazyce C lze použít všechny tři metody. Když se použije první metoda, programátor rozhodne, jak jsou prvky pole rozloženy v paměti počítače, a poskytne vzorce pro výpočet umístění každého prvku. Druhá metoda se používá, když je počet prvků v každém řádku stejný a známý v době psaní programu. Programátor deklaruje, že pole má, řekněme, tři sloupce tak, že napíše elementtype tablename [] [3];
. Jeden pak odkazuje na konkrétní prvek pole zápisem tablename [první index] [druhý index]
. Kompilátor vypočítá celkový počet paměťových buněk obsazených každým řádkem, použije první index k vyhledání adresy požadovaného řádku a poté použije druhý index k vyhledání adresy požadovaného prvku v řádku. Když se použije třetí metoda, programátor deklaruje tabulku jako pole ukazatelů, jako v elementtype * tablename [];
. Když programátor následně určí konkrétní prvek tablename [první index] [druhý index]
, kompilátor generuje pokyny k vyhledání adresy řádku zadaného prvním indexem a při výpočtu adresy prvku určeného druhým indexem použije tuto adresu jako základ.
Příklad
Tato funkce násobí dvě matice s plovoucí desetinnou čárkou 3x3 dohromady.
prázdnota mult3x3f(plovák výsledek[][3], konst plovák A[][3], konst plovák B[][3]) { int i, j, k; pro (i = 0; i < 3; ++i) { pro (j = 0; j < 3; ++j) { výsledek[i][j] = 0; pro (k = 0; k < 3; ++k) výsledek[i][j] += A[i][k] * B[k][j]; } } }
V jiných jazycích
V jiných programovacích jazycích, jako je Pascal, mohou indexy začínat na 1, takže indexování v bloku paměti lze změnit tak, aby odpovídalo schématu adresování start-at-1 jednoduchou lineární transformací - v tomto schématu je umístění paměti ith prvek s základní adresa b a velikost prvku s je b + (i − 1)s.
Reference
- Programování v C ++J. Hubbard, Schaum's Outlines, McGraw Hill (USA), 1996, ISBN 0-07-114328-9
- Tenzorový počet, D.C. Kay, Schaum's Outlines, McGraw Hill (USA), 1988, ISBN 0-07-033484-6
- Matematické metody pro fyziku a inženýrství, K.F. Riley, M.P. Hobson, S.J. Bence, Cambridge University Press, 2010, ISBN 978-0-521-86153-3