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
расширение
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:
|
Звонок, т.е. область категории |
| |
|
Матрица A, т.е. элемент области категории |
|
Матричная размерность (положительные целые числа) |
|
Список матричных компонентов |
|
Список в большей части |
|
Таблица коэффициентов матрицы для разреженного входа |
|
Функция или функциональное выражение двумя параметрами (индекс строки и столбца) |
|
Функция или функциональное выражение одним параметром (индекс строки) |
|
Создайте диагональную матрицу С опцией
Записи
Значения функции преобразованы в элементы доменного |
|
Создайте матрицу Теплица
Матрица Теплица является матрицей, где элементы каждой полосы идентичны. См. также Пример 7. Все элементы основной диагонали созданной матрицы инициализируются со средним элементом Записи |
issparse |
|
"randomDimen" | установлен в |