Создайте матрицу или вектор
Блокноты 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 матрица. Вектор-строка представлен как 1×n матрица.
Матричные и векторные компоненты должны быть арифметическими выражениями (числа и/или символьные выражения). Если матрицы по специальным звонкам компонента желаемы, используйте доменного конструктора Dom::Matrix с подходящим звонком компонента.
Арифметические операции с матрицами могут быть выполнены при помощи стандартных арифметических операторов MuPAD®.
Например, если A и B две матрицы, заданные matrix, затем A + B вычисляет сумму и A * B вычисляет продукт этих двух матриц, при условии, что размерности являются соответствующими.
Точно так же A^(-1) или 1/A вычисляет инверсию квадратной матрицы A если это может быть инвертировано. В противном случае, FAIL возвращен.
См. пример 1.
Много системных функций принимают матрицы как вход, такие как map, subs, haszip, conjugateнорма или exp. См. пример 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.
matrix(Array) или matrix(Matrix) создайте новую матрицу с той же размерностью и компонентами Array или Matrix, соответственно. Массив не должен содержать неинициализированные записи. Если Array одномерно, результатом является вектор-столбец. См. Пример 8.
matrix(List) создает m ×1 вектор-столбец с компонентами, взятыми из непустого списка, где m является количеством записей List. См. пример 5.
matrix(ListOfRows) создает m ×n матрица с компонентами, взятыми из вложенного списка ListOfRows, где m является количеством внутренних списков ListOfRows, и n является максимальным числом элементов внутреннего списка. Каждый внутренний список соответствует строке матрицы. И m и n должны быть ненулевыми.
Если строка имеет меньше, чем записи n, остающиеся записи в соответствующей строке матрицы рассматриваются как нуль. См. Пример 7.
Вызов matrix(m, n) возвращает m ×n нулевая матрица.
Вызов matrix(m, n, Array) создает m ×n матрица с компонентами, взятыми из Array, который должен быть массивом или hfarray. Array должен иметь m n операнды. Первые операнды m задают первую строку, следующие операнды m задают вторую строку и т.д. Форматирование массива не важно. Например, любой массив с 6 элементами может использоваться, чтобы создать матрицы размерности 1 ×6, или 2×3, или 3×2, или 6 ×1.
matrix(m, n, List) создает m ×n матрица с компонентами взятая строка после строки из непустого списка. Список должен содержать m n записи. См. Пример 7.
matrix(m, n, ListOfRows) создает m ×n матрица с компонентами, взятыми из списка ListOfRows.
Если m ≥ 2 и n ≥ 2, то ListOfRows должен состоять из в большей части m внутренние списки, каждый имеющий в большей части n записи. Внутренние списки соответствуют строкам возвращенной матрицы.
Если строка имеет меньше, чем n записи, остающиеся компоненты соответствующей строки матрицы рассматриваются как нуль. Если там меньше m строки, остающиеся более низкие строки матрицы заполнены, обнуляет. См. Пример 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. См. Пример 9.
matrix(m, 1, Array) возвращает m ×1 вектор-столбец с компонентами, взятыми из Array. array или hfarray Array должен иметь m записи.
matrix(m, 1, List) возвращает m ×1 вектор-столбец с компонентами, взятыми из List. Список List должен иметь не больше, чем m записи. Если существует меньше записей, остающиеся векторные компоненты рассматриваются как нуль. См. Пример 5.
matrix(m, 1, Table) возвращает m ×1 вектор-столбец с компонентами, взятыми из Table. Таблица Table должен иметь не больше, чем m записи. Если существует меньше записей, остающиеся векторные компоненты рассматриваются как нуль. См. Пример 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 записи. Если существует меньше записей, остающиеся векторные компоненты рассматриваются как нуль. См. Пример 5.
matrix(1, n, Table) возвращает 1 ×n вектор-строку с компонентами, взятыми из Table. Таблица Table не должен иметь больше, чем n записи. Если существует меньше записей, остающиеся векторные компоненты рассматриваются как нуль. См. Пример 6.
matrix(1, n, [j1 = value1, j2 = value2, ...]) обеспечивает способ создать разреженный вектор-строку, задающий только ненулевые записи A[j1] = value1, A[j2] = value2 и т.д. Упорядоченное расположение записей в списке входов не важно.
Количество строк и столбцов, соответственно, матрицы должно быть меньше 231.
Компоненты матрицы больше не оцениваются после создания матрицы, т.е. если они содержат свободные идентификаторы, они не будут заменены их значениями.
Мы создаем 2×2 матрица путем передачи списка двух строк к matrix, где каждая строка является списком двух элементов:
A := matrix([[1, 5], [2, 3]])
![]()
Таким же образом мы генерируем следующие 2 ×3 матрицы:
B := matrix([[-1, 5/2, 3], [1/3, 0, 2/5]])

