матрица

Создайте матрицу или вектор

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Для матриц в MATLAB® см. Матрицы и Массивы (MATLAB).

Синтаксис

matrix(Array)
matrix(List)
matrix(ListOfRows)
matrix(Matrix)
matrix(m, n)
matrix(m, n, Array)
matrix(m, n, List)
matrix(m, n, ListOfRows)
matrix(m, n, Table)
matrix(m, n, [(i1, j1) = value1, (i2, j2) = value2, …])
matrix(m, n, f)
matrix(m, n, List, Diagonal)
matrix(m, n, g, Diagonal)
matrix(m, n, List, Banded)
matrix(1, n, [j1 = value1, j2 = value2, …])
matrix(m, 1, [i1 = value1, i2 = value2, …])

Описание

matrix(m, n, [[a11, a12, ...], [a21, a22, ...], ...]) возвращает m ×n матрица доменного типа Dom::Matrix().

matrix(m, n, [a11, a12, ..., a21, a22, ..., a.m.n]) возвращает m ×n матрица доменного типа Dom::Matrix().

matrix(m, 1, [a1, a2, ...]) возвращает m ×1 вектор-столбец доменного типа Dom::Matrix().

matrix(1, n, [a1, a2, ...]) возвращает 1 ×n вектор - строку из доменного типа Dom::Matrix().

matrix эквивалентен Dom::Matrix().

matrix создает матрицы и векторы. Вектор-столбец представлен как m ×1 матрица. Вектор - строка представлен как n матрица.

Матричные и векторные компоненты должны быть арифметическими выражениями (числа и/или символьные выражения). Если матрицы по специальным звонкам компонента желаемы, используйте доменного конструктора Dom::Matrix с подходящим звонком компонента.

Арифметические операции с матрицами могут быть выполнены при помощи стандартных арифметических операторов MuPAD®.

Например, если A и B являются двумя матрицами, заданными matrix, то A + B вычисляет сумму, и A * B вычисляет продукт этих двух матриц, при условии, что размерности являются соответствующими.

Точно так же A^(-1) или 1/A вычисляют инверсию квадратной матрицы A, если это может быть инвертировано. В противном случае FAIL возвращен.

Cf. Пример 1.

Много системных функций принимают матрицы как вход, такие как map, subs, has, zip, conjugate, norm или exp. Cf. Пример 4.

Большинство функций в пакете линейной алгебры MuPAD linalg работает с матрицами. Например, команда linalg::gaussJordan(A) выполняет Исключение по Гауссу-Жордану на A, чтобы преобразовать A к его приведенному ступенчатому по строкам виду матрицы.

Для числовых матричных вычислений соответствующие функции пакета numeric принимают матрицы.

Матричные компоненты могут быть извлечены обычным индексным оператором [ ], который также работает на списки, массивы и таблицы. Вызов A[i, j] извлекает матричный компонент в i-th строка и j-th столбец.

Присвоения на матричные компоненты выполняются так же. Вызов A[i, j] := c заменяет матричный компонент в i-th строка и j-th столбец A c.

Если один из индексов не находится в его допустимой области значений, сообщение об ошибке выпущено.

Индексный оператор также извлекает подматрицы. Вызов A[r1..r2, c1..c2] создает субматрицу A, включающего строки с индексами r 1, r 1 + 1, …, r 2 и столбцы с индексами c 1, c 1 + 1, …, c 2 из A.

Смотрите пример 3 и пример 5.

matrix(Array) или matrix(Matrix) создают новую матрицу с той же размерностью и компонентами Array или Matrix, соответственно. Массив не должен содержать неинициализированные записи. Если Array одномерен, результатом является вектор-столбец. Cf. Пример 8.

matrix(List) создает m ×1 вектор-столбец с компонентами, взятыми из непустого списка, где m является количеством записей List. Cf. Пример 5.

matrix(ListOfRows) создает m ×n матрица с компонентами, взятыми из вложенного списка ListOfRows, где m является количеством внутренних списков ListOfRows, и n является максимальным числом элементов внутреннего списка. Каждый внутренний список соответствует строке матрицы. И m и n должны быть ненулевыми.

Если строка имеет меньше, чем записи n, остающиеся записи в соответствующей строке матрицы рассматриваются как нуль. Cf. Пример 7.

