Обозначение индекса

редактировать
Способ ссылки на элементы массивов или тензоров

В математике и компьютерное программирование, индексная нотация используется для указания элементов массива чисел. Формализм использования индексов зависит от предмета. В частности, существуют разные методы для ссылки на элементы списка, вектора или матрицы, в зависимости от того, пишут ли вы формальную математическую статью для публикации или когда пишете компьютерную программу.

Содержание
  • 1 В математике
    • 1.1 Одномерные массивы (векторы)
    • 1.2 Двумерные массивы
    • 1.3 Многомерные массивы
  • 2 В вычислениях
  • 3 Детали реализации
    • 3.1 Многомерные массивы
    • 3.2 Пример
  • 4 На других языках
  • 5 Ссылки
  • 6 Внешние ссылки
В математике

В математике часто бывает полезно ссылаться на элементы массива с помощью индексов. Индексы могут быть целыми числами или переменными. В общем случае массив принимает форму тензоров, поскольку их можно рассматривать как многомерные массивы. Особыми (и более знакомыми) случаями являются векторы (1d массивы) и матрицы (2d массивы).

Следующее является лишь введением в понятие: индексная нотация используется более подробно в математике (в частности, при представлении тензорных операций и манипулировании ими). См. Основную статью для получения дополнительной информации.

Одномерные массивы (векторы)

Вектор, рассматриваемый как массив чисел путем записи в виде вектора-строки или вектора-столбца (в зависимости от того, что используется в зависимости от удобства или контекста):

a = (a 1 a 2 ⋮ an), a = (a 1 a 2 ⋯ an) {\ displaystyle \ mathbf {a} = {\ begin {pmatrix} a_ { 1} \\ a_ {2} \\\ vdots \\ a_ {n} \ end {pmatrix}}, \ quad \ mathbf {a} = {\ begin {pmatrix} a_ {1} a_ {2} \ cdots a_ {n} \\\ end {pmatrix}}}{\ displaystyle \ mathbf {a } = {\ begin {pmatrix} a_ {1} \\ a_ {2} \\\ vdots \\ a_ {n} \ end {pmatrix}}, \ quad \ mathbf {a} = {\ begin {pmatrix} a_ {1} a_ {2} \ cdots a_ {n} \\\ end {pmatrix}}}

Обозначение индекса позволяет указать элементы массива, просто написав i, где индекс i, как известно, проходит от 1 до n, из-за n-мерности. Например, для вектора:

a = (10 8 9 6 3 5) {\ displaystyle \ mathbf {a} = {\ begin {pmatrix} 10 8 9 6 3 5 \\\ end {pmatrix}}}{\ displaystyle \ mathbf {a} = {\ begin {pmatrix} 10 8 9 6 3 5 \\ \ end {pmatrix}}}

тогда некоторые записи:

a 1 = 10, a 2 = 8, ⋯, a 6 = 5 {\ displaystyle a_ {1} = 10, \, a_ {2} = 8, \, \ cdots, \, a_ {6 } = 5}{\ displaystyle a_ {1} = 10, \, a_ {2} = 8, \, \ cdots, \, a_ {6} = 5} .

Обозначение может применяться к векторам в математике и физике. Следующее векторное уравнение

a + b = c {\ displaystyle \ mathbf {a} + \ mathbf {b} = \ mathbf {c}}\ mathbf { a} + \ mathbf {b} = \ mathbf {c}

также может быть записано в терминах элементов вектор (он же компоненты), то есть

ai + bi = ci {\ displaystyle a_ {i} + b_ {i} = c_ {i}}a_i + b_i = c_i

, где индексы принимают заданный диапазон значений. Это выражение представляет собой набор уравнений, по одному для каждого индекса. Если каждый вектор имеет n элементов, то есть i = 1,2... n, то уравнения явно