Мы можем сделать матричную арифметику с помощью стандартных арифметических операторов MuPAD. Например, матричным произведением A B, четвертая степень 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:
В дополнение к стандартной матричной арифметике библиотека 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:
К матричным записям можно получить доступ с оператором индекса [ ]:
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:
Некоторые системные функции могут быть применены к матрицам. Например, если вы имеете матрицу с символьными записями и хотите иметь все записи в расширенной форме, просто применить функциональный 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:
Вектором является любой m ×1 матрица (вектор-столбец) или 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:
Вектором является любой m ×1 матрица (вектор-столбец) или 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:
В следующих примерах мы иллюстрируем различные вызовы matrix аналогичный описанному выше. Мы запускаем путем передачи вложенного списка matrix, где каждый внутренний список соответствует строке матрицы:
matrix([[1, 2], [2]])
![]()
Количество строк созданной матрицы является количеством внутренних списков, а именно, m = 2. Количество столбцов определяется максимальным количеством записей внутреннего списка. В примере выше, первый список является самым длинным, и следовательно n = 2. Второй список имеет только один элемент и, поэтому, вторая запись во второй строке возвращенной матрицы была обнулена.
В следующем вызове мы используем тот же вложенный список, но кроме того передаем два параметра размерности, чтобы создать 4×4 матрица:
matrix(4, 4, [[1, 2], [2]])

В этом случае размерность матрицы дана параметрами размерности. Как прежде, недостающие записи во внутреннем списке соответствуют нулю, и кроме того недостающие строки обработаны как нулевые строки.
Если размерность, m ×n матрицы утверждается явным образом, записи, может также быть задана простым списком с m n элементы. Матрица заполнена этими элементами строка строкой:
matrix(2, 3, [1, 2, 3, 4, 5, 6])
![]()
matrix(3, 2, [1, 2, 3, 4, 5, 6])

Один - или двумерный массив арифметических выражений, таких как:
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:
Мы показываем, как создать матрицу, компоненты которой заданы функцией строки и индекса столбца. Запись в 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)

Диагональные матрицы могут быть созданы путем передачи опции 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:
Полосные матрицы Теплица могут быть созданы с опцией Banded. Следующая команда создает трехдиагональную матрицу с постоянными полосами:
matrix(4, 4, [-1, 2, -1], Banded)

Матрицы могут также быть созданы при помощи table:
t := table(): t[1, 2] := 12: t[3, 1] := 31: t[3, 2] := 32: t

Недостающие записи таблицы соответствуют пустым матричным записям:
A := matrix(4, 6, t)

При помощи таблиц можно легко создать большие (разреженные) матрицы, не будучи обеспеченным, чтобы задать все нулевые записи матрицы. Обратите внимание на то, что это - большое преимущество перед использованием массивов, где каждый компонент должен быть инициализирован прежде.
delete t, A:
Метод "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:
| |
| |
|
Вложенный список строк, каждая строка, являющаяся списком арифметических выражений |
|
Матрица A, т.е. объект типа данных категории |
|
Таблица матричных компонентов |
|
Количество строк: положительное целое число |
|
Количество столбцов: положительное целое число |
|
Функция или функциональное выражение двух аргументов |
|
Функция или функциональное выражение одного аргумента |
|
Индексы строки: целые числа между 1 и m |
|
Индексы столбца: целые числа между 1 и m |
|
Матричные записи: арифметические выражения |
|
Создайте диагональную матрицу При использовании этой опции диагональные матрицы могут быть созданы с диагональными элементами, взятыми из списка, или вычислили функцией или функциональным выражением.
|
|
Создайте полосную матрицу Теплица Ленточная матрица имеет нулевые записи вне основной диагонали и некоторые смежные под - и супердиагоналей.
Все элементы основной диагонали созданной матрицы инициализируются со средним элементом См. пример 11. |
Матрица доменного типа Dom::Matrix().