Вызов matrix(m, n) возвращает m ×n нулевая матрица.

matrix(m, n, Array) вызова создает m ×n матрица с компонентами, взятыми из Array, который должен быть массивом или hfarray. Array должен иметь mn операнды. Первые операнды m задают первую строку, следующие операнды m задают вторую строку и т.д. Форматирование массива не важно. Например, любой массив с 6 элементами может использоваться, чтобы создать матрицы размерности 1 ×6, или 2×3, или 3×2, или 6 ×1.

matrix(m, n, List) создает m ×n матрица с компонентами взятая строка после строки из непустого списка. Список должен содержать mn записи. Cf. Пример 7.

matrix(m, n, ListOfRows) создает m ×n матрица с компонентами, взятыми из списка ListOfRows.

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

Если строка имеет меньше, чем записи n, остающиеся компоненты соответствующей строки матрицы рассматриваются как нуль. Если существуют меньше, чем строки m, остающиеся более низкие строки матрицы заполнены, обнуляет. Cf. Пример 7.

matrix(m,n,Table) создает m ×n матрица с компонентами, взятыми из таблицы Table. Записи таблицы Table[i,j] с положительными целочисленными значениями i и j задают соответствующие записи матрицы. Нулевые записи не должны быть заданы в таблице. Таким образом, разреженный табличный вход может использоваться, чтобы создать матрицу.

Для больших разреженных матриц самым быстрым способом создания является генерация пустой таблицы, которая заполнена индексируемыми присвоениями и затем передала matrix. Также можно сначала создать пустую разреженную матрицу через matrix(m, n) и затем заполнить ненулевые записи через индексируемые присвоения. Обратите внимание на то, что индексируемое присвоение на матрицу несколько медленнее, чем индексируемое присвоение на таблицу.

matrix(m, n, [(i1, j1) = value1, (i2, j2) = value2, ...]) является дальнейшим способом создать матрицу, задающую только ненулевые записи A[i1, j1] = value1, A[i2, j2] = value2 и т.д. Упорядоченное расположение записей в списке входов не важно.

matrix(m, n, f) возвращает матрицу, чья (i, j)-th компонент возвращаемое значение вызова функции f(i,j). Индекс строки i запускается от 1 до m и индекса столбца j от 1 до n. Cf. Пример 9.

matrix(m, 1, Array) возвращает m ×1 вектор-столбец с компонентами, взятыми из Array. array или hfarray Array должны иметь записи m.

matrix(m, 1, List) возвращает m ×1 вектор-столбец с компонентами, взятыми из List. Список List должен иметь не больше, чем записи m. Если существует меньше записей, остающиеся векторные компоненты рассматриваются как нуль. Cf. Пример 5.

matrix(m, 1, Table) возвращает m ×1 вектор-столбец с компонентами, взятыми из Table. Таблица Table должна иметь не больше, чем записи m. Если существует меньше записей, остающиеся векторные компоненты рассматриваются как нуль. Cf. Пример 6.

matrix(m, 1, [i1 = value1, i2 = value2, ...]) обеспечивает способ создать разреженный вектор-столбец, задающий только ненулевые записи A[i1] = value1, A[i2] = value2 и т.д. Упорядоченное расположение записей в списке входов не важно.

matrix(1, n, Array) возвращает 1 ×n вектор - строку с компонентами, взятыми из Array. array или hfarray Array должны иметь записи n.

matrix(1, n, List) возвращает 1 ×n вектор - строку с компонентами, взятыми из List. Список List не должен иметь больше, чем записи n. Если существует меньше записей, остающиеся векторные компоненты рассматриваются как нуль. Cf. Пример 5.

matrix(1, n, Table) возвращает 1 ×n вектор - строку с компонентами, взятыми из Table. Таблица Table не должна иметь больше, чем записи n. Если существует меньше записей, остающиеся векторные компоненты рассматриваются как нуль. Cf. Пример 6.

matrix(1, n, [j1 = value1, j2 = value2, ...]) обеспечивает способ создать разреженный вектор - строку, задающий только ненулевые записи A[j1] = value1, A[j2] = value2 и т.д. Упорядоченное расположение записей в списке входов не важно.

Примечание

Количество строк и столбцов, соответственно, матрицы должно быть меньше чем 231.

