Создайте матрицу или вектор
Блокноты 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
возвращен.
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.
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
должен иметь m n операнды. Первые операнды m задают первую строку, следующие операнды m задают вторую строку и т.д. Форматирование массива не важно. Например, любой массив с 6 элементами может использоваться, чтобы создать матрицы размерности 1 ×6, или 2×3, или 3×2, или 6 ×1.
matrix(m, n, List)
создает m ×n матрица с компонентами взятая строка после строки из непустого списка. Список должен содержать m n записи. 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.
Компоненты матрицы больше не оцениваются после создания матрицы, т.е. если они содержат свободные идентификаторы, они не будут заменены их значениями.
Мы создаем 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:
| |
| |
|
Вложенный список строк, каждая строка, являющаяся списком арифметических выражений |
|
Матрица, т.е. объект типа данных категории |
|
Таблица матричных компонентов |
|
Количество строк: положительное целое число |
|
Количество столбцов: положительное целое число |
|
Функция или функциональное выражение двух аргументов |
|
Функция или функциональное выражение одного аргумента |
|
Индексы строки: целые числа между 1 и m |
|
Индексы столбца: целые числа между 1 и m |
|
Матричные записи: арифметические выражения |
|
Создайте диагональную матрицу При использовании этой опции диагональные матрицы могут быть созданы с диагональными элементами, взятыми из списка, или вычислили функцией или функциональным выражением.
|
|
Создайте полосную матрицу Теплица Ленточная матрица имеет нулевые записи вне основной диагонали и некоторые смежные под - и супердиагоналей.
Все элементы основной диагонали созданной матрицы инициализируются со средним элементом Cf. Пример 11. |
Матрица доменного типа Dom::Matrix()
.