Линейная алгебра
Стандартные функции
Функции линейной алгебры в Julia в основном реализуются путем вызова функций из LAPACK. Разложения разреженных матриц используют функции из SuiteSparse.
-
*(A, B) -
Умножение матриц.
-
\(A, B) -
Деление матриц с использованием полиалгоритма. Для входных матриц
AиB, результатXтакой, чтоA*X == B, когдаAявляется квадратной. Решатель, который используется, зависит от структурыA. ЕслиAявляется верхней или нижней треугольной (или диагональной), факторизацияAне требуется, и система решается с помощью прямой или обратной подстановки. Для нетреугольных квадратных матриц используется LU-факторизация.Для прямоугольных
Aрезультатом является решение с минимальной нормой методом наименьших квадратов, вычисленное с помощью QR-факторизации с выбором поворотовAи оценкой рангаAна основе фактора R.Когда
Aразреженная, используется аналогичный полиалгоритм. Для невырожденных матриц факторизацияLDLtне использует повороты во время численных факторизаций, поэтому процедура может завершиться неудачей даже для обратимых матриц.
-
dot(x, y) -
⋅(x, y) -
Вычислить скалярное произведение. Для комплексных векторов первый вектор сопрягается.
-
vecdot(x, y) -
Для любых итерируемых контейнеров
xиy(включая массивы любой размерности) чисел (или любого типа элементов, для которыхdotопределено), вычислить евклидово скалярное произведение (суммуdot(x[i],y[i])) как если бы они были векторами.
-
cross(x, y) -
×(x, y) -
Вычислить векторное произведение двух 3-векторов.
-
factorize(A) -
Вычислить удобную факторизацию
A, основанную на типе входной матрицы.factorizeпроверяетAна симметричность/треугольность и т.д., еслиAпередается как общая матрица.factorizeпроверяет каждый элементAдля проверки/исключения каждого свойства. Она будет прерываться как только сможет исключить симметрию/треугольную структуру. Возвращаемое значение может быть повторно использовано для эффективного решения множественных систем. Например:A=factorize(A); x=A\b; y=A\C.Свойства AТип факторизации Положительно определенная Холецкого (см. cholfact())Плотный симметричный/эрмитов Банч-Коуфмана (см. bkfact())Разреженный симметричный/эрмитов LDLt (см. ldltfact())Треугольная Треугольная Диагональная Диагональная Бидиагональная Бидиагональная Трехдиагональная LU (см. lufact())Симметричная реальная трехдиагональная LDLt (см. ldltfact())Общая квадратная LU (см. lufact())Общая неквадратная QR (см. qrfact())Если
factorizeвызывается на эрмитовой положительно определенной матрице, например, тоfactorizeвернет факторизацию Холецкого.Пример:
A = diagm(rand(5)) + diagm(rand(4),1); #A is really bidiagonal factorize(A) #factorize will check to see that A is already factorized
Это возвращает
5×5 Bidiagonal{Float64}, которая теперь может быть передана другим функциям линейной алгебры (например, решателям собственных значений), которые будут использовать специализированные методы для типовBidiagonal.
-
full(F) -
Восстановить матрицу
Aиз факторизацииF=factorize(A).
-
Diagonal(A::AbstractMatrix) -
Создает матрицу из диагонали
A.
-
Diagonal(V::AbstractVector) -
Создает матрицу с
Vв качестве диагонали.
-
Bidiagonal(dv, ev, isupper::Bool) -
Создает верхнюю (
isupper=true) или нижнюю (isupper=false) бидиагональную матрицу, используя заданные диагональные (dv) и внедиагональные (ev) векторы. Результат имеет типBidiagonalи обеспечивает эффективные специализированные линейные решатели, но может быть преобразован в обычную матрицу с помощьюfull(). Длинаevдолжна быть на единицу меньше длиныdv.Пример
dv = rand(5) ev = rand(4) Bu = Bidiagonal(dv, ev, true) #e is on the first superdiagonal Bl = Bidiagonal(dv, ev, false) #e is on the first subdiagonal
-
Bidiagonal(dv, ev, uplo::Char) -
Создает верхнюю (
uplo='U') или нижнюю (uplo='L') бидиагональную матрицу, используя заданные диагональные (dv) и внедиагональные (ev) векторы. Результат имеет типBidiagonalи обеспечивает эффективные специализированные линейные решатели, но может быть преобразован в обычную матрицу с помощьюfull(). Длинаevдолжна быть на единицу меньше длиныdv.Пример
dv = rand(5) ev = rand(4) Bu = Bidiagonal(dv, ev, 'U') #e is on the first superdiagonal Bl = Bidiagonal(dv, ev, 'L') #e is on the first subdiagonal
-
Bidiagonal(A, isupper::Bool) -
Создает
Bidiagonalматрицу из главной диагоналиAи ее первого наддиагонального (еслиisupper=true) или поддиагонального (еслиisupper=false).Пример
A = rand(5,5) Bu = Bidiagonal(A, true) #contains the main diagonal and first superdiagonal of A Bl = Bidiagonal(A, false) #contains the main diagonal and first subdiagonal of A
-
SymTridiagonal(dv, ev) -
Создает симметричную трехдиагональную матрицу из диагонали и первого под/наддиагонального элемента соответственно. Результат имеет тип
SymTridiagonalи обеспечивает эффективные специализированные решатели собственных значений, но может быть преобразован в обычную матрицу с помощьюfull().
-
Tridiagonal(dl, d, du) -
Создает трехдиагональную матрицу из первого поддиагонального, диагонального и первого наддиагонального элементов соответственно. Результат имеет тип
Tridiagonalи обеспечивает эффективные специализированные линейные решатели, но может быть преобразован в обычную матрицу с помощьюfull(). Длиныdlиduдолжны быть на единицу меньше длиныd.
-
Symmetric(A, uplo=:U) -
Создает
Symmetricматрицу из верхней (еслиuplo = :U) или нижней (еслиuplo = :L) треугольной частиA.Пример
A = randn(10,10) Supper = Symmetric(A) Slower = Symmetric(A,:L) eigfact(Supper)
eigfactбудет использовать метод, специализированный для матриц, известные как симметричные. Обратите внимание, чтоSupperне будет равноSlower, еслиAсама не симметрична (например, еслиA == A.').
-
Hermitian(A, uplo=:U) -
Создает
Hermitianматрицу из верхней (еслиuplo = :U) или нижней (еслиuplo = :L) треугольной частиA.Пример
A = randn(10,10) Hupper = Hermitian(A) Hlower = Hermitian(A,:L) eigfact(Hupper)
eigfactбудет использовать метод, специализированный для матриц, известные как эрмитовы. Обратите внимание, чтоHupperне будет равноHlower, еслиAсама не эрмитова (например, еслиA == A').
-
lu(A) → L, U, p -
Вычислить LU-факторизацию
A, так чтоA[p,:] = L*U.
-
lufact(A[, pivot=Val{true}]) → F::LU -
Вычислить LU-разложение
A.В большинстве случаев, если
Aявляется подтипомSотAbstractMatrix{T}с типом элементовTподдерживающим+,*и/, тип возвращаемого значения —LU{T,S{T}}. Если выбрано пивотирование (по умолчанию), тип элементов должен также поддерживатьabsи<.Индивидуальные компоненты разложения
Fмогут быть получены по индексу:Компонент Описание F[:L]L(нижняя треугольная) частьLUF[:U]U(верхняя треугольная) частьLUF[:p](правая) перестановка VectorF[:P](правая) перестановка MatrixВзаимосвязь между
FиA:F[:L]*F[:U] == A[F[:p], :]Fдополнительно поддерживает следующие функции:Поддерживаемая функция LULU{T,Tridiagonal{T}}/()✓ \()✓ ✓ cond()✓ det()✓ ✓ logdet()✓ ✓ logabsdet()✓ ✓ size()✓ ✓
-
lufact(A::SparseMatrixCSC) → F::UmfpackLU -
Вычислить LU-разложение разреженной матрицы
A.Для разреженной
Aс вещественным или комплексным типом элементов, тип возвращаемого значенияF—UmfpackLU{Tv, Ti}, гдеTv=Float64илиComplex128соответственно, аTi— целочисленный тип (Int32илиInt64).Индивидуальные компоненты разложения
Fмогут быть получены по индексу:Компонент Описание F[:L]L(нижняя треугольная) частьLUF[:U]U(верхняя треугольная) частьLUF[:p]правая перестановка VectorF[:q]левая перестановка VectorF[:Rs]Vectorмножителей масштабированияF[:(:)](L,U,p,q,Rs)компонентыСвязь между
FиA:F[:L]*F[:U] == (F[:Rs] .* A)[F[:p], F[:q]]Fдополнительно поддерживает следующие функции:** Примечание по реализации **
lufact(A::SparseMatrixCSC)использует библиотеку UMFPACK, которая входит в SuiteSparse. Поскольку эта библиотека поддерживает только разреженные матрицы сFloat64илиComplex128элементами,lufactпреобразуетAв копию типаSparseMatrixCSC{Float64}илиSparseMatrixCSC{Complex128}соответственно.
-
lufact!(A) → LU -
lufact!аналогичноlufact(), но экономит место, перезаписывая входA, вместо создания копии. ИсключениеInexactErrorвыбрасывается, если факторизация производит число, не представимое типом элементовA, например, для целочисленных типов.
-
chol(A) → U -
Вычислить разложение Холецкого положительно определенной матрицы
Aи вернуть верхнетреугольную матрицуUтакую, чтоA = U'U.
-
chol(x::Number) → y -
Вычислить квадратный корень неотрицательного числа
x.
-
cholfact(A, [uplo::Symbol, ]Val{false}) → Cholesky -
Вычислить разложение Холецкого плотной симметричной положительно определенной матрицы
Aи вернутьCholeskyфакторизацию. МатрицаAможет бытьSymmetricилиHermitianStridedMatrixили совершенно симметричной или эрмитовойStridedMatrix. В последнем случае, необязательный аргументuploможет быть:Lдля использования нижней части или:Uдля верхней частиA. По умолчанию используется:U. Треугольный фактор Холецкого может быть получен из факторизацииFс помощью:F[:L]иF[:U]. Следующие функции доступны для объектовCholesky:size,\,inv,det. ИсключениеPosDefExceptionвыбрасывается в случае, если матрица не является положительно определенной.
-
cholfact(A, [uplo::Symbol, ]Val{true}; tol = 0.0) → CholeskyPivoted -
Вычислить пивотированное разложение Холецкого плотной симметричной положительно полуопределенной матрицы
Aи вернутьCholeskyPivotedфакторизацию. МатрицаAможет бытьSymmetricилиHermitianStridedMatrixили совершенно симметричной или эрмитовойStridedMatrix. В последнем случае, необязательный аргументuploможет быть:Lдля использования нижней части или:Uдля верхней частиA. По умолчанию используется:U. Треугольный фактор Холецкого может быть получен из факторизацииFс помощью:F[:L]иF[:U]. Следующие функции доступны для объектовPivotedCholesky:size,\,inv,det, иrank. Аргументtolопределяет пороговое значение для определения ранга. Для отрицательных значений порог равен машинной точности.
-
cholfact(A; shift = 0.0, perm = Int[]) → CHOLMOD.Factor -
Вычислить разложение Холецкого разреженной положительно определенной матрицы
A.Aдолжна бытьSparseMatrixCSC,Symmetric{SparseMatrixCSC}, илиHermitian{SparseMatrixCSC}. Обратите внимание, что даже еслиAне имеет метки типа, она должна быть симметричной или эрмитовой. Используется уменьшающая заполнение перестановка.F = cholfact(A)чаще всего используется для решения систем уравнений сF\b, но также определены методыdiag,det,logdetдляF. Также можно извлечь отдельные факторы изF, используяF[:L]. Однако, поскольку пивотирование включено по умолчанию, факторизация внутренне представляется какA == P'*L*L'*Pс матрицей перестановокP; использование толькоLбез учетаPдаст неправильные результаты. Для включения эффектов перестановки обычно предпочтительнее извлекать «комбинированные» факторы, такие какPtL = F[:PtL](аналогP'*L) иLtP = F[:UP](аналогL'*P).Установка необязательного ключевого аргумента
shiftвычисляет факторизациюA+shift*IвместоA. Если аргументpermне пуст, он должен представлять перестановку1:size(A,1)для указания используемого порядка (вместо стандартного порядка AMD в CHOLMOD).Примечание
Этот метод использует библиотеку CHOLMOD из SuiteSparse, которая поддерживает только типы данных double или complex double. Входные матрицы, не имеющие этих типов элементов, будут преобразованы в
SparseMatrixCSC{Float64}илиSparseMatrixCSC{Complex128}соответственно.Многие другие функции из CHOLMOD обернуты, но не экспортированы из модуля
Base.SparseArrays.CHOLMOD.
-
cholfact!(F::Factor, A; shift = 0.0) → CHOLMOD.Factor -
Вычислить разложение Холецкого (\(LL'\))
A, повторно используя символическую факторизациюF.Aдолжна бытьSparseMatrixCSC,Symmetric{SparseMatrixCSC}, илиHermitian{SparseMatrixCSC}. Обратите внимание, что даже еслиAне имеет метки типа, она должна быть симметричной или эрмитовой.Примечание
Этот метод использует библиотеку CHOLMOD из SuiteSparse, которая поддерживает только типы данных double или complex double. Входные матрицы, не имеющие этих типов элементов, будут преобразованы в
SparseMatrixCSC{Float64}илиSparseMatrixCSC{Complex128}соответственно.
-
cholfact!(A, [uplo::Symbol, ]Val{false}) → Cholesky -
То же самое, что и
cholfact, но экономит место, перезаписывая входнойA, вместо создания копии. ИсключениеInexactErrorвыбрасывается, если факторизация даёт число, не представимое типом элементовA, например, для целочисленных типов.
-
cholfact!(A, [uplo::Symbol, ]Val{true}; tol = 0.0) → CholeskyPivoted -
То же самое, что и
cholfact, но экономит место, перезаписывая входнойA, вместо создания копии. ИсключениеInexactErrorвыбрасывается, если факторизация даёт число, не представимое типом элементовA, например, для целочисленных типов.
-
lowrankupdate(C::Cholesky, v::StridedVector) → CC::Cholesky -
Обновить холескиевскую факторизацию
Cвекторомv. ЕслиA = C[:U]'C[:U], тоCC = cholfact(C[:U]'C[:U] + v*v'), но вычислениеCCиспользует толькоO(n^2)операций.
-
lowrankdowndate(C::Cholesky, v::StridedVector) → CC::Cholesky -
Выполнить обратное обновление холескиевской факторизации
Cвекторомv. ЕслиA = C[:U]'C[:U], тоCC = cholfact(C[:U]'C[:U] - v*v'), но вычислениеCCиспользует толькоO(n^2)операций.
-
lowrankupdate!(C::Cholesky, v::StridedVector) → CC::Cholesky -
Обновить холескиевскую факторизацию
Cвекторомv. ЕслиA = C[:U]'C[:U], тоCC = cholfact(C[:U]'C[:U] + v*v'), но вычислениеCCиспользует толькоO(n^2)операций. Входная факторизацияCобновляется на месте таким образом, что при выходеC == CC. Векторvуничтожается во время вычислений.
-
lowrankdowndate!(C::Cholesky, v::StridedVector) → CC::Cholesky -
Выполнить обратное обновление холескиевской факторизации
Cвекторомv. ЕслиA = C[:U]'C[:U], тоCC = cholfact(C[:U]'C[:U] - v*v'), но вычислениеCCиспользует толькоO(n^2)операций. Входная факторизацияCобновляется на месте таким образом, что при выходеC == CC. Векторvуничтожается во время вычислений.
-
ldltfact(::SymTridiagonal) → LDLt -
Вычислить
LDLtфакторизацию вещественной симметричной трёхдиагональной матрицы, такой чтоA = L*Diagonal(d)*L', гдеL— единичная нижняя треугольная матрица, аd— вектор. Основное применениеLDLtфакторизацииF = ldltfact(A)— решение системы линейных уравненийAx = bсF\b.
-
ldltfact(A; shift = 0.0, perm=Int[]) → CHOLMOD.Factor -
Вычислить факторизацию \(LDL'\) разреженной матрицы
A.Aдолжна бытьSparseMatrixCSC,Symmetric{SparseMatrixCSC}, илиHermitian{SparseMatrixCSC}. Обратите внимание, что даже если уAнет метки типа, она всё равно должна быть симметричной или эрмитовой. Используется заполнение, уменьшающее перестановку.F = ldltfact(A)чаще всего используется для решения систем уравненийA*x = bсF\b. Возвращаемый объект факторизацииFтакже поддерживает методыdiag,det, иlogdet. Вы можете извлечь отдельные факторы изFс помощьюF[:L]. Однако, так как перестановка включена по умолчанию, факторизация встроена какA == P'*L*D*L'*Pс матрицей перестановокP; использование толькоLбез учётаPдаст неверные результаты. Для включения эффекта перестановки обычно предпочтительно извлекать «соединённые» факторы, такие какPtL = F[:PtL](эквивалентP'*L) иLtP = F[:UP](эквивалентL'*P). Полный список поддерживаемых факторов —:L, :PtL, :D, :UP, :U, :LD, :DU, :PtLD, :DUP.Установка необязательного ключевого аргумента
shiftвычисляет факторизациюA+shift*IвместоA. Если аргументpermне пустой, он должен быть перестановкой1:size(A,1), задающей порядок (вместо по умолчанию AMD-упорядочивания CHOLMOD).Примечание
Этот метод использует библиотеку CHOLMOD из SuiteSparse, которая поддерживает только числа с плавающей точкой двойной точности или комплексные числа двойной точности. Матрицы входных данных, не являющиеся такими типами элементов, будут преобразованы в
SparseMatrixCSC{Float64}илиSparseMatrixCSC{Complex128}соответственно.Многие другие функции из CHOLMOD обернуты, но не экспортированы из модуля
Base.SparseArrays.CHOLMOD.
-
ldltfact!(F::Factor, A; shift = 0.0) → CHOLMOD.Factor -
Вычислить факторизацию \(LDL'\) для
A, повторно используя символическую факторизациюF.Aдолжна бытьSparseMatrixCSC,Symmetric{SparseMatrixCSC}, илиHermitian{SparseMatrixCSC}. Обратите внимание, что даже если уAнет метки типа, она всё равно должна быть симметричной или эрмитовой.Примечание
Этот метод использует библиотеку CHOLMOD из SuiteSparse, которая поддерживает только числа с плавающей точкой двойной точности или комплексные числа двойной точности. Матрицы входных данных, не являющиеся такими типами элементов, будут преобразованы в
SparseMatrixCSC{Float64}илиSparseMatrixCSC{Complex128}соответственно.
-
ldltfact!(::SymTridiagonal) → LDLt -
То же самое, что и
ldltfact, но экономит место, перезаписывая входнойA, вместо создания копии.
-
qr(v::AbstractVector) -
Вычисляет полярное разложение вектора.
Входные данные:
-
v::AbstractVector- вектор для нормализации
Выходные данные:
-
w- единичный вектор в направленииv -
r- нормаv
См. также:
normalize,normalize!,LinAlg.qr! -
-
LinAlg.qr!(v::AbstractVector) -
Вычисляет полярное разложение вектора. Вместо возвращения нового вектора, как
qr(v::AbstractVector), эта функция изменяет входной векторvна месте.Входные данные:
-
v::AbstractVector- вектор для нормализации
Выходные данные:
-
w- единичный вектор в направленииv(это изменениеv). -
r- нормаv
См. также:
normalize,normalize!,qr -
-
qr(A[, pivot=Val{false}][;thin=true]) → Q, R, [p] -
Вычислить (с перестановкой) QR-факторизацию
Aтаким образом, чтобы иметь либоA = Q*R, либоA[:,p] = Q*R. Также см.qrfact. По умолчанию вычисляется тонкая факторизация. Обратите внимание, чтоRне расширяется нулями, когда требуется полнаяQ.
-
qrfact(A[, pivot=Val{false}]) → F -
Вычисляет QR-разложение
A. Тип возвращаемого значенияFзависит от типа элементовAи от того, указано ли применение поворота (с помощьюpivot==Val{true}).Тип возвращаемого значения eltype(A)pivotВзаимосвязь между FиAQRне BlasFloatлюбой A==F[:Q]*F[:R]QRCompactWYBlasFloatVal{false}A==F[:Q]*F[:R]QRPivotedBlasFloatVal{true}A[:,F[:p]]==F[:Q]*F[:R]BlasFloatотносится к любому из типов:Float32,Float64,Complex64илиComplex128.К отдельным компонентам разложения
Fможно получить доступ с помощью индексирования:Компонент Описание QRQRCompactWYQRPivotedF[:Q]Q(ортогональная/унитарная) частьQR✓ ( QRPackedQ)✓ ( QRCompactWYQ)✓ ( QRPackedQ)F[:R]R(верхняя правая треугольная) частьQR✓ ✓ ✓ F[:p]опорный Vector✓ F[:P](опорная) перестановка Matrix✓ Для объектов
QRдоступны следующие функции:size,\. КогдаAявляется прямоугольной,\вернёт решение методом наименьших квадратов, и если решение не единственное, вернётся решение с наименьшей нормой.Разрешено умножение относительно тонкого или полного
Q, т.е. поддерживаются какF[:Q]*F[:R], так иF[:Q]*A. МатрицуQможно преобразовать в обычную матрицу с помощьюfull(), в котором есть именованный аргументthin.Примечание
qrfactвозвращает несколько типов, потому что LAPACK использует несколько представлений, которые минимизируют требования к памяти для произведений элементарных отражателей Хаусхолдера, так что матрицыQиRмогут храниться компактно, а не как две отдельные плотные матрицы.Данные, содержащиеся в
QRилиQRPivoted, могут быть использованы для построения типаQRPackedQ, который является компактным представлением матрицы вращения:\[Q = \prod_{i=1}^{\min(m,n)} (I - \tau_i v_i v_i^T)\]где \(\tau_i\) — масштабный множитель, а \(v_i\) — вектор проекции, связанный с \(i^{th}\) элементарным отражателем Хаусхолдера.
Данные, содержащиеся в
QRCompactWY, могут быть использованы для построения типаQRCompactWYQ, который является компактным представлением матрицы вращения\[Q = I + Y T Y^T\]где
Yявляется нижней трапециевидной \(m \times r\) , аTявляется верхней треугольной \(r \times r\). Представление компактного WY [Schreiber1989] не следует путать со старым представлением WY [Bischof1987]. (Документация LAPACK используетVвместоY.)[Bischof1987] (1, 2) C Bischof and C Van Loan, “The WY representation for products of Householder matrices”, SIAM J Sci Stat Comput 8 (1987), s2-s13. doi:10.1137/0908009 [Schreiber1989] R Schreiber and C Van Loan, “A storage-efficient WY representation for products of Householder transformations”, SIAM J Sci Stat Comput 10 (1989), 53-57. doi:10.1137/0910005
-
qrfact(A) → SPQR.Factorization -
Вычисляет QR-разложение разреженной матрицы
A. Используется перенумерация, уменьшающая заполнение. Основное применение этого типа — решение задач наименьших квадратов с\. Функция вызывает библиотеку C SPQR, и несколько дополнительных функций из этой библиотеки обернуты, но не экспортируются.
-
qrfact!(A[, pivot=Val{false}]) -
qrfact!аналогиченqrfact(), когдаAявляется подтипомStridedMatrix, но экономит место, перезаписывая входные данныеA, вместо создания копии. ИсключениеInexactErrorгенерируется, если факторизация приводит к числу, не представимому типом элементовA, например, для целочисленных типов.
-
full(QRCompactWYQ[, thin=true]) → Matrix -
Преобразует ортогональную или унитарную матрицу, хранящуюся как объект
QRCompactWYQ, т.е. в компактном формате WY [Bischof1987], в плотную матрицу.По желанию принимает булевый аргумент
thin, который, еслиtrueопускает столбцы, описывающие нулевые строкиRв QR-разложении. Результирующая матрица —Qв тонком QR-разложении (иногда называемом сокращённым QR-разложением). Еслиfalse, возвращаетQ, охватывающий все строкиRв соответствующем QR-разложении.
-
lqfact!(A) → LQ -
Вычисляет LQ-разложение
A, используя входную матрицу в качестве рабочей области. См. такжеlq().
-
lqfact(A) → LQ -
Вычисляет LQ-разложение
A. См. такжеlq().
-
lq(A; [thin=true]) → L, Q -
Выполняет LQ-разложение
Aтаким образом, чтоA = L*Q. По умолчанию вычисляется тонкое разложение. LQ-разложение — это QR-разложениеA.'.Lне дополняется нулями, если требуется полноеQ.
-
bkfact(A) → BunchKaufman -
Вычисляет разложение Банча-Коуфана [Bunch1977] вещественной симметричной или комплексной эрмитовой матрицы
Aи возвращает объектBunchKaufman. Для объектовBunchKaufmanдоступны следующие функции:size,\,inv,issymmetric,ishermitian.[Bunch1977] J R Bunch and L Kaufman, Some stable methods for calculating inertia and solving symmetric linear systems, Mathematics of Computation 31:137 (1977), 163-179. url.
-
bkfact!(A) → BunchKaufman -
bkfact!аналогичноbkfact(), но экономит место, перезаписывая входные данныеA, вместо создания копии.
-
eig(A,[irange,][vl,][vu,][permute=true,][scale=true]) → D, V -
Вычисляет собственные значения (
D) и собственные векторы (V) матрицыA. Подробности о параметрахirange,vl, иvuи ключевых словахpermuteиscaleсм. вeigfact(). Собственные векторы возвращаются по столбцам.julia> eig([1.0 0.0 0.0; 0.0 3.0 0.0; 0.0 0.0 18.0]) ([1.0,3.0,18.0], [1.0 0.0 0.0; 0.0 1.0 0.0; 0.0 0.0 1.0])
eig— это обёртка вокругeigfact(), извлекающая все части факторизации в кортеж; по возможности рекомендуется использоватьeigfact().
-
eig(A, B) → D, V -
Вычисляет обобщённые собственные значения (
D) и векторы (V) матрицыAотносительно матрицыB.eig— это обёртка вокругeigfact(), извлекающая все части факторизации в кортеж; по возможности рекомендуется использоватьeigfact().julia> A = [1 0; 0 -1] 2×2 Array{Int64,2}: 1 0 0 -1 julia> B = [0 1; 1 0] 2×2 Array{Int64,2}: 0 1 1 0 julia> eig(A, B) (Complex{Float64}[0.0+1.0im,0.0-1.0im], Complex{Float64}[0.0-1.0im 0.0+1.0im; -1.0-0.0im -1.0+0.0im])
-
eigvals(A,[irange,][vl,][vu]) → values -
Возвращает собственные значения
A. ЕслиAявляетсяSymmetric,HermitianилиSymTridiagonal, можно вычислить только подмножество собственных значений, указав либоUnitRangeirange, охватывающий индексы отсортированных собственных значений, либо паруvlиvuдля нижней и верхней границ собственных значений.Для общих несимметричных матриц можно указать, как балансировать матрицу перед вычислением собственных векторов. Опция
permute=trueпереставляет матрицу, чтобы она стала ближе к верхнетреугольной, аscale=trueмасштабирует матрицу по её диагональным элементам, чтобы сделать строки и столбцы более равными по норме. По умолчанию для обеих опций используетсяtrue.
-
eigvals!(A,[irange,][vl,][vu]) → values -
То же, что и
eigvals(), но экономит место, перезаписывая входные данныеA, вместо создания копии.
-
eigmax(A; permute::Bool=true, scale::Bool=true) -
Возвращает наибольшее собственное значение
A. Опцияpermute=trueпереставляет матрицу, чтобы она стала ближе к верхнетреугольной, аscale=trueмасштабирует матрицу по её диагональным элементам, чтобы сделать строки и столбцы более равными по норме. Обратите внимание, что если собственные значенияAявляются комплексными, этот метод потерпит неудачу, так как комплексные числа нельзя сортировать.julia> A = [0 im; -im 0] 2×2 Array{Complex{Int64},2}: 0+0im 0+1im 0-1im 0+0im julia> eigmax(A) 1.0 julia> A = [0 im; -1 0] 2×2 Array{Complex{Int64},2}: 0+0im 0+1im -1+0im 0+0im julia> eigmax(A) ERROR: DomainError: in #eigmax#30(::Bool, ::Bool, ::Function, ::Array{Complex{Int64},2}) at ./linalg/eigen.jl:186 in eigmax(::Array{Complex{Int64},2}) at ./linalg/eigen.jl:184 ...
-
eigmin(A; permute::Bool=true, scale::Bool=true) -
Возвращает наименьшее собственное значение
A. Опцияpermute=trueпереставляет матрицу, чтобы она стала ближе к верхнетреугольной, аscale=trueмасштабирует матрицу по её диагональным элементам, чтобы сделать строки и столбцы более равными по норме. Обратите внимание, что если собственные значенияAявляются комплексными, этот метод потерпит неудачу, так как комплексные числа нельзя сортировать.julia> A = [0 im; -im 0] 2×2 Array{Complex{Int64},2}: 0+0im 0+1im 0-1im 0+0im julia> eigmin(A) -1.0 julia> A = [0 im; -1 0] 2×2 Array{Complex{Int64},2}: 0+0im 0+1im -1+0im 0+0im julia> eigmin(A) ERROR: DomainError: in #eigmin#31(::Bool, ::Bool, ::Function, ::Array{Complex{Int64},2}) at ./linalg/eigen.jl:226 in eigmin(::Array{Complex{Int64},2}) at ./linalg/eigen.jl:224 ...
-
eigvecs(A, [eigvals,][permute=true,][scale=true]) → Matrix -
Возвращает матрицу
M, столбцы которой являются собственными векторамиA. (%-й собственный вектор можно получить из срезаM[:, k])). Ключевые словаpermuteиscaleтакие же, как уeigfact().Для матриц
SymTridiagonal, если указан необязательный вектор собственных значенийeigvals, возвращаются соответствующие собственные векторы.
-
eigfact(A,[irange,][vl,][vu,][permute=true,][scale=true]) → Eigen -
Вычисляет разложение по собственным значениям
A, возвращая объект факторизацииF, содержащий собственные значения вF[:values]и собственные векторы в столбцах матрицыF[:vectors]. (%-й собственный вектор можно получить из срезаF[:vectors][:, k].)Для объектов
Eigenдоступны следующие функции:inv(),det()иisposdef().Если
AявляетсяSymmetric,HermitianилиSymTridiagonal, можно вычислить только подмножество собственных значений, указав либоUnitRangeirange, охватывающий индексы отсортированных собственных значений, либо паруvlиvuдля нижней и верхней границ собственных значений.Для общих несимметричных матриц можно указать, как балансировать матрицу перед вычислением собственных векторов. Опция
permute=trueпереставляет матрицу, чтобы она стала ближе к верхнетреугольной, аscale=trueмасштабирует матрицу по её диагональным элементам, чтобы сделать строки и столбцы более равными по норме. По умолчанию для обеих опций используетсяtrue.
-
eigfact(A, B) → GeneralizedEigen -
Вычисляет обобщенное разложение по собственным значениям
AиB, возвращая объект факторизацииGeneralizedEigenF, содержащий обобщенные собственные значения вF[:values]и обобщенные собственные векторы в столбцах матрицыF[:vectors]. (%-й обобщенный собственный вектор можно получить из срезаF[:vectors][:, k].)
-
eigfact!(A[, B]) -
То же, что и
eigfact(), но экономит место, перезаписывая входные данныеA(иB) вместо создания копии.
-
hessfact(A) -
Вычисляет разложение Хессенберга
Aи возвращает объектHessenberg. ЕслиF— объект факторизации, унитарную матрицу можно получить с помощьюF[:Q], а матрицу Хессенберга — с помощьюF[:H]. КогдаQизвлекается, полученный тип — объектHessenbergQ, который можно преобразовать в обычную матрицу с помощьюfull().
-
hessfact!(A) -
hessfact!— то же, что иhessfact(), но экономит место, перезаписывая входные данныеA, вместо создания копии.
-
schurfact(A::StridedMatrix) → F::Schur -
Вычисляет факторизацию Шура матрицы
A. (Квази)треугольный фактор Шура можно получить из объектаSchurFс помощьюF[:Schur]илиF[:T], а ортогональные/унитарные векторы Шура можно получить с помощьюF[:vectors]илиF[:Z]таким образом, чтоA = F[:vectors]*F[:Schur]*F[:vectors]'. Собственные значенияAможно получить с помощьюF[:values].
-
schurfact!(A::StridedMatrix) → F::Schur -
Аналогично
schurfact, но использует входной аргумент в качестве рабочей области.
-
schur(A::StridedMatrix) → T::Matrix, Z::Matrix, λ::Vector -
Вычисляет факторизацию Шура матрицы
A. Методы возвращают (квази)треугольный фактор ШураTи ортогональные/унитарные векторы ШураZтаким образом, чтоA = Z*T*Z'. Собственные значенияAвозвращаются в вектореλ.См.
schurfact.
-
ordschur(F::Schur, select::Union{Vector{Bool}, BitVector}) → F::Schur -
Переупорядочивает факторизацию Шура
FматрицыA = Z*T*Z'в соответствии с логическим массивомselect, возвращая объект переупорядоченной факторизацииF. Выбранные собственные значения появляются на главной диагоналиF[:Schur], а соответствующие ведущие столбцыF[:vectors]образуют ортогональную/унитарную базу соответствующего правого инвариантного подпространства. В реальном случае комплексная сопряженная пара собственных значений должна быть либо включена, либо исключена черезselect.
-
ordschur!(F::Schur, select::Union{Vector{Bool}, BitVector}) → F::Schur -
То же, что и
ordschur, но перезаписывает факторизациюF.
-
ordschur(T::StridedMatrix, Z::StridedMatrix, select::Union{Vector{Bool}, BitVector}) → T::StridedMatrix, Z::StridedMatrix, λ::Vector -
Переупорядочивает факторизацию Шура вещественной матрицы
A = Z*T*Z'в соответствии с логическим массивомselectи возвращает переупорядоченные матрицыTиZ, а также вектор собственных значенийλ. Выбранные собственные значения появляются на главной диагоналиT, а соответствующие ведущие столбцыZобразуют ортогональную/унитарную базу соответствующего правого инвариантного подпространства. В реальном случае комплексная сопряженная пара собственных значений должна быть либо включена, либо исключена черезselect.
-
ordschur!(T::StridedMatrix, Z::StridedMatrix, select::Union{Vector{Bool}, BitVector}) → T::StridedMatrix, Z::StridedMatrix, λ::Vector -
Аналогично
ordschur, но перезаписывает входные аргументы.
-
schurfact(A::StridedMatrix, B::StridedMatrix) → F::GeneralizedSchur -
Вычисляет обобщенную факторизацию Шура (или QZ) матриц
AиB. (Квази)треугольные факторы Шура можно получить из объектаSchurFс помощьюF[:S]иF[:T], левые унитарные/ортогональные векторы Шура можно получить с помощьюF[:left]илиF[:Q], а правые унитарные/ортогональные векторы Шура — с помощьюF[:right]илиF[:Z]таким образом, чтоA=F[:left]*F[:S]*F[:right]'иB=F[:left]*F[:T]*F[:right]'. Обобщенные собственные значенияAиBможно получить с помощьюF[:alpha]./F[:beta].
-
schurfact!(A::StridedMatrix, B::StridedMatrix) → F::GeneralizedSchur -
Аналогично
schurfact, но использует входные матрицыAиBв качестве рабочей области.
-
ordschur(F::GeneralizedSchur, select::Union{Vector{Bool}, BitVector}) → F::GeneralizedSchur -
Переупорядочивает обобщенную факторизацию Шура
Fпары матриц(A, B) = (Q*S*Z', Q*T*Z')в соответствии с логическим массивомselectи возвращает объект GeneralizedSchurF. Выбранные собственные значения появляются на главной диагоналиF[:S]иF[:T], а левые и правые ортогональные/унитарные векторы Шура также переупорядочиваются таким образом, что(A, B) = F[:Q]*(F[:S], F[:T])*F[:Z]'по-прежнему выполняется, и обобщенные собственные значенияAиBвсе еще могут быть получены с помощьюF[:alpha]./F[:beta].
-
ordschur!(F::GeneralizedSchur, select::Union{Vector{Bool}, BitVector}) → F::GeneralizedSchur -
То же самое, что и
ordschur, но перезаписывает факторизациюF.
-
ordschur(S::StridedMatrix, T::StridedMatrix, Q::StridedMatrix, Z::StridedMatrix, select) → S::StridedMatrix, T::StridedMatrix, Q::StridedMatrix, Z::StridedMatrix, α::Vector, β::Vector -
Переупорядочивает обобщённую факторизацию Шура пары матриц
(A, B) = (Q*S*Z', Q*T*Z')в соответствии с логическим массивомselectи возвращает матрицыS,T,Q,Zи векторыαиβ. Выбранные собственные значения появляются на главной диагонали какSиT, и левые и правые унитарные/ортогональные векторы Шура также переупорядочиваются так, что(A, B) = Q*(S, T)*Z'всё ещё выполняется, и обобщённые собственные значенияAиBпо-прежнему могут быть получены с помощьюα./β.
-
ordschur!(S::StridedMatrix, T::StridedMatrix, Q::StridedMatrix, Z::StridedMatrix, select) → S::StridedMatrix, T::StridedMatrix, Q::StridedMatrix, Z::StridedMatrix, α::Vector, β::Vector -
То же самое, что и
ordschur, но перезаписывает факторизацию входных аргументов.
-
schur(A::StridedMatrix, B::StridedMatrix) → S::StridedMatrix, T::StridedMatrix, Q::StridedMatrix, Z::StridedMatrix, α::Vector, β::Vector -
См.
schurfact.
-
svdfact(A[, thin=true]) → SVD -
Вычисляет сингулярное разложение (SVD)
Aи возвращает объектSVD.U,S,VиVtмогут быть получены из факторизацииFс помощьюF[:U],F[:S],F[:V]иF[:Vt], так чтоA = U*diagm(S)*Vt. Алгоритм производитVtи поэтомуVtявляется более эффективным для извлечения, чемV.Если
thin=true(по умолчанию), возвращается тонкое SVD. Для матрицы \(M \times N\)A,Uявляется \(M \times M\) для полного SVD (thin=false) и \(M \times \min(M, N)\) для тонкого SVD.
-
svdfact!(A[, thin=true]) → SVD -
svdfact!аналогичноsvdfact(), но экономит память, перезаписывая входA, вместо создания копии.Если
thin=true(по умолчанию), возвращается тонкое SVD. Для матрицы \(M \times N\)A,Uявляется \(M \times M\) для полного SVD (thin=false) и \(M \times \min(M, N)\) для тонкого SVD.
-
svd(A[, thin=true]) → U, S, V -
Вычисляет SVD
A, возвращаяU, векторSиVтак, чтоA == U*diagm(S)*V'.Если
thin=true(по умолчанию), возвращается тонкое SVD. Для матрицы \(M \times N\)A,Uявляется \(M \times M\) для полного SVD (thin=false) и \(M \times \min(M, N)\) для тонкого SVD.svdявляется обёрткой вокругsvdfact(A)(), извлекая все части факторизацииSVDв кортеж. Поэтому прямое использованиеsvdfactболее эффективно.
-
svdvals(A) -
Возвращает сингулярные значения
A.
-
svdvals!(A) -
Возвращает сингулярные значения
A, экономя память путём перезаписи входных данных.
-
svdfact(A, B) → GeneralizedSVD -
Вычисляет обобщённое сингулярное разложение
AиB, возвращая объект факторизацииGeneralizedSVDF, такой чтоA = F[:U]*F[:D1]*F[:R0]*F[:Q]'иB = F[:V]*F[:D2]*F[:R0]*F[:Q]'.Для матрицы M-на-N
Aи P-на-N матрицыB,-
F[:U]- это ортогональная матрица M-на-M, -
F[:V]- это ортогональная матрица P-на-P, -
F[:Q]- это ортогональная матрица N-на-N, -
F[:R0]- это матрица (K+L)-на-N, правейшая (K+L)-на-(K+L) блочная матрица является невырожденной верхней блочно-треугольной, -
F[:D1]- это диагональная матрица M-на-(K+L) с 1 в первых K элементах, -
F[:D2]- это матрица P-на-(K+L) с диагональной верхней правой блочной матрицей L-на-L,
K+L- это эффективный числовой ранг матрицы[A; B].Элементы
F[:D1]иF[:D2]связаны, как объяснено в документации LAPACK для обобщённого SVD и подпрограммы xGGSVD3, которая вызывается (в LAPACK 3.6.0 и более поздних версиях). -
-
svd(A, B) → U, V, Q, D1, D2, R0 -
Обёртка вокруг
svdfact(A, B)()извлекает все части факторизации в кортеж. Поэтому прямое использованиеsvdfactобычно более эффективно. Функция возвращает обобщённое сингулярное разложениеAиB, возвращаяU,V,Q,D1,D2, иR0так, чтоA = U*D1*R0*Q'иB = V*D2*R0*Q'.
-
svdvals(A, B) -
Возвращает обобщённые сингулярные значения из обобщённого сингулярного разложения
AиB.
-
LinAlg.Givens(i1, i2, c, s) → G -
Линейный оператор поворота Гивенса. Поля
cиsпредставляют косинус и синус угла поворота соответственно. ТипGivensподдерживает левое умножениеG*Aи сопряжённое транспонированное правое умножениеA*G'. Тип не имеетsizeи поэтому может быть умножен на матрицы произвольного размера, при условииi2<=size(A,2)дляG*Aилиi2<=size(A,1)дляA*G'.См. также:
givens()
-
givens{T}(f::T, g::T, i1::Integer, i2::Integer) → (G::Givens, r::T) -
Вычисляет поворот Гивенса
Gи скалярrтак, что для любого вектораxгдеx[i1] = f x[i2] = g
результат умножения
y = G*x
имеет свойство
y[i1] = r y[i2] = 0
См. также:
LinAlg.Givens
-
givens(x::AbstractVector, i1::Integer, i2::Integer) → (G::Givens, r) -
Вычисляет поворот Гивенса
Gи скалярrтак, что результат умноженияB = G*x
имеет свойство
B[i1] = r B[i2] = 0
См. также:
LinAlg.Givens
-
givens(A::AbstractArray, i1::Integer, i2::Integer, j::Integer) → (G::Givens, r) -
Вычисляет поворот Гивенса
Gи скалярrтак, что результат умноженияB = G*A
имеет свойство
B[i1,j] = r B[i2,j] = 0
См. также:
LinAlg.Givens
-
triu(M) -
Верхняя треугольная часть матрицы.
-
triu(M, k) -
Возвращает верхнюю треугольную часть
Mначиная сk-й наддиагонали.
-
triu!(M) -
Верхняя треугольная часть матрицы, перезаписывая
Mв процессе.
-
triu!(M, k) -
Возвращает верхнюю треугольную часть
Mначиная сk-й наддиагонали, перезаписываяMв процессе.
-
tril(M) -
Нижняя треугольная часть матрицы.
-
tril(M, k) -
Возвращает нижнюю треугольную часть
Mначиная сk-й наддиагонали.
-
tril!(M) -
Нижняя треугольная часть матрицы, перезаписывая
Mв процессе.
-
tril!(M, k) -
Возвращает нижнюю треугольную часть
Mначиная сk-й наддиагонали, перезаписываяMв процессе.
-
diagind(M[, k]) -
Массив, содержащий индексы
Range-й диагонали матрицыM.
-
diag(M[, k]) -
k-я диагональ матрицы в виде вектора. Используйтеdiagmдля построения диагональной матрицы.
-
diagm(v[, k]) -
Построение диагональной матрицы и размещение
vнаk-й диагонали.
-
scale!(A, b) -
scale!(b, A) -
Масштабировать массив
Aна скалярb, перезаписываяAна месте.Если
Aявляется матрицей, аbвектором, тоscale!(A,b)масштабирует каждый столбецiAнаb[i](аналогичноA*Diagonal(b)), в то время какscale!(b,A)масштабирует каждую строкуiAнаb[i](аналогичноDiagonal(b)*A) опять же, работая на месте сA. Если масштабирование приводит к числу, не представимому типом элементовA, например, для целочисленных типов, выбрасывается исключениеInexactError.
-
Tridiagonal(dl, d, du) -
Построить трёхдиагональную матрицу из первой поддиагональной, диагональной и первой наддиагональной матриц соответственно. Результат имеет тип
Tridiagonalи предоставляет эффективные специализированные линейные решатели, но может быть преобразован в обычную матрицу с помощьюfull(). Длиныdlиduдолжны быть на единицу меньше длиныd.
-
rank(M) -
Вычислить ранг матрицы.
-
norm(A[, p]) -
Вычислить
p-норму вектора или операторную норму матрицыA, по умолчаниюp=2-норму.Для векторов
pможет принимать любое числовое значение (хотя не все значения дают математически допустимую норму вектора). В частности,norm(A, Inf)возвращает наибольшее значение вabs(A), в то время какnorm(A, -Inf)возвращает наименьшее.Для матриц используется норма матрицы, индуцированная вектором
p-нормы, где допустимые значенияpравны1,2, илиInf. (Обратите внимание, что для разреженных матрицp=2в настоящее время не реализована.) Используйтеvecnorm()для вычисления нормы Фробениуса.
-
vecnorm(A[, p]) -
Для любого итерируемого контейнера
A(включая массивы любой размерности) чисел (или любого типа элементов, для которых определенаnorm), вычислитеp-норму (по умолчаниюp=2) как если быAбыл вектором соответствующей длины.Например, если
Aявляется матрицей иp=2, то это эквивалентно норме Фробениуса.
-
normalize!(v[, p=2]) -
Нормализовать вектор
vна месте относительноp-нормы.Входы:
-
v::AbstractVector- вектор, подлежащий нормализации -
p::Real-p-норма, относительно которой нормализовать. По умолчанию: 2
Выход:
-
v- единичный вектор, представляющий входной вектор, масштабированный для получения нормы 1. Входной вектор изменяется на месте.
См. также:
normalize,qr -
-
normalize(v[, p=2]) -
Нормализовать вектор
vотносительноp-нормы.Входы:
-
v::AbstractVector- вектор, подлежащий нормализации -
p::Real-p-норма, относительно которой нормализовать. По умолчанию: 2
Выход:
-
v- единичный вектор, являющийся копией входного вектора, масштабированного для получения нормы 1
См. также:
normalize!,qr -
-
cond(M[, p]) -
Число обусловленности матрицы
M, вычисленное с использованием операторнойp-нормы. Допустимые значения дляpэто1,2(по умолчанию) илиInf.
-
condskeel(M[, x, p]) -
\[\begin{split}\kappa_S(M, p) & = \left\Vert \left\vert M \right\vert \left\vert M^{-1} \right\vert \right\Vert_p \\ \kappa_S(M, x, p) & = \left\Vert \left\vert M \right\vert \left\vert M^{-1} \right\vert \left\vert x \right\vert \right\Vert_p\end{split}\]
Число обусловленности Скеэла \(\kappa_S\) матрицы
M, необязательно относительно вектораx, как вычислено с помощью операторнойp-нормы.pравноInfпо умолчанию, если не указано. Допустимые значения дляp-1,2, илиInf.Эта величина также известна в литературе как число обусловленности Бауэра, относительное число обусловленности или число обусловленности по компонентам.
-
trace(M) -
След матрицы.
-
det(M) -
Определитель матрицы.
-
logdet(M) -
Логарифм определителя матрицы. Эквивалентно
log(det(M)), но может обеспечить повышенную точность и/или скорость.
-
logabsdet(M) -
Логарифм абсолютного значения определителя вещественной матрицы. Эквивалентно
(log(abs(det(M))), sign(det(M))), но может обеспечить повышенную точность и/или скорость.
-
inv(M) -
Обратная матрица.
-
pinv(M[, tol]) -
Вычисляет псевдообратную матрицу по методу Мура-Пенроуза.
Для матриц
Mс плавающей точкой удобно вычислять псевдообратную матрицу, инвертируя только сингулярные значения, превышающие заданный порогtol.Оптимальный выбор
tolварьируется в зависимости от значенияMи предполагаемого применения псевдообратной матрицы. Значение по умолчаниюtolравноeps(real(float(one(eltype(M)))))*maximum(size(A)), что в сущности является машинной эпсилон для вещественной части элемента матрицы, умноженной на большую размерность матрицы. Для инвертирования плотных плохо обусловленных матриц в смысле метода наименьших квадратов рекомендуетсяtol = sqrt(eps(real(float(one(eltype(M)))))).Дополнительную информацию см. в [issue8859], [B96], [S84], [KY88].
[issue8859] Задача 8859, «Исправить метод наименьших квадратов», https://github.com/JuliaLang/julia/pull/8859 [B96] Åke Björck, «Численные методы для задач наименьших квадратов», SIAM Press, Филадельфия, 1996, «Другие названия в прикладной математике», т. 51. doi:10.1137/1.9781611971484 [S84] -
- Stewart, «Вырожденность ранга», SIAM Journal on Scientific and Statistical Computing, 5(2), 1984, 403-413. doi:10.1137/0905030
[KY88] Константинос Константинидес и Кунг Яо, «Статистический анализ эффективных сингулярных значений при определении ранга матрицы», IEEE Transactions on Acoustics, Speech and Signal Processing, 36(5), 1988, 757-763. doi:10.1109/29.1585 -
-
nullspace(M) -
Базис для нуль-пространства
M.
-
repmat(A, n, m) -
Построить матрицу, повторяя данную матрицу
nраз по размерности 1 иmраз по размерности 2.
-
repeat(A::AbstractArray; inner=ntuple(x->1, ndims(A)), outer=ntuple(x->1, ndims(A))) -
Построить массив, повторяя элементы
A. i-й элементinnerуказывает количество повторений отдельных элементов i-й размерностиA. i-й элементouterуказывает количество повторений среза по i-й размерностиA. Еслиinnerилиouterопущены, повторение не выполняется.julia> repeat(1:2, inner=2) 4-element Array{Int64,1}: 1 1 2 2 julia> repeat(1:2, outer=2) 4-element Array{Int64,1}: 1 2 1 2 julia> repeat([1 2; 3 4], inner=(2, 1), outer=(1, 3)) 4×6 Array{Int64,2}: 1 2 1 2 1 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4 3 4 3 4
-
kron(A, B) -
Кронекеровское тензорное произведение двух векторов или двух матриц.
-
blkdiag(A...) -
Объединить матрицы по блочно-диагональной схеме. В настоящее время реализовано только для разреженных матриц.
-
linreg(x, y) -
Выполнить простую линейную регрессию с использованием метода обычных наименьших квадратов. Возвращает
aиbтакие, чтоa + b*xявляется ближайшей прямой к заданным точкам(x, y), то есть таким, что квадратная ошибка междуyиa + b*xминимизируется.Примеры:
using PyPlot x = 1.0:12.0 y = [5.5, 6.3, 7.6, 8.8, 10.9, 11.79, 13.48, 15.02, 17.77, 20.81, 22.0, 22.99] a, b = linreg(x, y) # Linear regression plot(x, y, "o") # Plot (x, y) points plot(x, a + b*x) # Plot line determined by linear regression
См. также:
\,cov,std,mean
-
expm(A) -
Вычислить матричную экспоненту
A, определяемую\[e^A = \sum_{n=0}^{\infty} \frac{A^n}{n!}.\]Для симметричных или эрмитовых
A, используется собственное разложение (eigfact()), в противном случае выбирается алгоритм масштабирования и возведения в квадрат (см. [H05]).[H05] Nicholas J. Higham, “The squaring and scaling method for the matrix exponential revisited”, SIAM Journal on Matrix Analysis and Applications, 26(4), 2005, 1179-1193. doi:10.1137/090768539
-
logm(A::StridedMatrix) -
Если у
Aнет отрицательных действительных собственных значений, вычислить главную матричную логарифмA, т. е. единственную матрицу \(X\) такую, что \(e^X = A\) и \(-\pi < Im(\lambda) < \pi\) для всех собственных значений \(\lambda\) матрицы \(X\). Если уAесть не положительные собственные значения, то возвращается не главная матричная функция, когда это возможно.Если
Aсимметричная или эрмитова, используется её собственное разложение (eigfact()), еслиAтреугольная, используется улучшенная версия алгоритма обратного масштабирования и возведения в квадрат (см. [AH12] и [AHR13]). Для общих матриц вычисляется комплексная форма Шюра (schur()) и алгоритм треугольной формы используется для треугольного множителя.[AH12] Awad H. Al-Mohy and Nicholas J. Higham, “Improved inverse scaling and squaring algorithms for the matrix logarithm”, SIAM Journal on Scientific Computing, 34(4), 2012, C153-C169. doi:10.1137/110852553 [AHR13] Awad H. Al-Mohy, Nicholas J. Higham and Samuel D. Relton, “Computing the Fréchet derivative of the matrix logarithm and estimating the condition number”, SIAM Journal on Scientific Computing, 35(4), 2013, C394-C410. doi:10.1137/120885991
-
sqrtm(A) -
Если у
Aнет отрицательных действительных собственных значений, вычислить главную матричную квадратный кореньA, то есть единственную матрицу \(X\) с собственными значениями, имеющими положительные действительные части, такими что \(X^2 = A\). В противном случае возвращается неглавный квадратный корень.Если
Aсимметричная или эрмитова, для вычисления квадратного корня используется её собственное разложение (eigfact()). В противном случае квадратный корень определяется с помощью метода Бьёрка-Хаммарлинга, который вычисляет комплексную форму Шюра (schur()) и затем комплексный квадратный корень из треугольного множителя.[BH83] Åke Björck and Sven Hammarling, “A Schur method for the square root of a matrix”, Linear Algebra and its Applications, 52-53, 1983, 127-140. doi:10.1016/0024-3795(83)80010-X
-
lyap(A, C) -
Вычисляет решение
Xдля непрерывного уравнения ЛиувилляAX + XA' + C = 0, где ни одно собственное значениеAне имеет нулевой действительной части, и никакие два собственных значения не являются отрицательными комплексными сопряженными друг друга.
-
sylvester(A, B, C) -
Вычисляет решение
Xдля уравнения СильвестраAX + XB + C = 0, гдеA,BиCимеют совместимые размерности, иAи-Bне имеют собственных значений с одинаковой действительной частью.
-
issymmetric(A) → Bool -
Проверка, является ли матрица симметричной.
-
isposdef(A) → Bool -
Проверка, является ли матрица положительно определенной.
-
isposdef!(A) → Bool -
Проверка, является ли матрица положительно определенной, перезаписывая
Aв процессе.
-
istril(A) → Bool -
Проверка, является ли матрица нижнетреугольной.
-
istriu(A) → Bool -
Проверка, является ли матрица верхнетреугольной.
-
isdiag(A) → Bool -
Проверка, является ли матрица диагональной.
-
ishermitian(A) → Bool -
Проверка, является ли матрица эрмитовой.
-
transpose(A) -
Оператор транспонирования (
.').
-
transpose!(dest, src) -
Транспонировать массив
srcи сохранить результат в предварительно выделенном массивеdest, размер которого должен соответствовать(size(src,2),size(src,1)). Поддержка транспонирования на месте не поддерживается, и непредсказуемые результаты могут возникнуть, еслиsrcиdestимеют перекрывающиеся области памяти.
-
ctranspose(A) -
Оператор сопряженного транспонирования (
').
-
ctranspose!(dest, src) -
Сопряженно транспонировать массив
srcи сохранить результат в предварительно выделенном массивеdest, размер которого должен соответствовать(size(src,2),size(src,1)). Поддержка транспонирования на месте не поддерживается, и непредсказуемые результаты могут возникнуть, еслиsrcиdestимеют перекрывающиеся области памяти.
-
eigs(A; nev=6, ncv=max(20, 2*nev+1), which="LM", tol=0.0, maxiter=300, sigma=nothing, ritzvec=true, v0=zeros((0, ))) → (d,[v,],nconv,niter,nmult,resid) -
Вычисляет собственные значения
dматрицыAс использованием неявных итераций Ланцоша или Арнольди для вещественно-симметричных или общих несимметричных матриц соответственно.Поддерживаются следующие ключевые аргументы:
-
nev: Число собственных значений -
ncv: Число векторов Кристова, используемых в вычислениях; должно удовлетворятьnev+1 <= ncv <= nдля вещественно-симметричных задач иnev+2 <= ncv <= nдля других задач, гдеn— размер входной матрицыA. По умолчаниюncv = max(20,2*nev+1). Обратите внимание, что эти ограничения ограничивают размер входной матрицыAдо, по крайней мере, 2. -
which: тип вычисляемых собственных значений. См. примечание ниже.
whichтип собственных значений :LMсобственные значения наибольшего модуля (по умолчанию) :SMсобственные значения наименьшего модуля :LRсобственные значения с наибольшей действительной частью :SRсобственные значения с наименьшей действительной частью :LIсобственные значения с наибольшей мнимой частью (несимметричная или комплексная Aтолько):SIсобственные значения с наименьшей мнимой частью (несимметричная или комплексная Aтолько):BEвычислить половину собственных значений с каждого конца спектра, с большей вероятностью выбирая значения с высокой стороны. (только вещественно-симметричная A)-
tol: параметр, определяющий относительную толерантность для сходимости значений Ритца (приближений собственных значений). Значение Ритца \(θ\) считается сходящимся, если его связанный остаток меньше или равен произведениюtolи \(max(ɛ^{2/3}, |θ|)\), гдеɛ = eps(real(eltype(A)))/2— машинная точность LAPACK. Остаток, связанный со значением \(θ\) и соответствующим вектором Ритца \(v\), определяется нормой \(||Av - vθ||\). Указанное значениеtolдолжно быть положительным; в противном случае оно игнорируется, и вместо него используется \(ɛ\). По умолчанию: \(ɛ\). -
maxiter: Максимальное количество итераций (по умолчанию = 300) -
sigma: Указывает сдвиг уровня, используемый в обратной итерации. Еслиnothing(по умолчанию), используется обычная (прямая) итерация. В противном случае, находят собственные значения, близкие кsigmaс использованием итераций сдвига и обратного преобразования. -
ritzvec: Возвращает векторы Ритцаv(собственные векторы), еслиtrue -
v0: начальный вектор, с которого начинаются итерации
eigsвозвращаетnevзапрошенные собственные значения вd, соответствующие векторы Ритцаv(только еслиritzvec=true), количество сходящихся собственных значенийnconv, количество итерацийniterи количество умножений матрицы на векторnmult, а также конечный вектор остаткаresid.Примечание
Ключевые слова
sigmaиwhichвзаимодействуют: описание искомых собственных значенийwhichне обязательно относятся к собственным значениямA, а скорее к линейному оператору, построенному по заданному режиму итераций, имплицитному вsigma.sigmaрежим итераций whichотносится к собственным значениямnothingобычный (прямой) \(A\) вещественный или комплексный обратный со сдвигом уровня sigma\((A - \sigma I )^{-1}\) Примечание
Хотя
tolимеет значение по умолчанию, лучший выбор сильно зависит от матрицыA. Рекомендуется, чтобы пользователи _всегда_ задавали значениеtolсоответствующее их конкретным потребностям.Подробности о том, как оцениваются погрешности вычисленных собственных значений, см. в:
-
-
- Parlett, «The Symmetric Eigenvalue Problem», SIAM: Philadelphia, 2/e (1998), Глава 13.2, «Доступ к точности в задачах Ланцоша», стр. 290-292 и далее.
-
-
-
- Lehoucq и D. C. Sorensen, «Deflation Techniques for an Implicitly Restarted Arnoldi Iteration», SIAM Journal on Matrix Analysis and Applications (1996), 17(4), 789–821. doi:10.1137/S0895479895281484
-
-
-
eigs(A, B; nev=6, ncv=max(20, 2*nev+1), which="LM", tol=0.0, maxiter=300, sigma=nothing, ritzvec=true, v0=zeros((0, ))) → (d,[v,],nconv,niter,nmult,resid) -
Вычисляет обобщенные собственные значения
dматрицAиBс использованием неявных итераций Ланцоша или Арнольди для вещественно-симметричных или общих несимметричных матриц соответственно.Поддерживаются следующие ключевые аргументы:
-
nev: Число собственных значений -
ncv: Число векторов Кристова, используемых в вычислениях; должно удовлетворятьnev+1 <= ncv <= nдля вещественно-симметричных задач иnev+2 <= ncv <= nдля других задач, гдеn— размер входных матрицAиB. По умолчаниюncv = max(20,2*nev+1). Обратите внимание, что эти ограничения ограничивают размер входной матрицыAдо, по крайней мере, 2. -
which: тип вычисляемых собственных значений. См. примечание ниже.
whichтип собственных значений :LMсобственные значения наибольшего модуля (по умолчанию) :SMсобственные значения наименьшего модуля :LRсобственные значения с наибольшей действительной частью :SRсобственные значения с наименьшей действительной частью :LIсобственные значения с наибольшей мнимой частью (несимметричная или комплексная Aтолько):SIсобственные значения с наименьшей мнимой частью (несимметричная или комплексная Aтолько):BEвычислить половину собственных значений с каждого конца спектра, с большей вероятностью выбирая значения с высокой стороны. (только вещественно-симметричная Aтолько)-
tol: относительная толерантность, используемая в критерии сходимости для собственных значений, аналогичнаtolв методеeigs()для обычной задачи на собственные значения, но эффективно для собственных значений \(B^{-1} A\) вместо \(A\). См. документацию для обычной задачи на собственные значения вeigs()и сопутствующее примечание оtol. -
maxiter: Максимальное количество итераций (по умолчанию = 300) -
sigma: Указывает сдвиг уровня, используемый в обратной итерации. Еслиnothing(по умолчанию), используется обычная (прямая) итерация. В противном случае, находят собственные значения, близкие кsigmaс использованием итераций сдвига и обратного преобразования. -
ritzvec: Возвращает векторы Ритцаv(собственные векторы), еслиtrue -
v0: начальный вектор, с которого начинаются итерации
eigsвозвращаетnevзапрошенные собственные значения вd, соответствующие векторы Ритцаv(только еслиritzvec=true), количество сходящихся собственных значенийnconv, количество итерацийniterи количество умножений матрицы на векторnmult, а также конечный вектор остаткаresid.Пример
X = sprand(10, 5, 0.2) eigs(X, nsv = 2, tol = 1e-3)
Примечание
Ключевые слова
sigmaиwhichвзаимодействуют: описание искомых собственных значенийwhichне обязательно относится к задаче на собственные значения \(Av = Bv\lambda\), а скорее к линейному оператору, построенному по заданному режиму итераций, имплицитному вsigma.sigmaрежим итераций whichотносится к задачеnothingобычный (прямой) \(Av = Bv\lambda\) вещественный или комплексный обратный со сдвигом уровня sigma\((A - \sigma B )^{-1}B = v\nu\) -
-
svds(A; nsv=6, ritzvec=true, tol=0.0, maxiter=1000, ncv=2*nsv, u0=zeros((0, )), v0=zeros((0, ))) → (SVD([left_sv,] s, [right_sv,]), nconv, niter, nmult, resid) -
Вычисляет наибольшие сингулярные значения
sAс использованием неявно перезапускаемых итераций Ланцоша, полученных изeigs().Входные данные
-
A: Линейный оператор, сингулярные значения которого требуются.Aможет быть представлен как подтипAbstractArray, например, разреженная матрица, или любой другой тип, поддерживающий четыре методаsize(A),eltype(A),A * vector, иA' * vector. -
nsv: Количество сингулярных значений. По умолчанию: 6. -
ritzvec: Еслиtrue, вернуть левые и правые сингулярные векторыleft_svиright_sv. Еслиfalse, опустить сингулярные векторы. По умолчанию:true. -
tol: толерантность, см.eigs(). -
maxiter: Максимальное количество итераций, см.eigs(). По умолчанию: 1000. -
ncv: Максимальный размер подпространства Кристоффеля, см.eigs()(там он называетсяnev). По умолчанию:2*nsv. -
u0: Начальное приближение для первого левого вектора Кристоффеля. Он может иметь длинуm(первое измерениеA) или 0. -
v0: Начальное приближение для первого правого вектора Кристоффеля. Он может иметь длинуn(второе измерениеA) или 0.
Выходные данные
-
svd: ОбъектSVD, содержащий левые сингулярные векторы, запрашиваемые значения и правые сингулярные векторы. Еслиritzvec = false, левые и правые сингулярные векторы будут пусты. -
nconv: Количество сошедшихся сингулярных значений. -
niter: Количество итераций. -
nmult: Количество матрично-векторных произведений, используемых. -
resid: Конечный остаточный вектор.
Пример
X = sprand(10, 5, 0.2) svds(X, nsv = 2)
Примечание по реализации
svds(A)формально эквивалентно вызовуeigsдля выполнения неявно перезапускаемой тридиагональной итерации Ланцоша для эрмитовой матрицы \(\begin{pmatrix} 0 & A^\prime \\ A & 0 \end{pmatrix}\), собственные значения которой являются плюс и минус сингулярными значениями \(A\). -
-
peakflops(n; parallel=false) -
peakflopsвычисляет пиковую скорость вычислений компьютера с использованием двойной точностиBase.LinAlg.BLAS.gemm!(). По умолчанию, если не указаны аргументы, он умножает матрицу размераn x n, гдеn = 2000. Если используемый BLAS использует несколько потоков, достигаются более высокие скорости вычислений. Количество потоков BLAS можно установить с помощьюBLAS.set_num_threads(n).Если ключевой аргумент
parallelустановлен вtrue,peakflopsвыполняется параллельно на всех процессорах-рабочих. Возвращается скорость вычислений всего параллельного компьютера. При параллельной работе используется только 1 поток BLAS. Аргументnпо-прежнему относится к размеру задачи, решаемой на каждом процессоре.
Низкоуровневые операции с матрицами
Операции с матрицами, включающие транспонирование, такие как A' \ B , преобразуются анализатором Julia в вызовы специально названных функций, таких как Ac_ldiv_B. Если вы хотите перегрузить эти операции для собственных типов, полезно знать имена этих функций.
Также во многих случаях существуют «на месте» версии операций с матрицами, которые позволяют вам предоставить предварительно выделенный выходной вектор или матрицу. Это полезно при оптимизации критически важного кода, чтобы избежать накладных расходов повторных выделений. Эти операции «на месте» снабжены суффиксом ! ниже (например, A_mul_B!) в соответствии с обычной конвенцией Julia.
-
A_ldiv_B!([Y, ]A, B) → Y -
Вычислить
A \ B«на месте» и сохранить результат вY, вернув результат. Если передано только два аргумента, тоA_ldiv_B!(A, B)перезаписываетBрезультатом.Аргумент
Aне должен быть матрицей. Вместо матриц он должен быть объектом факторизации (например, полученным с помощьюfactorize()илиcholfact()). Причина в том, что сама факторизация как дорогостоящая, так и обычно выделяет память (хотя это также можно сделать «на месте» с помощью, например,lufact!()), а ситуации, требующиеA_ldiv_B!в критически важных задачах производительности, обычно требуют точного контроля над факторизациейA.
-
A_ldiv_Bc(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(A\) \ \(Bᴴ\).
-
A_ldiv_Bt(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(A\) \ \(Bᵀ\).
-
A_mul_B!(Y, A, B) → Y -
Вычисляет произведение матриц или матрицы и вектора \(A⋅B\) и сохраняет результат в
Y, перезаписывая существующее значениеY. Обратите внимание, чтоYне должно быть связано ни сA, ни сB.julia> A=[1.0 2.0; 3.0 4.0]; B=[1.0 1.0; 1.0 1.0]; Y = similar(B); A_mul_B!(Y, A, B); julia> Y 2×2 Array{Float64,2}: 3.0 3.0 7.0 7.0
-
A_mul_Bc(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(A⋅Bᴴ\).
-
A_mul_Bt(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(A⋅Bᵀ\).
-
A_rdiv_Bc(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(A / Bᴴ\).
-
A_rdiv_Bt(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(A / Bᵀ\).
-
Ac_ldiv_B(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᴴ\) \ \(B\).
-
Ac_ldiv_B!([Y, ]A, B) → Y -
Аналогично
A_ldiv_B!(), но возвращает \(Aᴴ\) \ \(B\), вычисляя результат «на месте» вY(или перезаписываяBеслиYне указан).
-
Ac_ldiv_Bc(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᴴ\) \ \(Bᴴ\).
-
Ac_mul_B(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᴴ⋅B\).
-
Ac_mul_Bc(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᴴ Bᴴ\).
-
Ac_rdiv_B(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᴴ / B\).
-
Ac_rdiv_Bc(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᴴ / Bᴴ\).
-
At_ldiv_B(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᵀ\) \ \(B\).
-
At_ldiv_B!([Y, ]A, B) → Y -
Аналогично
A_ldiv_B!(), но возвращает \(Aᵀ\) \ \(B\), вычисляя результат «на месте» вY(или перезаписываяBеслиYне указан).
-
At_ldiv_Bt(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᵀ\) \ \(Bᵀ\).
-
At_mul_B(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᵀ⋅B\).
-
At_mul_Bt(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᵀ⋅Bᵀ\).
-
At_rdiv_B(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᵀ / B\).
-
At_rdiv_Bt(A, B) -
Для матриц или векторов \(A\) и \(B\) вычисляет \(Aᵀ / Bᵀ\).
Функции BLAS
В Julia (как и во многих научных вычислениях), операции с плотной линейной алгеброй основаны на библиотеке LAPACK, которая, в свою очередь, построена на основе основных блоков линейной алгебры, известных как BLAS. Существуют высокооптимизированные реализации BLAS для каждой архитектуры компьютера, и иногда в высокопроизводительных процедурах линейной алгебры полезно вызывать функции BLAS напрямую.
Base.LinAlg.BLAS предоставляет обертки для некоторых функций BLAS. Функции BLAS, которые перезаписывают один из входных массивов, имеют имена, заканчивающиеся на '!'. Обычно функция BLAS имеет четыре метода, определённых для Float64, Float32, Complex128, и Complex64 массивов.
-
dot(n, X, incx, Y, incy) -
Скалярное произведение двух векторов, состоящих из
nэлементов массиваXс шагомincxиnэлементов массиваYс шагомincy.
-
dotu(n, X, incx, Y, incy) -
Функция скалярного произведения для двух комплексных векторов.
-
dotc(n, X, incx, U, incy) -
Функция скалярного произведения для двух комплексных векторов, конъюгирующая первый вектор.
-
blascopy!(n, X, incx, Y, incy) -
Копирование
nэлементов массиваXс шагомincxв массивYс шагомincy. ВозвращаетY.
-
nrm2(n, X, incx) -
2-норма вектора, состоящего из
nэлементов массиваXс шагомincx.
-
asum(n, X, incx) -
Сумма абсолютных значений первых
nэлементов массиваXс шагомincx.
-
axpy!(a, X, Y) -
Перезаписать
Yзначениемa*X + Y. ВозвращаетY.
-
scal!(n, a, X, incx) -
Перезаписать
Xзначениемa*Xдля первыхnэлементов массиваXс шагомincx. ВозвращаетX.
-
scal(n, a, X, incx) -
Возвращает
X, умноженный наaдля первыхnэлементов массиваXс шагомincx.
-
ger!(alpha, x, y, A) -
Обновление матрицы
Aс векторамиxиyкакalpha*x*y' + A.
-
syr!(uplo, alpha, x, A) -
Обновление симметричной матрицы
Aс векторомxкакalpha*x*x.' + A. Когдаuploравно ‘U’, обновляется верхняя треугольная частьA(‘L’ для нижней треугольной части). ВозвращаетA.
-
syrk!(uplo, trans, alpha, A, beta, C) -
Обновление симметричной матрицы
Cкакalpha*A*A.' + beta*Cилиalpha*A.'*A + beta*Cв зависимости от того, является лиtrans‘N’ или ‘T’. Когдаuploравно ‘U’, обновляется верхняя треугольная частьC(‘L’ для нижней треугольной части). ВозвращаетC.
-
syrk(uplo, trans, alpha, A) -
Возвращает либо верхнюю треугольную часть, либо нижнюю треугольную часть в зависимости от
uplo(‘U’ или ‘L’), матрицыalpha*A*A.'илиalpha*A.'*A, в зависимости отtrans(‘N’ или ‘T’).
-
her!(uplo, alpha, x, A) -
Методы только для комплексных массивов. Обновление эрмитовой матрицы
Aс векторомxкакalpha*x*x' + A. Когдаuploравно ‘U’, обновляется верхняя треугольная частьA(‘L’ для нижней треугольной части). ВозвращаетA.
-
herk!(uplo, trans, alpha, A, beta, C) -
Методы только для комплексных массивов. Обновление эрмитовой матрицы
Cкакalpha*A*A' + beta*Cилиalpha*A'*A + beta*Cв зависимости от того, является лиtrans‘N’ или ‘T’. Когдаuploравно ‘U’, обновляется верхняя треугольная частьC(‘L’ для нижней треугольной части). ВозвращаетC.
-
herk(uplo, trans, alpha, A) -
Методы только для комплексных массивов. Возвращает либо верхнюю треугольную часть, либо нижнюю треугольную часть, в зависимости от
uplo(‘U’ или ‘L’), матрицыalpha*A*A'илиalpha*A'*A, в зависимости отtrans(‘N’ или ‘T’).
-
gbmv!(trans, m, kl, ku, alpha, A, x, beta, y) -
Обновление вектора
yкакalpha*A*x + beta*yилиalpha*A'*x + beta*yв зависимости отtrans(‘N’ или ‘T’). МатрицаA— это общая полосовая матрица размераmнаsize(A,2)сklподдиагоналями иkuнаддиагоналями. Возвращает обновлённыйy.
-
gbmv(trans, m, kl, ku, alpha, A, x, beta, y) -
Возвращает
alpha*A*xилиalpha*A'*xв зависимости отtrans(‘N’ или ‘T’). МатрицаA— это общая полосовая матрица размераmнаsize(A,2)сklподдиагоналями иkuнаддиагоналями.
-
sbmv!(uplo, k, alpha, A, x, beta, y) -
Обновление вектора
yкакalpha*A*x + beta*y, гдеA— это симметричная полосовая матрица порядкаsize(A,2)сkнаддиагоналями, хранящимися в аргументеA. Схема храненияAописана в справочном модуле BLAS, уровень-2 BLAS по адресу <http://www.netlib.org/lapack/explore-html/>.Возвращает обновлённый
y.
-
sbmv(uplo, k, alpha, A, x) -
Возвращает
alpha*A*x, гдеA— это симметричная полосовая матрица порядкаsize(A,2)сkнаддиагоналями, хранящимися в аргументеA.
-
sbmv(uplo, k, A, x) -
Возвращает
A*x, гдеA— это симметричная полосовая матрица порядкаsize(A,2)сkнаддиагоналями, хранящимися в аргументеA.
-
gemm!(tA, tB, alpha, A, B, beta, C) -
Обновляет
Cкакalpha*A*B + beta*Cили другие три варианта в зависимости отtA(транспонированиеA) иtB. Возвращает обновлённыйC.
-
gemm(tA, tB, alpha, A, B) -
Возвращает
alpha*A*Bили другие три варианта в зависимости отtA(транспонированиеA) иtB.
-
gemm(tA, tB, A, B) -
Возвращает
A*Bили другие три варианта в зависимости отtA(транспонированиеA) иtB.
-
gemv!(tA, alpha, A, x, beta, y) -
Обновляет вектор
yкакalpha*A*x + beta*yилиalpha*A'x + beta*yв зависимости отtA(транспонированиеA). Возвращает обновлённыйy.
-
gemv(tA, alpha, A, x) -
Возвращает
alpha*A*xилиalpha*A'xв зависимости отtA(транспонированиеA).
-
gemv(tA, A, x) -
Возвращает
A*xилиA'xв зависимости отtA(транспонированиеA).
-
symm!(side, ul, alpha, A, B, beta, C) -
Обновляет
Cкакalpha*A*B + beta*Cилиalpha*B*A + beta*Cв зависимости отside.Aпредполагается симметричной. Используется толькоulтреугольникA. Возвращает обновлённыйC.
-
symm(side, ul, alpha, A, B) -
Возвращает
alpha*A*Bилиalpha*B*Aв зависимости отside.Aпредполагается симметричной. Используется толькоulтреугольникA.
-
symm(side, ul, A, B) -
Возвращает
A*BилиB*Aв зависимости отside.Aпредполагается симметричной. Используется толькоulтреугольникA.
-
symm(tA, tB, alpha, A, B) -
Возвращает
alpha*A*Bили другие три варианта в соответствии сtA(транспонированиеA) иtB.
-
symv!(ul, alpha, A, x, beta, y) -
Обновить вектор
yкакalpha*A*x + beta*y. Предполагается, чтоAявляется симметричной. Используется толькоulтреугольная частьA. Возвращает обновлённыйy.
-
symv(ul, alpha, A, x) -
Возвращает
alpha*A*x. Предполагается, чтоAявляется симметричной. Используется толькоulтреугольная частьA.
-
symv(ul, A, x) -
Возвращает
A*x. Предполагается, чтоAявляется симметричной. Используется толькоulтреугольная частьA.
-
trmm!(side, ul, tA, dA, alpha, A, B) -
Обновить
Bкакalpha*A*Bили один из трёх других вариантов, определённыхside(слева или справа) иtA(транспонированиеA). Используется толькоulтреугольная частьA.dAуказывает, является лиAунитреугольной (диагональ предполагается равной единице). Возвращает обновлённыйB.
-
trmm(side, ul, tA, dA, alpha, A, B) -
Возвращает
alpha*A*Bили один из трёх других вариантов, определённыхside(слева или справа) иtA(транспонированиеA). Используется толькоulтреугольная частьA.dAуказывает, является лиAунитреугольной (диагональ предполагается равной единице).
-
trsm!(side, ul, tA, dA, alpha, A, B) -
Перезаписать
BрешениемA*X = alpha*Bили одним из трёх других вариантов, определённыхside(слева или справа отX) иtA(транспонированиеA). Используется толькоulтреугольная частьA.dAуказывает, является лиAунитреугольной (диагональ предполагается равной единице). Возвращает обновлённыйB.
-
trsm(side, ul, tA, dA, alpha, A, B) -
Возвращает решение
A*X = alpha*Bили один из трёх других вариантов, определённыхside(слева или справа отX) иtA(транспонированиеA). Используется толькоulтреугольная частьA.dAуказывает, является лиAунитреугольной (диагональ предполагается равной единице).
-
trmv!(ul, tA, dA, A, b) -
Возвращает
op(A)*b, гдеopопределяетсяtA(Nдля единичной матрицы,Tдля транспонированияA, иCдля сопряжённого транспонированияA). Используется толькоulтреугольная часть (Uдля верхней,Lдля нижней)A.dAуказывает, является лиAунитреугольной (диагональ предполагается равной единице, еслиU, или не-унитреугольной, еслиN). Умножение происходит непосредственно вb.
-
trmv(ul, tA, dA, A, b) -
Возвращает
op(A)*b, гдеopопределяетсяtA(Nдля единичной матрицы,Tдля транспонированияA, иCдля сопряжённого транспонированияA). Используется толькоulтреугольная часть (Uдля верхней,Lдля нижней)A.dAуказывает, является лиAунитреугольной (диагональ предполагается равной единице, еслиU, или не-унитреугольной, еслиN).
-
trsv!(ul, tA, dA, A, b) -
Перезаписать
bс решениемA*x = bили одним из двух других вариантов, определённыхtA(транспонированиеA) иul(треугольная частьAиспользуется).dAуказывает, является лиAунитреугольной (диагональ предполагается равной единице). Возвращает обновлённыйb.
-
trsv(ul, tA, dA, A, b) -
Возвращает решение
A*x = bили один из двух других вариантов, определённыхtA(транспонированиеA) иul(используется треугольная частьA).dAуказывает, является лиAунитреугольной (диагональ предполагается равной единице).
-
set_num_threads(n) -
Установить количество потоков, которые должна использовать библиотека BLAS.
-
I -
Объект типа
UniformScaling, представляющий единичную матрицу любого размера.
Функции LAPACK
Base.LinAlg.LAPACK предоставляет обёртки для некоторых функций LAPACK для линейной алгебры. Функции, которые перезаписывают один из входных массивов, имеют имена, заканчивающиеся на '!'.
Обычно у функции определены 4 метода, по одному для массивов Float64, Float32, Complex128 и Complex64.
Обратите внимание, что API LAPACK, предоставленный Julia, может и будет изменяться в будущем. Поскольку этот API не является пользовательским, нет обязательства поддерживать/удалять этот конкретный набор функций в будущих выпусках.
-
gbtrf!(kl, ku, m, AB) → (AB, ipiv) -
Вычислить LU-разложение полосовой матрицы
AB.kl— первая поддиагональ, содержащая ненулевую полосу,ku— последняя наддиагональ, содержащая ненулевую, аm— первая размерность матрицыAB. Возвращает LU-разложение на месте иipiv, вектор используемых пивот-элементов.
-
gbtrs!(trans, kl, ku, m, AB, ipiv, B) -
Решить уравнение
AB * X = B.transопределяет ориентациюAB. Это может бытьN(без транспонирования),T(транспонирование) илиC(сопряжённое транспонирование).kl— первая поддиагональ, содержащая ненулевую полосу,ku— последняя наддиагональ, содержащая ненулевую, аm— первая размерность матрицыAB.ipiv— вектор пивот-элементов, возвращённый изgbtrf!. Возвращает вектор или матрицуX, перезаписываяBна месте.
-
gebal!(job, A) → (ilo, ihi, scale) -
Балансировка матрицы
Aперед вычислением её собственных значений или факторизации Шюра.jobможет быть одним изN(Aне будет переупорядочена или масштабирована),P(Aбудет только переупорядочена),S(Aбудет только масштабирована) илиB(Aбудет переупорядочена и масштабирована). ИзменяетAна месте и возвращаетilo,ihi, иscale. Если переупорядочивание было включено,A[i,j] = 0еслиj > iи1 < j < iloилиj > ihi.scaleсодержит информацию о проведённых масштабированиях/переупорядочениях.
-
gebak!(job, side, ilo, ihi, scale, V) -
Преобразование собственных векторов
Vматрицы, сбалансированной с помощьюgebal!, в несбалансированные/непереупорядоченные собственные векторы исходной матрицы. ИзменяетVна месте.sideможет бытьL(преобразуются левые собственные векторы) илиR(преобразуются правые собственные векторы).
-
gebrd!(A) → (A, d, e, tauq, taup) -
Приводит
Aна месте к блочно-диагональной формеA = QBP'. ВозвращаетA, содержащую блочно-диагональную матрицуB;d, содержащую диагональные элементыB;e, содержащую внедиагональные элементыB;tauq, содержащую элементарные отражатели, представляющиеQ; иtaup, содержащую элементарные отражатели, представляющиеP.
-
gelqf!(A, tau) -
Вычислить LQ-факторизацию
A,A = LQ.tauсодержит скаляры, которые параметризуют элементарные отражатели факторизации.tauдолжна иметь длину не меньше наименьшего размераA.Возвращает
Aиtauизменённые на месте.
-
gelqf!(A) → (A, tau) -
Вычислить
LQфакторизациюA,A = LQ.Возвращает
A, изменённый на месте, иtau, который содержит скаляры, параметризующие элементарные отражатели факторизации.
-
geqlf!(A, tau) -
Вычислить
QLфакторизациюA,A = QL.tauсодержит скаляры, параметризующие элементарные отражатели факторизации.tauдолжен иметь длину, большую или равную наименьшей размерностиA.Возвращает
Aиtau, изменённые на месте.
-
geqlf!(A) → (A, tau) -
Вычислить
QLфакторизациюA,A = QL.Возвращает
A, изменённый на месте, иtau, который содержит скаляры, параметризующие элементарные отражатели факторизации.
-
geqrf!(A, tau) -
Вычислить
QRфакторизациюA,A = QR.tauсодержит скаляры, параметризующие элементарные отражатели факторизации.tauдолжен иметь длину, большую или равную наименьшей размерностиA.Возвращает
Aиtau, изменённые на месте.
-
geqrf!(A) → (A, tau) -
Вычислить
QRфакторизациюA,A = QR.Возвращает
A, изменённый на месте, иtau, который содержит скаляры, параметризующие элементарные отражатели факторизации.
-
geqp3!(A, jpvt, tau) -
Вычислить пивотную
QRфакторизациюA,AP = QRс использованием BLAS уровня 3.P— матрица поворота, представленнаяjpvt.tauхранит элементарные отражатели.jpvtдолжен иметь длину, большую или равнуюn, еслиA— матрица(m x n).tauдолжен иметь длину, большую или равную наименьшей размерностиA.A,jpvt, иtauизменяются на месте.
-
geqp3!(A, jpvt) → (A, jpvt, tau) -
Вычислить пивотную
QRфакторизациюA,AP = QRс использованием BLAS уровня 3.P— матрица поворота, представленнаяjpvt.jpvtдолжен иметь длину, большую или равнуюn, еслиA— матрица(m x n).Возвращает
Aиjpvt, изменённые на месте, иtau, который хранит элементарные отражатели.
-
geqp3!(A) → (A, jpvt, tau) -
Вычислить пивотную
QRфакторизациюA,AP = QRс использованием BLAS уровня 3.Возвращает
A, изменённый на месте,jpvt, который представляет матрицу поворотаP, иtau, который хранит элементарные отражатели.
-
gerqf!(A, tau) -
Вычислить
RQфакторизациюA,A = RQ.tauсодержит скаляры, параметризующие элементарные отражатели факторизации.tauдолжен иметь длину, большую или равную наименьшей размерностиA.Возвращает
Aиtau, изменённые на месте.
-
gerqf!(A) → (A, tau) -
Вычислить
RQфакторизациюA,A = RQ.Возвращает
A, изменённый на месте, иtau, который содержит скаляры, параметризующие элементарные отражатели факторизации.
-
geqrt!(A, T) -
Вычислить блочную
QRфакторизациюA,A = QR.Tсодержит верхние треугольные блочные отражатели, которые параметризуют элементарные отражатели факторизации. Первая размерностьTзадаёт размер блока и должна быть между 1 иn. Вторая размерностьTдолжна быть равна наименьшей размерностиA.Возвращает
AиT, изменённые на месте.
-
geqrt!(A, nb) → (A, T) -
Вычислить блочную
QRфакторизациюA,A = QR.nbзадаёт размер блока и должна быть между 1 иn, второй размерностьюA.Возвращает
A, изменённый на месте, иT, который содержит верхние треугольные блочные отражатели, которые параметризуют элементарные отражатели факторизации.
-
geqrt3!(A, T) -
Рекурсивно вычисляет блочную
QRфакторизациюA,A = QR.Tсодержит верхние треугольные блочные отражатели, которые параметризуют элементарные отражатели факторизации. Первая размерностьTзадаёт размер блока и должна быть между 1 иn. Вторая размерностьTдолжна быть равна наименьшей размерностиA.Возвращает
AиT, изменённые на месте.
-
geqrt3!(A) → (A, T) -
Рекурсивно вычисляет блочную
QRфакторизациюA,A = QR.Возвращает
A, изменённый на месте, иT, который содержит верхние треугольные блочные отражатели, которые параметризуют элементарные отражатели факторизации.
-
getrf!(A) → (A, ipiv, info) -
Вычислить пивотную
LUфакторизациюA,A = LU.Возвращает
A, изменённый на месте,ipiv, информацию о повороте, иinfoкод, который указывает на успех (info = 0), сингулярное значение вU(info = i, в таком случаеU[i,i]является сингулярным), или код ошибки (info < 0).
-
tzrzf!(A) → (A, tau) -
Преобразует верхнюю трапецеидальную матрицу
Aв верхнетреугольную форму на месте. ВозвращаетAиtau, скалярные параметры для элементарных отражателей преобразования.
-
ormrz!(side, trans, A, tau, C) -
Умножает матрицу
CнаQслева (side = L, Q*C) или справа (side = R, C*Q) из преобразования, заданногоtzrzf!. В зависимости отsideилиtrans, умножение может быть слева (side = L, Q*C) или справа (side = R, C*Q) иQможет быть неизменённой (trans = N), транспонированной (trans = T) или сопряжённо транспонированной (trans = C). Возвращает матрицуC, которая изменяется на месте в результате умножения.
-
gels!(trans, A, B) → (F, B, ssr) -
Решает линейное уравнение
A * X = B,A.' * X =B, илиA' * X = Bиспользуя QR или LQ факторизацию. Изменяет матрицу/векторBна месте с решением.Aперезаписывается с егоQRилиLQфакторизацией.transможет быть одним изN(без изменений),T(транспонирование), илиC(сопряжённое транспонирование).gels!ищет решение с минимальной нормой/наименьших квадратов.Aможет быть недоопределённым или переопределённым. Решение возвращается вB.
-
gesv!(A, B) → (B, A, ipiv) -
Решает линейное уравнение
A * X = B, гдеA— квадратная матрица, используяLUфакторизациюA.Aперезаписывается с егоLUфакторизацией, аBперезаписывается с решениемX.ipivсодержит информацию о повороте дляLUфакторизацииA.
-
getrs!(trans, A, ipiv, B) -
Решает линейное уравнение
A * X = B,A.' * X =B, илиA' * X = Bдля квадратнойA. Изменяет матрицу/векторBна месте с решением.A—LUфакторизация изgetrf!, сipivинформацией о повороте.transможет быть одним изN(без изменений),T(транспонирование), илиC(сопряжённое транспонирование).
-
getri!(A, ipiv) -
Вычисляет обратную матрицу
A, используя еёLUфакторизацию, найденную функциейgetrf!.ipiv— информация о пивотном разложении, аAсодержитLUфакторизацию матрицыgetrf!.Aперезаписывается своей обратной матрицей.
-
gesvx!(fact, trans, A, AF, ipiv, equed, R, C, B) → (X, equed, R, C, B, rcond, ferr, berr, work) -
Решает линейное уравнение
A * X = B(trans = N),A.' * X =B(trans = T), илиA' * X = B(trans = C) используяLUфакторизациюA.factможет бытьE, в этом случаеAбудет сбалансирована и скопирована вAF;F, в этом случаеAFиipivиз предыдущейLUфакторизации являются входными данными; илиN, в этом случаеAбудет скопирована вAFи затем факторизована. Еслиfact = F,equedможет бытьN, что означаетAне была сбалансирована;R, что означаетAбыла умножена наdiagm(R)слева;C, что означаетAбыла умножена наdiagm(C)справа; илиB, что означаетAбыла умножена наdiagm(R)слева иdiagm(C)справа. Еслиfact = Fиequed = RилиBвсе элементыRдолжны быть положительными. Еслиfact = Fиequed = CилиBвсе элементыCдолжны быть положительными.Возвращает решение
X;equed, который является выходным значением, еслиfactне являетсяN, и описывает произведенную балансировку;R, диагональная матрица для строки балансировки;C, диагональная матрица для столбца балансировки;B, который может быть перезаписан своей сбалансированной формойdiagm(R)*B(еслиtrans = Nиequed = R,B) илиdiagm(C)*B(еслиtrans = T,Cиequed = C,B);rcond, обратная условная величинаAпосле балансировки;ferr, граница погрешности для каждого вектора решения вX;berr, граница погрешности для каждого вектора решения вX; иwork, обратный коэффициент роста пивот.
-
gesvx!(A, B) -
Упрощение
gesvx!без балансировки и транспонирования.
-
gelsd!(A, B, rcond) → (B, rnk) -
Вычисляет решение с наименьшей нормой для
A * X = Bпутём нахожденияSVDфакторизацииA, а затем деления и покорения задачи.Bперезаписывается решениемX. Сингулярные значения нижеrcondбудут считаться нулями. Возвращает решение вBи эффективный рангAвrnk.
-
gelsy!(A, B, rcond) → (B, rnk) -
Вычисляет решение с наименьшей нормой для
A * X = Bпутём нахождения полнойQRфакторизацииA, а затем деления и покорения задачи.Bперезаписывается решениемX. Сингулярные значения нижеrcondбудут считаться нулями. Возвращает решение вBи эффективный рангAвrnk.
-
gglse!(A, c, B, d) → (X,res) -
Решает уравнение
A * x = c, гдеxподчиняется ограничению равенстваB * x = d. Использует формулу||c - A*x||^2 = 0для решения. ВозвращаетXи сумму квадратов остатков.
-
geev!(jobvl, jobvr, A) → (W, VL, VR) -
Находит собственное разложение матрицы
A. Еслиjobvl = N, левые собственные векторыAне вычисляются. Еслиjobvr = N, правые собственные векторыAне вычисляются. Еслиjobvl = Vилиjobvr = V, соответствующие собственные векторы вычисляются. Возвращает собственные значения вW, правые собственные векторы вVR, и левые собственные векторы вVL.
-
gesdd!(job, A) → (U, S, VT) -
Находит сингулярное разложение
A,A = U * S * V', используя подход деления и покорения. Еслиjob = A, все столбцыUи строкиV'вычисляются. Еслиjob = N, никакие столбцыUили строкиV'не вычисляются. Еслиjob = O,Aперезаписывается столбцами (тонкой)Uи строками (тонкой)V'. Еслиjob = S, столбцы (тонкой)Uи строки (тонкой)V'вычисляются и возвращаются отдельно.
-
gesvd!(jobu, jobvt, A) → (U, S, VT) -
Находит сингулярное разложение
A,A = U * S * V'. Еслиjobu = A, все столбцыUвычисляются. Еслиjobvt = Aвсе строкиV'вычисляются. Еслиjobu = N, никакие столбцыUне вычисляются. Еслиjobvt = Nникакие строкиV'не вычисляются. Еслиjobu = O,Aперезаписывается столбцами (тонкой)U. Еслиjobvt = O,Aперезаписывается строками (тонкой)V'. Еслиjobu = S, столбцы (тонкой)Uвычисляются и возвращаются отдельно. Еслиjobvt = S, строки (тонкой)V'вычисляются и возвращаются отдельно.jobuиjobvtне могут быть одновременноO.Возвращает
U,S, иVt, гдеS— сингулярные значенияA.
-
ggsvd!(jobu, jobv, jobq, A, B) → (U, V, Q, alpha, beta, k, l, R) -
Находит обобщённое сингулярное разложение
AиB,U'*A*Q = D1*RиV'*B*Q = D2*R.D1имеетalphaна диагонали, аD2имеетbetaна диагонали. Еслиjobu = U, ортогональная/унитарная матрицаUвычисляется. Еслиjobv = V, ортогональная/унитарная матрицаVвычисляется. Еслиjobq = Q, ортогональная/унитарная матрицаQвычисляется. Еслиjobu,jobvилиjobqявляетсяN, эта матрица не вычисляется. Данная функция доступна только в версиях LAPACK до 3.6.0.
-
ggsvd3!(jobu, jobv, jobq, A, B) → (U, V, Q, alpha, beta, k, l, R) -
Находит обобщённое сингулярное разложение
AиB,U'*A*Q = D1*RиV'*B*Q = D2*R.D1имеетalphaна диагонали, аD2имеетbetaна диагонали. Еслиjobu = U, ортогональная/унитарная матрицаUвычисляется. Еслиjobv = V, ортогональная/унитарная матрицаVвычисляется. Еслиjobq = Q, ортогональная/унитарная матрицаQвычисляется. Еслиjobu,jobv, илиjobqявляетсяN, эта матрица не вычисляется. Эта функция требует LAPACK 3.6.0.
-
geevx!(balanc, jobvl, jobvr, sense, A) → (A, w, VL, VR, ilo, ihi, scale, abnrm, rconde, rcondv) -
Находит собственное разложение
Aс балансировкой матрицы. Еслиjobvl = N, левые собственные векторыAне вычисляются. Еслиjobvr = N, правые собственные векторыAне вычисляются. Еслиjobvl = Vилиjobvr = V, соответствующие собственные векторы вычисляются. Еслиbalanc = N, балансировка не выполняется. Еслиbalanc = P,Aпереставляется, но не масштабируется. Еслиbalanc = S,Aмасштабируется, но не переставляется. Еслиbalanc = B,Aпереставляется и масштабируется. Еслиsense = N, обратные условные числа не вычисляются. Еслиsense = E, обратные условные числа вычисляются только для собственных значений. Еслиsense = V, обратные условные числа вычисляются только для правых собственных векторов. Еслиsense = B, обратные условные числа вычисляются для правых и левых собственных векторов. Еслиsense = E,B, правые и левые собственные векторы должны быть вычислены.
-
ggev!(jobvl, jobvr, A, B) → (alpha, beta, vl, vr) -
Находит обобщённое собственное разложение
AиB. Еслиjobvl = N, левые собственные векторы не вычисляются. Еслиjobvr = N, правые собственные векторы не вычисляются. Еслиjobvl = Vилиjobvr = V, соответствующие собственные векторы вычисляются.
-
gtsv!(dl, d, du, B) -
Решает уравнение
A * X = B, гдеA— треугольная матрица сdlна побочной диагонали,dна главной диагонали иduна вышестоящей диагонали.Перезаписывает
BрешениемXи возвращает его.
-
gttrf!(dl, d, du) → (dl, d, du, du2, ipiv) -
Находит факторизацию
LUтреугольной матрицы сdlна побочной диагонали,dна главной диагонали иduна вышестоящей диагонали.Изменяет
dl,d, иduна месте и возвращает их, а также вторую вышестоящую диагональdu2и вектор перестановкиipiv.
-
gttrs!(trans, dl, d, du, du2, ipiv, B) -
Решает уравнение
A * X = B(trans = N),A.' * X = B(trans = T) илиA' * X = B(trans = C) используя факторизациюLU, вычисленную функциейgttrf!.Bперезаписывается решениемX.
-
orglq!(A, tau, k = length(tau)) -
Явно находит матрицу
QфакторизацииLQпосле вызоваgelqf!дляA. Использует вывод функцииgelqf!.AперезаписываетсяQ.
-
orgqr!(A, tau, k = length(tau)) -
Явно находит матрицу
QфакторизацииQRпосле вызоваgeqrf!дляA. Использует вывод функцииgeqrf!.AперезаписываетсяQ.
-
orgql!(A, tau, k = length(tau)) -
Явно находит матрицу
QфакторизацииQLпосле вызоваgeqlf!дляA. Использует вывод функцииgeqlf!.AперезаписываетсяQ.
-
orgrq!(A, tau, k = length(tau)) -
Явно находит матрицу
QфакторизацииRQпосле вызоваgerqf!дляA. Использует вывод функцииgerqf!.AперезаписываетсяQ.
-
ormlq!(side, trans, A, tau, C) -
Вычисляет
Q * C(trans = N),Q.' * C(trans = T),Q' * C(trans = C) дляside = Lили эквивалентное правое умножение дляside = Rс использованиемQиз факторизацииLQматрицыA, вычисленной с помощьюgelqf!.Cперезаписывается.
-
ormqr!(side, trans, A, tau, C) -
Вычисляет
Q * C(trans = N),Q.' * C(trans = T),Q' * C(trans = C) дляside = Lили эквивалентное правое умножение дляside = Rс использованиемQиз факторизацииQRматрицыA, вычисленной с помощьюgeqrf!.Cперезаписывается.
-
ormql!(side, trans, A, tau, C) -
Вычисляет
Q * C(trans = N),Q.' * C(trans = T),Q' * C(trans = C) дляside = Lили эквивалентное правое умножение дляside = Rс использованиемQиз факторизацииQLматрицыA, вычисленной с помощьюgeqlf!.Cперезаписывается.
-
ormrq!(side, trans, A, tau, C) -
Вычисляет
Q * C(trans = N),Q.' * C(trans = T),Q' * C(trans = C) дляside = Lили эквивалентное правое умножение дляside = Rс использованиемQиз факторизацииRQматрицыA, вычисленной с помощьюgerqf!.Cперезаписывается.
-
gemqrt!(side, trans, V, T, C) -
Вычисляет
Q * C(trans = N),Q.' * C(trans = T),Q' * C(trans = C) дляside = Lили эквивалентное правое умножение дляside = Rс использованиемQиз факторизацииQRматрицыA, вычисленной с помощьюgeqrt!.Cперезаписывается.
-
posv!(uplo, A, B) → (A, B) -
Находит решение
A * X = B, гдеA— симметричная или эрмитова положительно определённая матрица. Еслиuplo = U, вычисляется верхняя треугольная декомпозиция ХолецкогоA. Еслиuplo = L, вычисляется нижняя треугольная декомпозиция ХолецкогоA.Aперезаписывается своим разложением Холецкого.Bперезаписывается решениемX.
-
potrf!(uplo, A) -
Вычисляет разложение Холецкого (верхнее, если
uplo = U, нижнее, еслиuplo = L) положительно определённой матрицыA.Aперезаписывается и возвращается с кодом состояния.
-
potri!(uplo, A) -
Вычисляет обратную матрицу
Aпосле вызоваpotrf!для нахождения её (верхнего, еслиuplo = U, нижнего, еслиuplo = L) разложения Холецкого.Aперезаписывается обратной матрицей и возвращается.
-
potrs!(uplo, A, B) -
Находит решение
A * X = B, гдеA— симметричная или эрмитова положительно определённая матрица, чьё разложение Холецкого было вычислено функциейpotrf!. Еслиuplo = U, была вычислена верхняя треугольная декомпозиция ХолецкогоA. Еслиuplo = L, была вычислена нижняя треугольная декомпозиция ХолецкогоA.Bперезаписывается решениемX.
-
pstrf!(uplo, A, tol) → (A, piv, rank, info) -
Вычисляет (верхнее, если
uplo = U, нижнее, еслиuplo = L) разложение Холецкого с выбором опор (pivot) положительно определённой матрицыAс заданной пользователем толерантностьюtol.Aперезаписывается разложением Холецкого.Возвращает
A, опорные элементыpiv, рангA, и код состояния. Еслиinfo = 0, факторизация выполнена успешно. Еслиinfo = i > 0, тоAне является положительно определённой или имеет недостаточный ранг.
-
ptsv!(D, E, B) -
Решает
A * X = Bдля положительно определённой трёхдиагональной матрицыA.D— диагональA, аE— внедиагональ.Bперезаписывается решениемXи возвращается.
-
pttrf!(D, E) -
Вычисляет LDLt-факторизацию положительно определённой трёхдиагональной матрицы с
Dкак диагональю иEкак внедиагональю.DиEперезаписываются и возвращаются.
-
pttrs!(D, E, B) -
Решает
A * X = Bдля положительно определённой трёхдиагональной матрицыAс диагональюDи внедиагональюEпосле вычисления LDLt-факторизацииAс помощьюpttrf!.Bперезаписывается решениемX.
-
trtri!(uplo, diag, A) -
Находит обратную (верхнюю, если
uplo = U, нижнюю, еслиuplo = L) треугольной матрицыA. Еслиdiag = N,Aимеет ненулевые диагональные элементы. Еслиdiag = U, все диагональные элементыAравны единице.Aперезаписывается своей обратной матрицей.
-
trtrs!(uplo, trans, diag, A, B) -
Решает
A * X = B(trans = N),A.' * X = B(trans = T), илиA' * X = B(trans = C) для (верхней, еслиuplo = U, нижней, еслиuplo = L) треугольной матрицыA. Еслиdiag = N,Aимеет ненулевые диагональные элементы. Еслиdiag = U, все диагональные элементыAравны единице.Bперезаписывается решениемX.
-
trcon!(norm, uplo, diag, A) -
Находит обратную условную величину (верхнюю, если
uplo = U, нижнюю, еслиuplo = L) треугольной матрицыA. Еслиdiag = N, уAесть ненулевые диагональные элементы. Еслиdiag = U, все диагональные элементыAравны единице. Еслиnorm = I, условная величина находится в норме бесконечности. Еслиnorm = Oили1, условная величина находится в норме единицы.
-
trevc!(side, howmny, select, T, VL = similar(T), VR = similar(T)) -
Находит собственную систему верхней треугольной матрицы
T. Еслиside = R, вычисляются правые собственные векторы. Еслиside = L, вычисляются левые собственные векторы. Еслиside = B, вычисляются обе пары. Еслиhowmny = A, ищутся все собственные векторы. Еслиhowmny = B, все собственные векторы находятся и преобразуются обратно с помощьюVLиVR. Еслиhowmny = S, вычисляются только собственные векторы, соответствующие значениям вselect.
-
trrfs!(uplo, trans, diag, A, B, X, Ferr, Berr) → (Ferr, Berr) -
Оценивает ошибку в решении
A * X = B(trans = N),A.' * X = B(trans = T),A' * X = B(trans = C) дляside = L, или эквивалентных уравнений для правойside = RX * Aпосле вычисленияXс помощьюtrtrs!. Еслиuplo = U,Aявляется верхней треугольной. Еслиuplo = L,Aявляется нижней треугольной. Еслиdiag = N, уAесть ненулевые диагональные элементы. Еслиdiag = U, все диагональные элементыAравны единице.FerrиBerrявляются необязательными входными данными.Ferr- это ошибка вперёд, аBerr- ошибка назад, каждая покомпонентно.
-
stev!(job, dv, ev) → (dv, Zmat) -
Вычисляет собственную систему для симметричной трёхдиагональной матрицы с
dvкак диагональю иevкак внедиагональной. Еслиjob = Nнайдены только собственные значения и возвращаются вdv. Еслиjob = V, также находятся и возвращаются собственные векторы вZmat.
-
stebz!(range, order, vl, vu, il, iu, abstol, dv, ev) → (dv, iblock, isplit) -
Вычисляет собственные значения для симметричной трёхдиагональной матрицы с
dvкак диагональю иevкак внедиагональю. Еслиrange = A, ищутся все собственные значения. Еслиrange = V, ищутся собственные значения в полуоткрытом интервале(vl, vu]. Еслиrange = I, ищутся собственные значения с индексами междуilиiu. Еслиorder = B, собственные значения упорядочиваются внутри блока. Еслиorder = E, они упорядочиваются по всем блокам.abstolможет быть установлено как значение толерантности для сходимости.
-
stegr!(jobz, range, dv, ev, vl, vu, il, iu) → (w, Z) -
Вычисляет собственные значения (
jobz = N) или собственные значения и собственные векторы (jobz = V) для симметричной трёхдиагональной матрицы сdvкак диагональю иevкак внедиагональю. Еслиrange = A, все собственные значения находятся. Еслиrange = V, собственные значения в полуоткрытом интервале(vl, vu]находятся. Еслиrange = I, собственные значения с индексами междуilиiuнаходятся. Собственные значения возвращаются вw, а собственные векторы вZ.
-
stein!(dv, ev_in, w_in, iblock_in, isplit_in) -
Вычисляет собственные векторы для симметричной трёхдиагональной матрицы с
dvкак диагональю иev_inкак внедиагональю.w_inопределяет входные собственные значения, для которых требуется найти соответствующие собственные векторы.iblock_inопределяет подматрицы, соответствующие собственным значениям вw_in.isplit_inопределяет точки разделения между блоками подматриц.
-
syconv!(uplo, A, ipiv) → (A, work) -
Преобразует симметричную матрицу
A(которая была факторизована в треугольную матрицу) в две матрицыLиD. Еслиuplo = U,Aявляется верхней треугольной. Еслиuplo = L, она является нижней треугольной.ipiv- это вектор поворота из треугольного разложения.AперезаписываетсяLиD.
-
sysv!(uplo, A, B) → (B, A, ipiv) -
Находит решение
A * X = Bдля симметричной матрицыA. Еслиuplo = U, верхняя половинаAхранится. Еслиuplo = L, хранится нижняя половина.Bперезаписывается решениемX.Aперезаписывается факторизацией Bunch-Kaufman.ipivсодержит информацию о повороте в факторизации.
-
sytrf!(uplo, A) → (A, ipiv, info) -
Вычисляет факторизацию Bunch-Kaufman симметричной матрицы
A. Еслиuplo = U, верхняя половинаAхранится. Еслиuplo = L, хранится нижняя половина.Возвращает
A, перезаписанную факторизацией, вектор поворотаipiv, и код ошибкиinfo, который является неотрицательным целым числом. Еслиinfoположительно, матрица вырождена, и диагональная часть факторизации равна нулю в позицииinfo.
-
sytri!(uplo, A, ipiv) -
Вычисляет обратную матрицу симметричной матрицы
A, используя результатыsytrf!. Еслиuplo = U, верхняя половинаAхранится. Еслиuplo = L, хранится нижняя половина.Aперезаписывается своей обратной.
-
sytrs!(uplo, A, ipiv, B) -
Решает уравнение
A * X = Bдля симметричной матрицыA, используя результатыsytrf!. Еслиuplo = U, верхняя половинаAхранится. Еслиuplo = L, хранится нижняя половина.Bперезаписывается решениемX.
-
hesv!(uplo, A, B) → (B, A, ipiv) -
Находит решение
A * X = Bдля эрмитовой матрицыA. Еслиuplo = U, верхняя половинаAхранится. Еслиuplo = L, хранится нижняя половина.Bперезаписывается решениемX.Aперезаписывается факторизацией Bunch-Kaufman.ipivсодержит информацию о повороте в факторизации.
-
hetrf!(uplo, A) → (A, ipiv, info) -
Вычисляет факторизацию Bunch-Kaufman эрмитовой матрицы
A. Еслиuplo = U, верхняя половинаAхранится. Еслиuplo = L, хранится нижняя половина.Возвращает
A, перезаписанную факторизацией, вектор поворотаipiv, и код ошибкиinfo, который является неотрицательным целым числом. Еслиinfoположительно, матрица вырождена, и диагональная часть факторизации равна нулю в позицииinfo.
-
hetri!(uplo, A, ipiv) -
Вычисляет обратную эрмитовой матрицы
A, используя результатыsytrf!. Еслиuplo = U, верхняя половинаAхранится. Еслиuplo = L, хранится нижняя половина.Aперезаписывается своей обратной.
-
hetrs!(uplo, A, ipiv, B) -
Решает уравнение
A * X = Bдля эрмитовой матрицыA, используя результатыsytrf!. Еслиuplo = U, верхняя половинаAхранится. Еслиuplo = L, хранится нижняя половина.Bперезаписывается решениемX.
-
syev!(jobz, uplo, A) -
Находит собственные значения (
jobz = N) или собственные значения и собственные векторы (jobz = V) симметричной матрицыA. Еслиuplo = U, используется верхняя треугольная частьAЕслиuplo = L, используется нижняя треугольная частьA.
-
syevr!(jobz, range, uplo, A, vl, vu, il, iu, abstol) → (W, Z) -
Находит собственные значения (
jobz = N) или собственные значения и собственные векторы (jobz = V) симметричной матрицыA. Еслиuplo = U, используется верхняя треугольная частьAЕслиuplo = L, используется нижняя треугольная частьAЕслиrange = A, все собственные значения находятся. Еслиrange = V, собственные значения в полуоткрытом интервале(vl, vu]находятся. Еслиrange = I, собственные значения с индексами междуilиiuнаходятся.abstolможет быть установлено как значение толерантности для сходимости.Собственные значения возвращаются в
W, а собственные векторы вZ.
-
sygvd!(jobz, range, uplo, A, vl, vu, il, iu, abstol) → (w, A, B) -
Находит обобщенные собственные значения (
jobz = N) или собственные значения и векторы (jobz = V) симметричной матрицыAи симметричной положительно определенной матрицыB. Еслиuplo = U, используются верхние треугольные частиAиB. Еслиuplo = L, используются нижние треугольные частиAиB. Еслиitype = 1, решаемая проблема —A * x = lambda * B * x. Еслиitype = 2, решаемая проблема —A * B * x = lambda * x. Еслиitype = 3, решаемая проблема —B * A * x = lambda * x.
-
bdsqr!(uplo, d, e_, Vt, U, C) → (d, Vt, U, C) -
Вычисляет сингулярное разложение бидиагональной матрицы с
dна диагонали иe_на внедиагональных элементах. Еслиuplo = U,e_является наддиагональю. Еслиuplo = L,e_является поддиагональю. Также может дополнительно вычислить произведениеQ' * C.Возвращает сингулярные значения в
d, и матрицаCперезаписываетсяQ' * C.
-
bdsdc!(uplo, compq, d, e_) → (d, e, u, vt, q, iq) -
Вычисляет сингулярное разложение бидиагональной матрицы с
dна диагонали иe_на внедиагональных элементах, используя метод деления и завоевания. Еслиuplo = U,e_является наддиагональю. Еслиuplo = L,e_является поддиагональю. Еслиcompq = N, находятся только сингулярные значения. Еслиcompq = I, находятся сингулярные значения и векторы. Еслиcompq = P, сингулярные значения и векторы находятся в компактной форме. Работает только для вещественных типов.Возвращает сингулярные значения в
d, и еслиcompq = P, компактные сингулярные векторы вiq.
-
gecon!(normtype, A, anorm) -
Находит обратную условную число матрицы
A. Еслиnormtype = I, условная число находится в норме бесконечности. Еслиnormtype = Oили1, условная число находится в норме единицы.Aдолжно быть результатомgetrf!иanorm— нормойAв соответствующей норме.
-
gehrd!(ilo, ihi, A) → (A, tau) -
Преобразует матрицу
Aк гэссенберговой форме. ЕслиAсбалансирована с помощьюgebal!, тоiloиihiявляются выходными даннымиgebal!. В противном случае они должны бытьilo = 1иihi = size(A,2).tauсодержит элементарные отражатели факторизации.
-
orghr!(ilo, ihi, A, tau) -
Явно находит
Q, ортогональную/унитарную матрицу изgehrd!.ilo,ihi,A, иtauдолжны соответствовать входу/выходуgehrd!.
-
gees!(jobvs, A) → (A, vs, w) -
Вычисляет собственные значения (
jobvs = N) или собственные значения и векторы Шюра (jobvs = V) матрицыA.Aперезаписывается своей формой Шюра.Возвращает
A,vsсодержащие векторы Шюра, иw, содержащие собственные значения.
-
gges!(jobvsl, jobvsr, A, B) → (A, B, alpha, beta, vsl, vsr) -
Вычисляет обобщенные собственные значения, обобщенную форму Шюра, левые векторы Шюра (
jobsvl = V) или правые векторы Шюра (jobvsr = V)AиB.Обобщенные собственные значения возвращаются в
alphaиbeta. Левые векторы Шюра возвращаются вvsl, а правые векторы Шюра — вvsr.
-
trexc!(compq, ifst, ilst, T, Q) → (T, Q) -
Переупорядочивает факторизацию Шюра матрицы. Если
compq = V, векторы ШюраQпереупорядочиваются. Еслиcompq = N, они не изменяются.ifstиilstзадают переупорядочивание векторов.
-
trsen!(compq, job, select, T, Q) → (T, Q, w) -
Переупорядочивает факторизацию Шюра матрицы и необязательно находит обратные условные числа. Если
job = N, условные числа не находятся. Еслиjob = E, находится только условная число для этого кластера собственных значений. Еслиjob = V, находится только условная число для инвариантного подпространства. Еслиjob = B, находятся условные числа для кластера и подпространства. Еслиcompq = V, векторы ШюраQобновляются. Еслиcompq = N, векторы Шюра не изменяются.selectопределяет, какие собственные значения находятся в кластере.Возвращает
T,Q, и переупорядоченные собственные значения вw.
-
tgsen!(select, S, T, Q, Z) → (S, T, alpha, beta, Q, Z) -
Переупорядочивает векторы обобщенного разложения Шюра.
selectзадает собственные значения в каждом кластере.
-
trsyl!(transa, transb, A, B, C, isgn=1) → (C, scale) -
Решает уравнение Сильвестра
A * X +/- X * B = scale*C, гдеAиBявляются квазиверхнетреугольными. Еслиtransa = N,Aне изменяется. Еслиtransa = T,Aтранспонируется. Еслиtransa = C,Aсопряженно транспонируется. Аналогично дляtransbиB. Еслиisgn = 1, решается уравнениеA * X + X * B = scale * C. Еслиisgn = -1, решается уравнениеA * X - X * B = scale * C.Возвращает
X(перезаписываяC) иscale.
© 2009–2016 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/release-0.5/stdlib/linalg/