Примечание

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

Примеры

Пример 1

Мы создаем 2×2 матрица путем передачи списка двух строк к matrix, где каждая строка является списком двух элементов:

A := matrix([[1, 5], [2, 3]])

Таким же образом мы генерируем следующие 2 ×3 матрицы:

B := matrix([[-1, 5/2, 3], [1/3, 0, 2/5]])

Мы можем сделать матричную арифметику с помощью стандартных арифметических операторов MuPAD. Например, матричным произведением AB, четвертая степень A и скалярное умножение A дают:

A * B, A^4, 1/3 * A

Начиная с размерностей матриц отличаются A и B, сумма A и B не задана, и MuPAD возвращает сообщение об ошибке:

A + B
Error: Dimensions do not match. [(Dom::Matrix(Dom::ExpressionField()))::_plus]

Вычислить инверсию A, введите:

1/A

Если матрица не является обратимой, результатом этой операции является FAIL:

C := matrix([[2, 0], [0, 0]])

C^(-1)

delete A, B, C:

Пример 2

В дополнение к стандартной матричной арифметике библиотека linalg предлагает многочисленные функции, обрабатывающие матрицы. Например, функциональный linalg::rank определяет ранг матрицы:

A := matrix([[1, 5], [2, 3]])

linalg::rank(A)

Функциональный linalg::eigenvectors вычисляет собственные значения и собственные вектора A:

linalg::eigenvectors(A)

Чтобы определить размерность матрицы, используйте функциональный linalg::matdim:

linalg::matdim(A)

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

Используйте info(linalg), чтобы получить список доступных функций или ввести ?linalg для получения дополнительной информации об этой библиотеке.

delete A:

Пример 3

К матричным записям можно получить доступ с индексным оператором [ ]:

A := matrix([[1, 2, 3, 4], [2, 0, 4, 1], [-1, 0, 5, 2]])

A[2, 1] * A[1, 2] - A[3, 1] * A[1, 3]

Можно переопределить матричную запись путем присвоения значения ему:

A[1, 2] := a^2: A

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

A[2..3, 1..3]

Индексный оператор не позволяет заменять субматрицу данной матрицы другой матрицей. Используйте linalg::substitute, чтобы достигнуть этого.

delete A:

Пример 4

Некоторые системные функции могут быть применены к матрицам. Например, если вы имеете матрицу с символьными записями и хотите иметь все записи в расширенной форме, просто применить функциональный expand:

delete a, b: 
A := matrix([
  [(a - b)^2, a^2 + b^2], 
  [a^2 + b^2, (a - b)*(a + b)]
])

expand(A)

Можно дифференцировать все матричные компоненты относительно некоторых неопределенных:

diff(A, a)

Следующая команда оценивает все матричные компоненты в данной точке:

subs(A, a = 1, b = -1)

Обратите внимание на то, что функциональный subs не оценивает результат замены. Например, мы задаем следующую матрицу:

A := matrix([[sin(x), x], [x, cos(x)]])

Затем мы заменяем x = 0 в каждом матричном компоненте:

B := subs(A, x = 0)

Вы видите, что матричные компоненты не оценены полностью. Например, если вы вводите sin(0) непосредственно, он оценивает, чтобы обнулить.

Функциональный eval может использоваться, чтобы оценить результат функционального subs. Однако eval не работает с матрицами непосредственно, и необходимо использовать функциональный map, чтобы применить функциональный eval к каждому матричному компоненту:

map(B, eval)

Функциональный zip может быть применен к матрицам. Следующий вызов комбинирует две матрицы A и B путем деления каждого компонента A соответствующим компонентом B:

A := matrix([[4, 2], [9, 3]]): 
B := matrix([[2, 1], [3, -1]]):
A, B, zip(A, B, `/`)

delete A, B:

Пример 5

Вектором является любой m ×1 матрица (вектор-столбец) или n матрица (вектор - строка). Чтобы создать вектор с matrix, передайте размерность вектора и список векторных компонентов в качестве аргумента к matrix:

row_vector := matrix(1, 3, [1, 2, 3]); 
column_vector := matrix(3, 1, [1, 2, 3])

Если единственный аргумент matrix является невложенным списком или одномерным массивом, результатом является вектор-столбец:

matrix([1, 2, 3])

Для вектора - строки r вызовы r[1, i] и r[i] оба возвращают i-th векторный компонент r. Точно так же для вектор-столбца c, вызовы c[i, 1] и c[i] оба возвращают i-th векторный компонент c.

Мы извлекаем второй компонент векторов, заданных выше:

row_vector[2] = row_vector[1, 2],
column_vector[2] = column_vector[2, 1]

Используйте функциональный linalg::vecdim, чтобы определить количество компонентов вектора:

linalg::vecdim(row_vector), linalg::vecdim(column_vector)

Количество компонентов вектора может также быть определено непосредственно вызовом nops(vector).

Размерность вектора может быть определена, как описано выше в случае матриц:

linalg::matdim(row_vector),
linalg::matdim(column_vector)

Смотрите linalg пакет для функций, работающих с векторами и страницей справки norm для вычислительных векторных норм.

delete row_vector, column_vector:

Пример 6

Вектором является любой m ×1 матрица (вектор-столбец) или n матрица (вектор - строка). Чтобы создать вектор с matrix, можно также передать размерность вектора и таблицу векторных компонентов в качестве аргумента к matrix:

delete v1, v2, t1, t2:
t1 := table():
t1[1,1] := 1:
t1[1,2] := 2:
t1[1,3] := 3:
v1 := matrix(1, 3, t1);

t2 := table():
t2[1,1] := 1:
t2[2,1] := 2:
t2[3,1] := 3:
v2 := matrix(3, 1, t2);

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

delete t1, t2, v1, v2:

Пример 7

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

matrix([[1, 2], [2]])

Количество строк созданной матрицы является количеством внутренних списков, а именно, m = 2. Количество столбцов определяется максимальным количеством записей внутреннего списка. В примере выше, первый список является самым длинным, и следовательно n = 2. Второй список имеет только один элемент и, поэтому, вторая запись во второй строке возвращенной матрицы была обнулена.

В следующем вызове мы используем тот же вложенный список, но кроме того передаем два параметра размерности, чтобы создать 4×4 матрица:

matrix(4, 4, [[1, 2], [2]])

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

Если размерность, m ×n матрицы утверждается явным образом, записи, может также быть задана простым списком с mn элементы. Матрица заполнена этими элементами строка строкой:

matrix(2, 3, [1, 2, 3, 4, 5, 6])

matrix(3, 2, [1, 2, 3, 4, 5, 6])

Пример 8

Один - или двумерный массив арифметических выражений, таких как:

a := array(1..3, 2..4, 
  [[1, 1/3, 0], [-2, 3/5, 1/2], [-3/2, 0, -1]] 
)

может быть преобразован в матрицу можно следующим образом:

A := matrix(a)

Подача массивов, например, как эффективный структурированный тип данных для программирования. Однако массивы не имеют никакого алгебраического значения, и никакие математические операции не заданы для них. Если вы преобразовываете массив в матрицу, можно использовать полную функциональность, заданную для матриц, как описано выше. Например, давайте вычислим матрицу 2 A - A 2 и норма Фробениуса A:

2*A - A^2, norm(A, Frobenius)

Обратите внимание на то, что массив может содержать неинициализированные записи:

b := array(1..4): b[1] := 2: b[4] := 0: b

matrix не может обработать массивы, которые имеют неинициализированные записи, и отвечает сообщением об ошибке:

matrix(b)
Error: Unable to define a matrix over 'Dom::ExpressionField()'. [(Dom::Matrix(Dom::ExpressionField()))::new]

Мы инициализируем остающиеся записи массива b и преобразовываем его в матрицу, или более точно, в вектор-столбец:

b[2] := 0: b[3] := -1: matrix(b)

delete a, A, b:

Пример 9

Мы показываем, как создать матрицу, компоненты которой заданы функцией строки и индекса столбца. Запись в i-th строка и j-th столбец Гильбертовой матрицы (см. также linalg::hilbert). Таким образом следующая команда создает 2×2 Гильбертова матрица:

matrix(2, 2, (i, j) -> 1/(i + j - 1))

Следующие два вызова приводят к различным результатам. В первом вызове x рассматривается как неизвестная функция, в то время как это - константа во втором вызове:

delete x:
matrix(2, 2, x), matrix(2, 2, (i, j) -> x)

Пример 10

Диагональные матрицы могут быть созданы путем передачи опции Diagonal и список диагональных элементов:

matrix(3, 4, [1, 2, 3], Diagonal)

Можно сгенерировать 3×3 единичная матрица можно следующим образом:

matrix::identity(3)

Вот альтернативные способы создать эту матрицу:

matrix(3, 3, [1 $ 3], Diagonal)

Эквивалентно, можно использовать функцию одного аргумента:

matrix(3, 3, i -> 1, Diagonal)

Поскольку целочисленный 1 также представляет постоянную функцию, следующий более короткий вызов создает ту же матрицу:

matrix(3, 3, 1, Diagonal)

Чтобы продемонстрировать использование таблиц для создания (разреженных) матриц, мы можем также создать единичную матрицу выше строками:

t := table(): t[1, 1] := 1: t[2, 2] := 1: t[3, 3] := 1:
matrix(3, 3, t)

delete t:

Пример 11

Полосные матрицы Теплица могут быть созданы с опцией Banded. Следующая команда создает трехдиагональную матрицу с постоянными полосами:

matrix(4, 4, [-1, 2, -1], Banded)

Пример 12

Матрицы могут также быть созданы при помощи table:

t := table():
t[1, 2] := 12:
t[3, 1] := 31:
t[3, 2] := 32:
t

Недостающие записи таблицы соответствуют пустым матричным записям:

A := matrix(4, 6, t)

При помощи таблиц можно легко создать большие (разреженные) матрицы, не будучи обеспеченным, чтобы задать все нулевые записи матрицы. Обратите внимание на то, что это - большое преимущество перед использованием массивов, где каждый компонент должен быть инициализирован прежде.

delete t, A:

Пример 13

Метод "doprint" Dom::Matrix() распечатывает только ненулевые компоненты разреженной матрицы:

A := matrix(4, 6):
A[1, 2]:= 12: A[3, 1]:= 31: A[3, 2]:= 32:
print(A::dom::doprint(A)):

delete A:

Параметры

Array

Один - или двумерный массив или hfarray

List

Список арифметических выражений

ListOfRows

Вложенный список строк, каждая строка, являющаяся списком арифметических выражений

Matrix

Матрица, т.е. объект типа данных категории Cat::Matrix

Table

Таблица матричных компонентов

m

Количество строк: положительное целое число

n

Количество столбцов: положительное целое число

f

Функция или функциональное выражение двух аргументов

g

Функция или функциональное выражение одного аргумента

i1, i2, …

Индексы строки: целые числа между 1 и m

j1, j2, …

Индексы столбца: целые числа между 1 и m

value1, value2, …

Матричные записи: арифметические выражения

Опции

Diagonal

Создайте диагональную матрицу

При использовании этой опции диагональные матрицы могут быть созданы с диагональными элементами, взятыми из списка, или вычислили функцией или функциональным выражением.

matrix(m, n, List, Diagonal) создает m ×n диагональная матрица, диагональные элементы которой являются записями List. Cf. Пример 10.

List должен иметь не больше, чем min (m, n) записи. Если это имеет меньше элементов, остающиеся диагональные элементы рассматриваются как нуль.

matrix(m, n, g, Diagonal) возвращает разреженную матрицу, i которой-th диагональный элемент является g(i, i), куда индекс i запускается от 1 до min (m, n). Cf. Пример 10.

Banded

Создайте полосную матрицу Теплица

Ленточная матрица имеет нулевые записи вне основной диагонали и некоторые смежные под - и супердиагоналей.

matrix(m, n, List, Banded) создает m ×n, соединил матрицу Теплица с элементами List как записи. Количество записей List должно быть нечетным, сказать 2 h + 1, где h не должен превышать n. Пропускная способность получившейся матрицы в большей части h.

Все элементы основной диагонали созданной матрицы инициализируются со средним элементом List. Все элементы i-th поддиагональ инициализируются с (h + 1 - i)-th элемент List. Все элементы i-th супердиагональ инициализируются с (h + 1 + i)-th элемент List. Все записи на остающемся под - и супердиагонали рассматриваются как нуль.

Cf. Пример 11.

Возвращаемые значения

Матрица доменного типа Dom::Matrix().