a 1 + b 1 = c 1 a 2 + b 2 = c 2 ⋮ an + bn = cn { \ Displaystyle {\ begin {align} a_ {1} + b_ {1} = c_ {1} \\ a_ {2} + b_ {2} = c_ {2} \\ \ \ vdots \\ a_ {n} + b_ {n} = c_ {n} \ end {align}}}{\ displaystyle {\ begin {align} a_ {1 } + b_ {1} = c_ {1} \\ a_ {2} + b_ {2} = c_ {2} \\ \ \ \ vdots \\ a_ {n} + b_ {n} = c_ {п} \ конец {выровнено}}}

Следовательно, индексная нотация служит эффективным сокращением для

  1. , представляющего общую структуру уравнения,
  2. хотя и применимо к отдельным компонентам.

Двумерные массивы

Элементы матрицы A описываются двумя нижними индексами или индексами.

Для описания массивов чисел используется более одного индекса, в двух или более измерениях, таких как элементы матрицы (см. также изображение справа);

A = (a 11 a 12 ⋯ a 1 na 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ am 1 am 2 ⋯ amn) {\ displaystyle \ mathbf {A} = {\ begin {pmatrix} a_ {11 } a_ {12} \ cdots a_ {1n} \\ a_ {21} a_ {22} \ cdots a_ {2n} \\\ vdots \ vdots \ ddots \ vdots \\ a_ {m1} a_ { m2} \ cdots a_ {mn} \\\ end {pmatrix}}}{\ displaystyle \ mathbf {A} = {\ begin {pmatrix} a_ {11} a_ {12} \ cdots a_ {1n} \\ a_ {21} a_ {22} \ cdots a_ {2n} \\ \ vdots \ vdots \ ddots \ vdots \\ a_ {m1} a_ {m2} \ cdots a_ {mn} \\\ end {pmatrix}}}

Запись в матрице A записывается с использованием двух индексов, скажем i и j, с запятыми или без них для разделения индексы: a ij или a i, j, где первый нижний индекс - это номер строки, а второй - номер столбца. Сопоставление также используется для обозначения умножения; это может быть источником путаницы. Например, если

A = (9 8 6 1 2 7 4 9 2 6 0 5) {\ displaystyle \ mathbf {A} = {\ begin {pmatrix} 9 8 6 \\ 1 2 7 \\ 4 9 2 \\ 6 0 5 \ end {pmatrix}}}{\ displaystyle \ mathbf {A} = {\ begin {pmatrix} 9 8 6 \\ 1 2 7 \\ 4 9 2 \\ 6 0 5 \ end {pmatrix}}}

тогда некоторые записи:

a 11 = 9, a 12 = 8, a 21 = 1, ⋯, a 23 = 7, ⋯ {\ displaystyle a_ {11} = 9, \, a_ {12} = 8, \, a_ {21} = 1, \, \ cdots, \, a_ {23} = 7, \, \ cdots}{\ displaystyle a_ {11} = 9, \, a_ {12} = 8, \, a_ {21} = 1, \, \ cdots, \, a_ {23} = 7, \, \ cdots} .

Для индексов больше 9 в обозначении через запятую можно быть лучше (например, 3,12 вместо 312).

Матричные уравнения записываются аналогично векторным уравнениям, например

A + B = C {\ displaystyle \ mathbf {A} + \ mathbf {B} = \ mathbf {C}}\ mathbf {A} + \ mathbf {B} = \ mathbf {C}

в члены элементов матриц (также известные как компоненты)

A ij + B ij = C ij {\ displaystyle A_ {ij} + B_ {ij} = C_ {ij}}A_ {ij} + B_ {ij} = C_ {ij}

для всех значений i и j. Это выражение снова представляет собой набор уравнений, по одному для каждого индекса. Если каждая матрица имеет m строк и n столбцов, то есть i = 1, 2,…, m и j = 1, 2,…, n, то существует mn уравнений.

Многомерные массивы

Обозначение позволяет сделать четкое обобщение на многомерные массивы элементов: тензоры. Например,

A i 1 i 2 ⋯ + B i 1 i 2 ⋯ = C i 1 i 2 ⋯ {\ displaystyle A_ {i_ {1} i_ {2} \ cdots} + B_ {i_ {1} i_ {2} \ cdots} = C_ {i_ {1} i_ {2} \ cdots}}A_ {i_1 i_2 \ cdots} + B_ {i_1 i_2 \ cdots} = C_ {i_1 i_2 \ cdots}

