scipy.linalg.

qr_delete#

scipy.linalg.qr_delete(Q, R, k, int p=1, which='row', overwrite_qr=False, check_finite=True)#

QR-Aktualisierung bei Zeilen- oder Spaltenlöschungen

Wenn A = Q R die QR-Zerlegung von A ist, geben Sie die QR-Zerlegung von A zurück, bei der p Zeilen oder Spalten ab Zeile oder Spalte k entfernt wurden.

Die Dokumentation wurde unter der Annahme verfasst, dass die Array-Argumente bestimmte „Kern“-Formen haben. Array-Argumente dieser Funktion können jedoch zusätzliche „Batch“-Dimensionen vorangestellt haben. In diesem Fall wird das Array als Stapel von niedrigdimensionalen Schnitten behandelt; siehe Gestapelte lineare Operationen für Details.

Parameter:
Q(M, M) oder (M, N) array_like

Einheitliche/orthogonale Matrix aus der QR-Zerlegung.

R(M, N) oder (N, N) array_like

Obere dreieckige Matrix aus der QR-Zerlegung.

kint

Index der ersten zu löschenden Zeile oder Spalte.

pint, optional

Anzahl der zu löschenden Zeilen oder Spalten, Standard ist 1.

which: {‘row’, ‘col’}, optional

Bestimmt, ob Zeilen oder Spalten gelöscht werden sollen, Standard ist ‘row’

overwrite_qrbool, optional

Wenn True, werden Q und R verbraucht und deren Inhalte mit ihren aktualisierten Versionen überschrieben, wobei entsprechend dimensionierte Ansichten zurückgegeben werden. Standard ist False.

check_finitebool, optional

Ob überprüft werden soll, ob die Eingabematrix nur endliche Zahlen enthält. Deaktivierung kann zu einer Leistungssteigerung führen, aber auch zu Problemen (Abstürze, Nicht-Terminierung) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten. Standard ist True.

Rückgabe:
Q1ndarray

Aktualisierter einheitlicher/orthogonaler Faktor

R1ndarray

Aktualisierter oberer dreieckiger Faktor

Hinweise

Diese Routine garantiert nicht, dass die Diagonaleinträge von R1 positiv sind.

Hinzugefügt in Version 0.16.0.

Referenzen

[1]

Golub, G. H. & Van Loan, C. F. Matrix Computations, 3rd Ed. (Johns Hopkins University Press, 1996).

[2]

Daniel, J. W., Gragg, W. B., Kaufman, L. & Stewart, G. W. Reorthogonalization and stable algorithms for updating the Gram-Schmidt QR factorization. Math. Comput. 30, 772-795 (1976).

[3]

Reichel, L. & Gragg, W. B. Algorithm 686: FORTRAN Subroutines for Updating the QR Decomposition. ACM Trans. Math. Softw. 16, 369-377 (1990).

Beispiele

>>> import numpy as np
>>> from scipy import linalg
>>> a = np.array([[  3.,  -2.,  -2.],
...               [  6.,  -9.,  -3.],
...               [ -3.,  10.,   1.],
...               [  6.,  -7.,   4.],
...               [  7.,   8.,  -6.]])
>>> q, r = linalg.qr(a)

Unter Berücksichtigung dieser QR-Zerlegung, aktualisieren Sie q und r, wenn 2 Zeilen entfernt werden.

>>> q1, r1 = linalg.qr_delete(q, r, 2, 2, 'row', False)
>>> q1
array([[ 0.30942637,  0.15347579,  0.93845645],  # may vary (signs)
       [ 0.61885275,  0.71680171, -0.32127338],
       [ 0.72199487, -0.68017681, -0.12681844]])
>>> r1
array([[  9.69535971,  -0.4125685 ,  -6.80738023],  # may vary (signs)
       [  0.        , -12.19958144,   1.62370412],
       [  0.        ,   0.        ,  -0.15218213]])

Das Update ist äquivalent, aber schneller als das Folgende.

>>> a1 = np.delete(a, slice(2,4), 0)
>>> a1
array([[ 3., -2., -2.],
       [ 6., -9., -3.],
       [ 7.,  8., -6.]])
>>> q_direct, r_direct = linalg.qr(a1)

Prüfen, ob wir äquivalente Ergebnisse haben

>>> np.dot(q1, r1)
array([[ 3., -2., -2.],
       [ 6., -9., -3.],
       [ 7.,  8., -6.]])
>>> np.allclose(np.dot(q1, r1), a1)
True

Und das aktualisierte Q ist immer noch unitär

>>> np.allclose(np.dot(q1.T, q1), np.eye(3))
True