Index-Notation - Index notation

In der Mathematik und Computerprogrammierung wird die Indexnotation verwendet, um die Elemente eines Arrays von Zahlen anzugeben. Der Formalismus, wie Indizes verwendet werden, variiert je nach Thema. Insbesondere gibt es unterschiedliche Methoden, auf die Elemente einer Liste, eines Vektors oder einer Matrix zu verweisen, je nachdem, ob man eine formale mathematische Arbeit zur Veröffentlichung schreibt oder ein Computerprogramm schreibt .

In Mathematik

In der Mathematik ist es häufig hilfreich, mit Indizes auf die Elemente eines Arrays zu verweisen. Die Indizes können ganze Zahlen oder Variablen sein . Das Array hat im Allgemeinen die Form von Tensoren , da diese als mehrdimensionale Arrays behandelt werden können. Spezielle (und bekanntere) Fälle sind Vektoren (1d-Arrays) und Matrizen (2d-Arrays).

Das Folgende ist nur eine Einführung in das Konzept: Die Indexnotation wird in der Mathematik (insbesondere bei der Darstellung und Manipulation von Tensoroperationen ) näher verwendet . Weitere Informationen finden Sie im Hauptartikel.

Eindimensionale Arrays (Vektoren)

Ein Vektor, der als Array von Zahlen behandelt wird, indem er als Zeilenvektor oder Spaltenvektor geschrieben wird (je nachdem, welcher verwendet wird, hängt von der Zweckmäßigkeit oder dem Kontext ab):

Die Indexnotation ermöglicht die Anzeige der Elemente des Arrays durch einfaches Schreiben von a i , wobei der Index i aufgrund von n-Dimensionen bekanntermaßen von 1 bis n läuft . Zum Beispiel gegeben der Vektor:

dann sind einige Einträge

.

Die Notation kann auf Vektoren in Mathematik und Physik angewendet werden . Die folgende Vektorgleichung

kann auch in Bezug auf die Elemente des Vektors (auch bekannt als Komponenten) geschrieben werden, d

wobei die Indizes einen bestimmten Wertebereich annehmen. Dieser Ausdruck stellt einen Satz von Gleichungen dar, eine für jeden Index. Wenn die Vektoren jeweils n Elemente haben, also i = 1,2,… n , dann lauten die Gleichungen explizit

Daher dient die Indexnotation als effiziente Abkürzung für

  1. die allgemeine Struktur einer Gleichung darstellen,
  2. während auf einzelne Komponenten anwendbar.

Zweidimensionale Arrays

Elemente der Matrix A werden mit zwei Indizes oder Indizes beschrieben.

Mehr als ein Index wird verwendet, um Arrays von Zahlen in zwei oder mehr Dimensionen zu beschreiben, wie beispielsweise die Elemente einer Matrix (siehe auch Abbildung rechts);

Der Eintrag einer Matrix A wird mit zwei Indizes geschrieben, sagen wir i und j , mit oder ohne Kommas, um die Indizes zu trennen: a ij oder a i,j , wobei der erste Index die Zeilennummer und der zweite die Spaltennummer ist. Nebeneinanderstellung wird auch als Notation für die Multiplikation verwendet; dies kann eine Quelle der Verwirrung sein. Zum Beispiel, wenn

dann sind einige Einträge

.

Für Indizes größer als 9 kann die kommabasierte Notation vorzuziehen sein (z. B. a 3,12 statt a 312 ).

Matrixgleichungen werden ähnlich wie Vektorgleichungen geschrieben, wie z

in Bezug auf die Elemente der Matrizen (auch bekannt als Komponenten)

für alle Werte von i und j . Auch dieser Ausdruck repräsentiert eine Reihe von Gleichungen, eine für jeden Index. Wenn die Matrizen jeweils m Zeilen und n Spalten haben, also i = 1, 2, …, m und j = 1, 2, …, n , dann gibt es mn Gleichungen.

Mehrdimensionale Arrays

Die Notation erlaubt eine klare Verallgemeinerung auf mehrdimensionale Arrays von Elementen: Tensoren. Zum Beispiel,

einen Satz von vielen Gleichungen darstellen.

In der Tensoranalyse werden hochgestellte Zeichen anstelle von tiefgestellten Zeichen verwendet, um kovariante von kontravarianten Entitäten zu unterscheiden, siehe Kovarianz und Kontravarianz von Vektoren und Erhöhen und Verringern von Indizes .

Im Computerbereich

In mehreren Programmiersprachen ist die Indexnotation eine Möglichkeit, Elemente eines Arrays zu adressieren. Diese Methode wird verwendet, da sie der Implementierung in Assemblersprache am nächsten kommt, wobei die Adresse des ersten Elements als Basis verwendet wird und ein Vielfaches (der Index) der Elementgröße verwendet wird, um innerhalb des Arrays zu adressieren.