, представляющий набор многих уравнений.

В тензорном анализе верхние индексы используются вместо нижних индексов, чтобы отличать ковариантные от контравариантных сущностей, см. ковариация и контравариантность векторов и повышения и понижения индексов.

в вычислениях

В некоторых языках программирования индексная нотация - это способ адресации элементов массива. Этот метод используется, поскольку он наиболее близок к тому, как он реализован на языке ассемблера, при этом адрес первого элемента используется в качестве основы, а кратное (индекс) размера элемента используется для адресации внутри массива.

Например, если массив целых чисел хранится в области памяти компьютера, начиная с ячейки памяти с адресом 3000 (базовый адрес ), и каждое целое число занимает четыре ячейки ( байтов), то элементы этого массива находятся в ячейках памяти 0x3000, 0x3004, 0x3008,…, 0x3000 + 4 (n - 1) (обратите внимание на нумерацию с нуля ). В общем случае адрес i-го элемента массива с базовым адресом b и размером элемента s равен b + is.

Подробности реализации

В языке программирования C мы можем записать вышеизложенное как * (base + i)(форма указателя) или base [i](форма индексации массива), что в точности эквивалентно, потому что стандарт C определяет форму индексации массива как преобразование в форму указателя. По совпадению, поскольку добавление указателей является коммутативным, это позволяет использовать непонятные выражения, такие как 3 [base], что эквивалентно base [3].

Многомерные массивы

Все становится лучше Интересно, когда мы рассматриваем массивы с более чем одним индексом, например, двумерную таблицу. У нас есть три возможности:

  • сделать двумерный массив одномерным путем вычисления единственного индекса из двух.
  • рассмотреть одномерный массив, где каждый элемент является другим одномерным массивом, то есть массивом массивов
  • использовать дополнительное хранилище для хранения массива адресов каждой строки исходного массива и хранить строки исходного массива как отдельные одномерные массивы

В C все три метода могут быть используемый. Когда используется первый метод, программист решает, как элементы массива располагаются в памяти компьютера, и предоставляет формулы для вычисления местоположения каждого элемента. Второй метод используется, когда количество элементов в каждой строке одинаково и известно на момент написания программы. Программист объявляет, что массив имеет, скажем, три столбца, написав, например, тип элемента имя таблицы [3];. Затем один обращается к конкретному элементу массива, записывая tablename [первый индекс] [второй индекс]. Компилятор вычисляет общее количество ячеек памяти, занимаемых каждой строкой, использует первый индекс, чтобы найти адрес нужной строки, а затем использует второй индекс, чтобы найти адрес желаемого элемента в строке. Когда используется третий метод, программист объявляет таблицу как массив указателей, как в elementtype * tablename;. Когда программист впоследствии указывает конкретный элемент tablename [первый индекс] [второй индекс], компилятор генерирует инструкции для поиска адреса строки, указанной первым индексом, и использования этого адреса в качестве основы, когда вычисление адреса элемента, указанного вторым индексом.

Пример

Эта функция умножает две матрицы 3x3 с плавающей запятой вместе.

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]; } } }
В других языках

В других языках программирования, таких как Pascal, индексы могут начинаться с 1, поэтому индексирование в блоке памяти может быть изменено, чтобы соответствовать началу по 1 схема адресации с помощью простого линейного преобразования - в этой схеме ячейка памяти i-го элемента с базовым адресом b и размером элемента s равна b + (i - 1) s.

Ссылки
  • Programming with C ++, J. Hubbard, Schaum's Outlines, McGraw Hill (США), 1996, ISBN 0-07-114328-9
  • Тензорное исчисление, округ Колумбия Kay, Schaum's Outlines, McGraw Hill (США), 1988, ISBN 0-07-033484-6
  • Математические методы для физики и инженерии, KF Riley, MP Hobson, SJ Бенс, Cambridge University Press, 2010, ISBN 978-0-521-86153-3
Внешние ссылки
Последняя правка сделана 2021-05-23 13:20:16
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте