Dom
:: Matrix
Матрицы
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Dom::Matrix(<R
>)
Dom::Matrix(R)(Array
)
Dom::Matrix(R)(List
)
Dom::Matrix(R)(ListOfRows
)
Dom::Matrix(R)(Matrix
)
Dom::Matrix(R)(m
,n
)
Dom::Matrix(R)(m
,n
,Array
)
Dom::Matrix(R)(m
,n
,List
)
Dom::Matrix(R)(m
,n
,ListOfRows
)
Dom::Matrix(R)(m
,n
,Table
)
Dom::Matrix(R)(m
,n
,[(i1, j1) = value1, (i2, j2) = value2, …]
)
Dom::Matrix(R)(m
,n
,f
)
Dom::Matrix(R)(m
,n
,List
, Diagonal)
Dom::Matrix(R)(m
,n
,g
, Diagonal)
Dom::Matrix(R)(m
,n
,List
, Banded)
Dom::Matrix(R)(1
,n
,Array
)
Dom::Matrix(R)(1
,n
,List
)
Dom::Matrix(R)(1
,n
,Table
)
Dom::Matrix(R)(1
,n
,[j1 = value1, j2 = value2, …]
)
Dom::Matrix(R)(m
,1
,Array
)
Dom::Matrix(R)(m
,1
,List
)
Dom::Matrix(R)(m
,1
,Table
)
Dom::Matrix(R)(m
,1
,[i1 = value1, i2 = value2, …]
)
Dom::Matrix(R)
создает области матриц по доменному R
компонента категории Cat::Rng
(звонок, возможно без модуля).
Если дополнительный параметр, который R
не дан, Dom::ExpressionField()
, используется в качестве области компонента. Матрицы этого типа принимают произвольные выражения MuPAD® (числа, символы и т.д.) как записи. Имя matrix
является псевдонимом для этого матричного доменного Dom::Matrix()
по умолчанию.
Вектором с записями n является любой n ×1 матрица (вектор-столбец), или 1×n матрица (вектор - строка).
Арифметические операции с матрицами могут быть выполнены при помощи стандартных арифметических операторов MuPAD.
Например, если A
и B
являются двумя матрицами, заданными Dom::Matrix(R)
, A + B
вычисляет сумму, и A * B
вычисляет продукт этих двух матриц, при условии, что размерности являются соответствующими.
Точно так же A^(-1)
или 1/A
вычисляют инверсию квадратной матрицы A
, если это существует. В противном случае FAIL
возвращен. Смотрите Пример 1.
Много системных функций перегружаются для матриц, таких как map
, subs
, has
, zip
, Например, используют conjugate
, чтобы вычислить сопряженное комплексное число матрицы, norm
, чтобы вычислить матричные нормы или exp
, чтобы вычислить экспоненциал матрицы.
Большинство функций в пакете линейной алгебры MuPAD linalg работает с матрицами. Например, команда linalg::gaussJordan(A)
выполняет Исключение по Гауссу-Жордану на A
, чтобы преобразовать A
к его приведенному ступенчатому по строкам виду матрицы.
См. документацию linalg для списка доступных функций этого пакета.
Доменный Dom::Matrix(R)
представляет матрицы по R
произвольного размера. Поэтому это не имеет никакой алгебраической структуры (кроме того, чтобы быть набором матриц).
В этой странице справки мы используем следующие обозначения для матричного A (элемент Dom::Matrix(R)
):
nrows (A) обозначает количество строк A.
ncols (A) обозначает количество столбцов A.
Индекс строки является целым числом в диапазоне от 1 до nrows (A).
Индекс столбца является целым числом в диапазоне от 1 до ncols (A).
Количество строк и столбцов, соответственно, матрицы должно быть меньше чем 231.
Компоненты матрицы больше не оцениваются после создания матрицы, т.е. если они содержат свободные идентификаторы, они не будут заменены их значениями.
Dom::Matrix(R)(Array)
и Dom::Matrix(R)(Matrix)
создают новую матрицу с размерностью и компонентами Array
и Matrix
, соответственно.
Компоненты Array
или Matrix
преобразованы в элементы доменного R
. Сообщение об ошибке выпущено, если одно из этих преобразований перестало работать.
Создание (разреженных) матриц через массивы полезно для матриц умеренного размера. Обратите внимание на то, что индексируемые присвоения на массивы намного быстрее, чем соответствующие индексируемые присвоения на матрицы. Однако, поскольку все элементы массива (включая обнуление) должны быть заполнены в том, прежде чем преобразование в (разреженную) матрицу, память будет потрачена впустую для очень большого и очень разреженных матриц. В такой ситуации нужно задать таблицу, содержащую только ненулевые элементы, и преобразовать таблицу в матрицу (см. ниже).
Dom::Matrix(R)(List)
создает m ×1 вектор-столбец с компонентами, взятыми из непустого списка, где m является количеством записей List
.
Можно также использовать список уравнений, чтобы создать объект Dom::Matrix
. В этом случае записи списка должны иметь форму (i, j) = value
, где i
и j
обозначают индекс строки и столбца и value
коэффициент матрицы. i
и j
должны быть положительными целыми числами.
Dom::Matrix(R)(ListOfRows)
создает m ×n матрица с компонентами, взятыми из вложенного списка ListOfRows
, где m является количеством внутренних списков ListOfRows
, и n является максимальным числом элементов внутреннего списка. Каждый внутренний список соответствует строке матрицы. И m и n должны быть ненулевыми.
Если внутренний список имеет меньше, чем записи n, остающиеся компоненты в соответствующей строке матрицы обнуляются.
Записи внутренних списков преобразованы в элементы доменного R
. Сообщение об ошибке выпущено, если одно из этих преобразований перестало работать.
Вызов Dom::Matrix(R)(m, n)
возвращает m ×n нулевая матрица.
Используйте метод "identity"
, чтобы создать n ×n единичная матрица.
Dom::Matrix(R)(m, n, Array)
вызова создает m ×n матрица с компонентами, взятыми из Array
, который должен быть массивом или hfarray. Array
должен иметь m n операнды. Первые операнды m задают первую строку, следующие операнды m задают вторую строку и т.д. Форматирование массива не важно. Например, любой массив с 6 элементами может использоваться, чтобы создать матрицу размерности 1 ×6, или 2×3, или 3×2, или 6 ×1.
Dom::Matrix(R)(m, n, List)
создает m ×n матрица с компонентами взятая строка после строки из непустого списка. Список должен содержать m n записи.
Dom::Matrix(R)(m, n, ListOfRows)
создает m ×n матрица с компонентами, взятыми из списка ListOfRows
.
Если m ≥ 2 и n ≥ 2, то ListOfRows
должен состоять из в большей части m
внутренние списки, каждый имеющий при большинстве записей n
. Внутренние списки соответствуют строкам возвращенной матрицы.
Если внутренний список имеет меньше, чем записи n
, остающиеся компоненты соответствующей строки матрицы обнуляются. Если существуют меньше, чем m
внутренние списки, остающиеся более низкие строки матрицы заполнены, обнуляет.
Dom::Matrix(R)(m, n, Table)
создает m ×n матрица с компонентами, взятыми из таблицы Table
.
Путем определения записей таблицы сначала, можно легко создать большой и разреженные матрицы. Запись Table[i, j]
таблицы будет записью в i
-th строка и j
-th столбец матрицы. Поэтому таблица должна быть индексирована положительными целыми числами i
и j
.
Dom::Matrix(R)(m, n, [(i1, j1) = value1, (i2, j2) = value2, ...])
является дальнейшим способом создать матрицу, задающую только ненулевые записи A[i1, j1] = value1
, A[i2, j2] = value2
и т.д. Упорядоченное расположение записей в списке входов не важно.
Dom::Matrix(R)(m, n, f)
возвращает матрицу, чья (i, j)-th компонент значение вызова функции f(i, j)
. Индекс строки i колеблется от 1 до m и индекса столбца j от 1 до n.
Значения функции преобразованы в элементы доменного R
. Сообщение об ошибке выпущено, если одно из этих преобразований перестало работать.
Dom::Matrix(R)(1, n, Array)
возвращает 1 ×n вектор - строку с компонентами, взятыми из Array
. array
или hfarray
Array
должны иметь записи n
.
Записи массива преобразованы в элементы доменного R
. Сообщение об ошибке выпущено, если одно из этих преобразований перестало работать.
Dom::Matrix(R)(1, n, List)
возвращает 1 ×n вектор - строку с компонентами, взятыми из List
. Список List
должен иметь при большинстве записей n
. Если существует меньше записей, остающиеся векторные компоненты обнуляются.
Записи списка преобразованы в элементы доменного R
. Сообщение об ошибке выпущено, если одно из этих преобразований перестало работать.
Dom::Matrix(R)(1, n, Table)
возвращает 1 ×n вектор - строку с компонентами, взятыми из Table
. Таблица Table
не должна иметь больше, чем записи n
. Если существует меньше записей, остающиеся векторные компоненты рассматриваются как нуль.
Dom::Matrix(R)(m, 1, Array)
возвращает m ×1 вектор-столбец с компонентами, взятыми из Array
. array
или hfarray
Array
должны иметь записи m
.
Записи массива преобразованы в элементы доменного R
. Сообщение об ошибке выпущено, если одно из этих преобразований перестало работать.
Dom::Matrix(R)(m, 1, List)
возвращает m ×1 вектор-столбец с компонентами, взятыми из List
. Список List
должен иметь при большинстве записей m
. Если существует меньше записей, остающиеся векторные компоненты обнуляются.
Записи списка преобразованы в элементы доменного R
. Сообщение об ошибке выпущено, если одно из этих преобразований перестало работать.
Dom::Matrix(R)(m, 1, Table)
возвращает m ×1 вектор-столбец с компонентами, взятыми из Table
. Таблица Table
должна иметь не больше, чем записи m
. Если существует меньше записей, остающиеся векторные компоненты рассматриваются как нуль.
Если R
имеет Ax::canonicalRep
, то Ax::canonicalRep
.
Cat::Matrix
(R)
Каждый раз, когда возможно, нужно использовать Dom::ExpressionField
()
в качестве содействующей области матриц – поэтому Dom::ExpressionField
, ()
является содействующей областью по умолчанию матриц.
Компоненты матриц по Dom::ExpressionField
()
могут быть произвольными арифметическими выражениями. Рассмотреть
Mat := Dom::Matrix()
Мы присвоили область идентификатору Mat
, и теперь мы можем задать матричный A двух строк, где каждая строка является списком двух элементов следующей строкой:
A := Mat([[1, 5], [2, 3]])
Таким же образом мы задаем следующие 2 ×3 матрицы:
B := Mat([[-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 := Mat(2, 2, [[2]])
не является обратимым, следовательно:
C^(-1)
delete A, B, C:
Мы создаем область матриц по звонку coeffcient Dom::ExpressionField()
:
Mat := Dom::Matrix()
Около стандартной матричной арифметики библиотека linalg предлагает много функций, имеющих дело с матрицами. Например, если вы хотите вычислить ранг матрицы, используйте linalg::rank
:
A := Mat([[1, 2], [2, 4]])
linalg::rank(A)
Используйте linalg::eigenvectors
, чтобы вычислить собственные значения и собственные вектора матричного A:
linalg::eigenvectors(A)
Попробуйте info(linalg)
за список доступных функций или введите help(linalg)
для получения дополнительной информации о библиотеке linalg.
Некоторые функции в пакете linalg
просто служат “интерфейсными” функциями для методов матричной области, описанной выше. Например, linalg::transpose
использует метод "transpose"
, чтобы получить транспонированную матрицу. Функциональный linalg::gaussElim
применяет Исключение Гаусса к матрице путем вызова метода "gaussElim"
:
linalg::gaussElim(A) = A::dom::gaussElim(A)[1]
В отличие от методов доменного Dom::Matrix(R)
, соответствующие функции пакетов linalg
делают расширенную проверку своих входных параметров. Обратите внимание на то, что могут быть незначительные различия в функциональности функций linalg
и матричных методов. Например, опция ColumnElimination
не доступна в linalg::gaussElim
, но только в методе "gaussElim"
матричной области:
A::dom::gaussElim(A, ColumnElimination)
delete A:
Мы создаем матричный доменный Dom::Matrix()
по умолчанию. Как ярлык, эта область может также быть создана через matrix
:
A := matrix([[ 1, 2, 3, 4], [ 2, 0, 4, 1], [-1, 0, 5, 2]])
domtype(A)
Матричные компоненты могут быть извлечены индексным оператором []
:
A[2, 1] * A[1, 2] - A[3, 1] * A[1, 3]
Если один из индексов не находится в его допустимой области значений, сообщение об ошибке выпущено. Присвоения на матричные компоненты выполняются так же:
delete a: A[1, 2] := a^2: A
Около обычной индексации матричных компонентов также возможно извлечь подматрицы из данной матрицы. Следующий вызов создает субматрицу A, который состоит из строк 2 - 3 и столбцов 1 - 3 A:
A[2..3, 1..3]
Индексный оператор не позволяет вставлять подматрицы в данную матрицу. Это реализовано функциональным linalg::substitute
.
delete A:
В следующих примерах мы демонстрируем различные способы создать матрицы. Мы работаем с матрицами, заданными по полю ℤ 19, т.е. полю целых чисел по модулю 19. Этот звонок компонента может быть создан с доменным конструктором Dom::IntegerMod
.
Мы запускаем путем предоставления списка строк, где каждая строка является списком записей строки:
MatZ19 := Dom::Matrix(Dom::IntegerMod(19)): MatZ19([[1, 2], [2]])
Элементы двух внутренних списков, записей строки, были преобразованы в элементы доменного Dom::IntegerMod(19)
.
Количество строк является количеством подсписков аргумента, т.е. m = 2. Количество столбцов определяется длиной внутреннего списка с большинством записей, который является первым внутренним списком с двумя записями. Недостающие записи в других внутренних списках обработаны как нулевые компоненты. Вызов:
MatZ19(4, 4, [[1, 2], [2]])
фиксирует размерность матрицы. Недостающие записи и внутренние списки обработаны как нулевые компоненты и обнуляют строки, соответственно.
Сообщение об ошибке выпущено, если одна из данных записей не может быть преобразована в элемент по ℤ 19:
MatZ19([[2, 3], [-1, I]])
Error: Unable to define a matrix over 'Dom::IntegerMod(19)'. [(Dom::Matrix(Dom::IntegerMod(19)))::new]
delete MatZ19:
Этот пример иллюстрирует, как создать матрицу с компонентами, данными как значения индексной функции. Сначала мы создаем 2 ×2 Гильбертовых матрицы (см. также функции linalg::hilbert
и linalg::invhilbert
):
Dom::Matrix()(2, 2, (i, j) -> 1/(i + j - 1))
Отметьте различие при работе с выражениями и функциями. Если вы даете выражение, оно обработано как функция в индексах строки и столбца:
delete x: Dom::Matrix()(2, 2, x), Dom::Matrix()(2, 2, (i, j) -> x)
Диагональные матрицы могут быть созданы с опцией Diagonal
и список диагональных компонентов:
Mat := Dom::Matrix(): Mat(3, 4, [1, 2, 3], Diagonal)
Следовательно, чтобы задать n ×n единичная матрица, можно войти:
Mat(3, 3, [1 $ 3], Diagonal)
или вызов:
Mat(3, 3, x -> 1, Diagonal)
Самый легкий способ создать единичную матрицу, однако, состоит в том, чтобы использовать метод "identity"
:
Mat::identity(3)
delete Mat:
Матрицы Теплица могут быть заданы с опцией Banded
. Следующий вызов задает три ленточных матрицы с 2 компонента на основной диагонали и компоненте - 1 на первой поддиагонали и супердиагонали:
Dom::Matrix()(4, 4, [-1, 2, -1], Banded)
Некоторые системные функции могут быть применены к матрицам, таким как norm
, expand
, diff
, conjugate
или exp
.
Например, чтобы расширить компоненты матрицы:
delete a, b: A := Dom::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)
Функциональный zip
может также быть применен к матрицам. Следующий вызов комбинирует две матрицы A и B путем деления каждого компонента A соответствующим компонентом B:
A := Dom::Matrix()([[4, 2], [9, 3]]): B := Dom::Matrix()([[2, 1], [3,-1]]): zip(A, B, `/`)
Заключенный в кавычки символьный `/`
является другим обозначением для функционального _divide
, функциональной формы оператора деления /
.
Если нужно применить функцию к компонентам матрицы, то используйте функциональный map
. Например, чтобы упростить компоненты матрицы:
C := Dom::Matrix()( [[sin(x)^2 + cos(x)^2, cos(x)*tan(x)], [(a^2 - b^2)/(a + b), 1]] )
вызов:
map(C, Simplify)
delete A, B, C:
Однако там может появиться некоторые неожиданные результаты с помощью функционального diff
в контексте матриц. Производная следующего незаданного функционального f
матрицы вычисляется из-за цепочечного правила:
diff(f(matrix([[a*x^2, b], [c, d]])), x)
Обычно, функциональный f
был бы неявно принят, чтобы быть скаляром. Следовательно, производная f
должна быть скаляром также. В вышеупомянутой ситуации цепочечное правило применяется для дифференцирования: внутренняя функция является матрицей, содержащей символьные компоненты a*x^2
, b
, c
и d
. Его производная вычисляется путем простого применения diff
к каждому компоненту матрицы:
diff(matrix([[a*x^2, b], [c, d]]), x)
Наконец, внешний незаданный функциональный f
неявно принят, чтобы быть скаляром, таким, что каждый компонент производной внутренней функции умножается на внешнее дифференцирование.
Вектор-столбец представлен 2×1 матрица:
Mat := Dom::Matrix(): v := Mat(2, 1, [1, 2])
Размерность этого вектора:
Mat::matdim(v)
Длина вектора может также быть запрошена linalg::vecdim
или nops(v)
:
linalg::vecdim(v)
i th компонент этого вектора может быть извлечен двумя способами: или v[i, 1]
или v[i]
:
v[1], v[2]
Мы вычисляем 2-норму v
следующим вызовом:
norm(v, 2)
delete Mat, v:
Мы создаем случайные матрицы по полю рациональных чисел. Рассмотрите случайный матричный A1
с 3 строками и 3 столбцами:
Mat := Dom::Matrix(Dom::Rational): A1 := Mat::random(3, 3)
Второй матричный A2
должен содержать самое большее 2 ненулевых записи. Мы можем создать такую матрицу при помощи 2 в качестве третьего аргумента для random
:
A2 := Mat::random(3, 3, 2)
Продуктом этих матриц дают
C := A1 * A2
По умолчанию матрицы отображены как 'плотные' массивы с, обнуляет в пустых местах. Для разреженных матриц большого столбца и/или размерности строки, такой 'плотный' режим печати не является соответствующим: форматирование печати вывод было бы очень трудоемким. Далее, 'плотная' печать вывод не очень информативна для разреженных матриц. Поэтому метод "doprint"
обеспечивает разреженный режим вывода, распечатывающий только ненулевые записи:
C::dom::doprint(C)
С этим методом можно также распечатать большие разреженные матрицы. Мы создаем случайную разреженную матрицу с 100 строками, 200 столбцами и самое большее 6 ненулевыми записями:
X := Mat::random(100, 200, 6): print(X)
Warning: Matrix too large for display. To see all nonzero entries of a matrix A, use 'A::dom::doprint(A)'. [(Dom::Matrix(Dom::Rational))::print]
Предупреждение выступает за себя. X
рассматривается как 'слишком большой для отображения' с тех пор с 'плотным' режимом вывода по умолчанию, разреженная матрица была бы распечатана, когда огромная подобная массиву структура размерности 100×200 с (целым числом) обнуляет в пустых местах. Разреженный режим печати должен использоваться:
X::dom::doprint(X)
Для удобства существует функциональный doprint
, который вызывает этот метод, только войдя:
doprint(X)
delete Mat, A1, A2, C, X:
|
Звонок, т.е. область категории |
| |
|
Матрица, т.е. элемент области категории |
|
Матричная размерность (положительные целые числа) |
|
Список матричных компонентов |
|
Список в большинстве строк |
|
Таблица коэффициентов матрицы для разреженного входа |
|
Функция или функциональное выражение с двумя параметрами (индекс строки и столбца) |
|
Функция или функциональное выражение с одним параметром (индекс строки) |
|
Создайте диагональную матрицу С опцией
Записи
Значения функции преобразованы в элементы доменного |
|
Создайте матрицу Теплица
Матрица Теплица является матрицей, где элементы каждой полосы идентичны. См. также Пример 7. Все элементы основной диагонали созданной матрицы инициализируются со средним элементом Записи |
issparse |
|
"randomDimen" | установлен в |