вставка частичное присвоение или модификация значения переменной
присвоение частичное присвоение значения переменной

## Синтаксис

                x(i,j)=a
                x(i)=a
                l(i)=a
                l(k1)...(kn)(i)=a или l(list(k1,...,kn,i))=a
                l(k1)...(kn)(i,j)=a или l(list(k1,...,kn,list(i,j))=a

## Аргументы

x

  матрица любого типа (constant, sparse, polynomial,...)

l

  list

i,j

  индексы

k1,...kn

  индексы с целочисленными значениями

a

  новое значение элемента

## Описание

В СЛУЧАЕ МАТРИЦЫ

  Если `x` является матрицей, то индексы `i` и `j` могут быть:

  вещественными скалярами или векторами или матрицами

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

    - Если `a` является матрицей с размерами `(size(i,'*'),size(j,'*'))`, то `x(i,j)=a` возвращает новую матрицу `x` такую, как `x(int(i(l)),int(j(k)))=a(l,k)` для `l` от 1 до `size(i,'*')` и `k` от 1 до `size(j,'*')`, другие изначальные элементы `x` остаются неизменными.

    - Если `a` является скаляром, то `x(i,j)=a` возвращает новую матрицу `x` такую, как `x(int(i(l)),int(j(k)))=a` для `l` от 1 до `size(i,'*')` и `k` от 1 до `size(j,'*')`, другие изначальные элементы `x` остаются неизменными.

    - Если максимальное значение `i` или `j` превосходит соответствующие размеры матрицы `x`, то массив `x` сначала расширяется до требуемых размеров нулевыми элементами для стандартных матриц, символьными строками нулевой длины для строковых матриц и значениями "ложь" для матриц логических значений.

    - `x(i,j)=[]` удаляет строки, определённые через `i`, если `j` совпадает со всеми столбцами `x` или удаляет столбцы, определённые через `j`, если `i` совпадает со всеми строками `x`. В других случаях `x(i,j)=[]` формирует ошибку.

    - `x(i)=a`, где `a` -- вектор, возвращает новую матрицу `x`, такую что `x(int(i(l)))=a(l)` для `l` от 1 до `size(i,'*')`, другие изначальные элементы `x` являются неизменными.

    - `x(i)=a`, где `a` -- скаляр, возвращает новую матрицу `x`, такую что `x(int(i(l)))=a` для `l` от 1 до `size(i,'*')`, другие изначальные элементы `x` являются неизменными.

      Если максимальное значение `i` превосходит `size(x,1)`, то `x` сначала расширяется до требуемого размера нулевыми элементами для стандартных матриц, символьными строками нулевой длины для строковых матриц и значениями "ложь" для матриц логических значений.

      если

        `x` является скаляром (1x1)

        матрица `a` может быть вектор-строкой (соответственно вектор-столбцом) размером `size(i,'*')`. Результирующая матрица `x` является вектором-строкой (соответственно вектор-столбцом);

      если

        `x` является вектор-строкой

        вектор `a` должен быть вектор-строкой размером `size(i,'*')`;

      если

        `x` является вектор-столбцом

        вектор `a` должен быть вектор-столбцом размером `size(i,'*')`;

      если

        `x` в общем виде

        матрица `a` должна быть вектор-строкой или вектор-столбцом размером `size(i,'*')` и максимальное значение `i` не может превосходить `size(x,'*')`.

    - `x(i)=[]` удаляет элементы, определённые через `i`.

  символом "двоеточие"

    Символ двоеточие `:` означает "все элементы".

    - `x(i,:)=a` интерпретируется как `x(i,1:size(x,2))=a`

    - `x(:,j)=a` интерпретируется как `x(1:size(x,1),j)=a`

    - `x(:)=a` возвращает в `x` матрицу `a`, элементы которой переставлены в соответсвии с размерами `x`. Размер `size(x,'*')` должен быть равен размеру `size(a,'*')`.

  векторами логических значений

    Если индекс (`i` или `j`) задан в виде вектора логических значений, то он интерпретируется как `find(i)` или, соответственно, `find(j)`.

  полиномами

    Если индекс (`i` или `j`) задан в виде полиномов или в виде неявного вектора полиномов, то он интерпретируется как `horner(i,m)` или, соответственно, `horner(j,n)`, где `m` и `n` связаны с размерами `x`. Даже если это работает для всех полиномов, рекомендуется использовать символ `$` для удобочитаемости.

В СЛУЧАЕ СПИСКА (LIST) ИЛИ ТИПИЗИРОВАННОГО СПИСКА (TLIST)

  - If they are present the `ki` give the path to a sub-list entry of `l` data structure. They allow a recursive insertion without intermediate copies. The `l(k1)...(kn)(i)=a` and `l(list(k1,...,kn,i)=a)` instructions are interpreted as:

    `lk1 = l(k1)`

    `.. = ..`

    `lkn = lkn-1(kn)`

    `lkn(i) = a`

    `lkn-1(kn) = lkn`

    `.. = ..`

    `l(k1) = lk1`

    А инструкции `l(k1)...(kn)(i,j)=a` и `l(list(k1,...,kn,list(i,j))=a` интерпретируется как:

    `lk1 = l(k1)`

    `.. = ..`

    `lkn = lkn-1(kn)`

    `lkn(i,j) = a`

    `lkn-1(kn) = lkn`

    `.. = ..`

    `l(k1)= lk1`

  - `i` может быть:

    - вещественным неотрицательным скаляром. `l(0)=a` добавляет элемент к списку "слева". `l(i)=a` присваивает элементу `i` списка `l` значение `a`. Если `i>size(l)`, то `l` сначала расширяется элементами нулевой длины (неопределённые). `l(i)=null()` удаляет `i`-тый элемент из списка.

    - полиномом. Если `i` является полиномом, то он интерпретируется как `horner(i,m)`, где `m=size(l)`. Даже если это работает для всех полиномов, рекомендуется использовать символ `$` для удобочитаемости.

  - `k1,..kn` могут быть:

    - вещественным положительным скаляром;

    - полиномом, интерпретируемым как `horner(ki,m)`, где `m` является соответствующим размером подсписка;

    - символьной строкой, связанной с именем элемента подсписка.

## Примечания

Для программно формируемых типов матриц, таких, как рациональные функции и линейные системы пространства состояний, синтаксис `x(i)` нельзя использовать для вставки элементов вектора из-за путаницы со вставкой элемента списка. Должен использоваться синтаксис `x(1,j)` или `x(i,1)` .

## Примеры

    // В СЛУЧАЕ МАТРИЦЫ
    a=[1 2 3;4 5 6]
    a(1,2)=10
    a([1 1],2)=[-1;-2]
    a(:,1)=[8;5]
    a(1,3:-1:1)=[77 44 99]
    a(1)=%s
    a(6)=%s+1
    a(:)=1:6
    a([%t %f],1)=33
    a(1:2,$-1)=[2;4]
    a($:-1:1,1)=[8;7]
    a($)=123
    //
    x='test'
    x([4 5])=['4','5']
    //
    b=[1/%s,(%s+1)/(%s-1)]
    b(1,1)=0
    b(1,$)=b(1,$)+1
    b(2)=[1 2] // числитель

    // в случае LIST или TLIST
    l=list(1,'qwerw',%s)
    l(1)='Changed'
    l(0)='Added'
    l(6)=['one more';'added']
    //
    //
    dts=list(1,tlist(['x';'a';'b'],10,[2 3]));
    dts(2).a=33
    dts(2)('b')(1,2)=-100

## Смотрите также

- find
- horner
- круглые скобки
- выделение