Spec-Zone.ru › TensorFlow 2.4

tf.linalg.tridiagonal_solve

Просмотреть исходный код на GitHub

Решает системы тридиагональных уравнений.

Просмотр псевдонимов

Псевдонимы для миграции

См. руководство по миграции для получения дополнительных сведений.

tf.compat.v1.linalg.tridiagonal_solve

tf.linalg.tridiagonal_solve(
    diagonals, rhs, diagonals_format='compact', transpose_rhs=False,
    conjugate_rhs=False, name=None, partial_pivoting=True
)

Входные данные могут быть предоставлены в различных форматах: matrix, sequence и compact, указанных в параметре diagonals_format.

В формате matrix, diagonals должен быть тензором формы [..., M, M], где две внутренние размерности представляют собой квадратные тридиагональные матрицы. Элементы вне трех диагоналей будут игнорироваться.

В формате sequence, diagonals предоставляются как кортеж или список из трех тензоров с формами [..., N], [..., M], [..., N], представляющих наддиагональ, диагональ и поддиагональ соответственно. N может быть либо M-1, либо M; в последнем случае последний элемент наддиагонали и первый элемент поддиагонали будут игнорироваться.

В формате compact три диагонали объединены в один тензор формы [..., 3, M], где последние две размерности содержат наддиагональ, диагональ и поддиагональ в указанном порядке. Аналогично формату sequence, элементы diagonals[..., 0, M-1] и diagonals[..., 2, 0] игнорируются.

Формат compact рекомендуется как формат с наилучшей производительностью. Если вам необходимо вручную преобразовать тензор в компактный формат, используйте tf.gather_nd. Пример для тензора формы [m, m]:

rhs = tf.constant([...])
matrix = tf.constant([[...]])
m = matrix.shape[0]
dummy_idx = [0, 0]  # An arbitrary element to use as a dummy
indices = [[[i, i + 1] for i in range(m - 1)] + [dummy_idx],  # Superdiagonal
         [[i, i] for i in range(m)],                          # Diagonal
         [dummy_idx] + [[i + 1, i] for i in range(m - 1)]]    # Subdiagonal
diagonals=tf.gather_nd(matrix, indices)
x = tf.linalg.tridiagonal_solve(diagonals, rhs)

Независимо от diagonals_format, rhs является тензором формы [..., M] или [..., M, K]. Последний позволяет одновременно решать К систем с одними и теми же левыми частями и К различными правыми частями. Если transpose_rhs установлено в значение True, ожидаемая форма — [..., M] или [..., K, M].

Размерности пакета, обозначенные как ..., должны быть одинаковыми в diagonals и rhs.

Результат — тензор той же формы, что и rhs: либо [..., M], либо [..., M, K].

Операция не гарантирует выдачу ошибки, если входная матрица не обратима. tf.debugging.check_numerics может быть применена к результату для обнаружения проблем с обратимостью.

Примечание: при больших размерах пакета вычисления на GPU могут быть медленными, если либо partial_pivoting=True , либо есть несколько правых частей (K > 1). Если возникнет эта проблема, рассмотрите возможность отключения пивота и наличия K = 1, или, как альтернатива, рассмотрите использование ЦП.

На ЦП решение вычисляется с помощью метода Гаусса с частичным или без частичного пивота, в зависимости от параметра partial_pivoting. На GPU используется библиотека cuSPARSE Nvidia: https://docs.nvidia.com/cuda/cusparse/index.html#gtsv

Аргументы
diagonals Tensor или кортеж из Tensor, описывающих левые части. Форма зависит от diagonals_format, см. описание выше. Должно быть float32, float64, complex64, или complex128.
rhs Tensor формы [..., M] или [..., M, K] и с тем же типом данных, что и diagonals. Обратите внимание, что если форма rhs и/или diags не известна статически, rhs будет рассматриваться как матрица, а не как вектор.
diagonals_format одно из matrix, sequence, или compact. По умолчанию compact.
transpose_rhs Если True, rhs транспонируется перед решением (не имеет эффекта, если форма rhs — [..., M]).
conjugate_rhs Если True, rhs сопрягается перед решением.
name Имя для этой Op (необязательно).
partial_pivoting выполнить ли частичный пивот. По умолчанию True. Частичный пивот делает процедуру более стабильной, но медленнее. Частичный пивот не нужен в некоторых случаях, включая диагонально преобладающие и симметрично положительно определенные матрицы (см., например, теорему 9.12 в [1]).
Возвращаемое значение
Tensor формы [..., M] или [..., M, K], содержащий решения.
Возможные исключения
ValueError Предоставлен неподдерживаемый тип в качестве входных данных или когда входные тензоры имеют неправильные формы.
UnimplementedError В случае partial_pivoting = true и backend — XLA.

[1] Nicholas J. Higham (2002). Accuracy and Stability of Numerical Algorithms: Second Edition. SIAM. с. 175. ISBN 978-0-89871-802-7.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/linalg/tridiagonal_solve

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API