Wenn beispielsweise ein Array von ganzen Zahlen in einem Bereich des Computerspeichers ab der Speicherzelle mit der Adresse 3000 (der Basisadresse ) gespeichert ist und jede ganze Zahl vier Zellen (Bytes) belegt, dann befinden sich die Elemente dieses Arrays im Speicher Positionen 0x3000, 0x3004, 0x3008, …, 0x3000 + 4( n − 1) (beachten Sie die nullbasierte Nummerierung ). Im Allgemeinen ist die Adresse des i - ten Element eines Arrays mit Basisadresse B und die Elementgröße s ist b + ist .

Implementierungsdetails

In der Programmiersprache C können wir das Obige als *(base + i)(Zeigerform) oder base[i](Array-Indizierungsform) schreiben , was genau äquivalent ist, da der C-Standard die Array-Indizierungsform als Transformation in eine Zeigerform definiert. Da die Zeigeraddition kommutativ ist, ermöglicht dies zufälligerweise obskure Ausdrücke wie 3[base]die äquivalent zu base[3].

Mehrdimensionale Arrays

Die Dinge werden interessanter, wenn wir Arrays mit mehr als einem Index betrachten, zum Beispiel eine zweidimensionale Tabelle. Wir haben drei Möglichkeiten:

  • Machen Sie das zweidimensionale Array eindimensional, indem Sie einen einzelnen Index aus den beiden berechnen
  • Betrachten Sie ein eindimensionales Array, bei dem jedes Element ein weiteres eindimensionales Array ist, dh ein Array von Arrays
  • Verwenden Sie zusätzlichen Speicher, um das Array von Adressen jeder Zeile des ursprünglichen Arrays zu speichern, und speichern Sie die Zeilen des ursprünglichen Arrays als separate eindimensionale Arrays

In C können alle drei Methoden verwendet werden. Wenn die erste Methode verwendet wird, entscheidet der Programmierer, wie die Elemente des Arrays im Speicher des Computers angeordnet werden, und stellt die Formeln bereit, um die Position jedes Elements zu berechnen. Die zweite Methode wird verwendet, wenn die Anzahl der Elemente in jeder Zeile gleich und zum Zeitpunkt des Schreibens des Programms bekannt ist. Der Programmierer deklariert das Array so, dass es beispielsweise drei Spalten hat, indem er zB schreibt elementtype tablename[][3];. Man verweist dann durch Schreiben auf ein bestimmtes Element des Arrays tablename[first index][second index]. Der Compiler berechnet die Gesamtzahl der von jeder Zeile belegten Speicherzellen, verwendet den ersten Index, um die Adresse der gewünschten Zeile zu finden, und verwendet dann den zweiten Index, um die Adresse des gewünschten Elements in der Zeile zu finden. Wenn die dritte Methode verwendet wird, deklariert der Programmierer die Tabelle als ein Array von Zeigern, wie in elementtype *tablename[];. Wenn der Programmierer anschließend ein bestimmtes Element spezifiziert tablename[first index][second index], erzeugt der Compiler Anweisungen, um die Adresse der durch den ersten Index spezifizierten Zeile nachzuschlagen und diese Adresse als Basis beim Berechnen der Adresse des durch den zweiten Index spezifizierten Elements zu verwenden.

Beispiel

Diese Funktion multipliziert zwei 3×3-Gleitkommamatrizen miteinander.

 void mult3x3f(float result[][3], const float A[][3], const float B[][3])
 {
   int i, j, k;
   for (i = 0; i < 3; ++i) {
     for (j = 0; j < 3; ++j) {
       result[i][j] = 0;
       for (k = 0; k < 3; ++k)
         result[i][j] += A[i][k] * B[k][j];
     }
   }
 }

In anderen Sprachen

In anderen Programmiersprachen wie Pascal können Indizes bei 1 beginnen, sodass die Indizierung in einem Speicherblock durch eine einfache lineare Transformation an ein Start-bei-1-Adressierungsschema angepasst werden kann – in diesem Schema ist der Speicherort des i Element mit Basisadresse b und Elementgröße s ist b + ( i − 1) s .

Verweise

  • Programmierung mit C++ , J. Hubbard, Schaum's Outlines, McGraw Hill (USA), 1996, ISBN  0-07-114328-9
  • Tensorrechnung , DC Kay, Schaums Umrisse, McGraw Hill (USA), 1988, ISBN  0-07-033484-6
  • Mathematische Methoden für Physik und Ingenieurwissenschaften , KF Riley, MP Hobson, SJ Bence, Cambridge University Press, 2010, ISBN  978-0-521-86153-3