本文簡要介紹 python 語言中 scipy.linalg.solve_continuous_are
的用法。
用法:
scipy.linalg.solve_continuous_are(a, b, q, r, e=None, s=None, balanced=True)#
求解continuous-time 代數 Riccati 方程 (CARE)。
CARE 定義為
存在解決方案的限製是:
All eigenvalues of
on the right half plane, should be controllable.The associated hamiltonian pencil (See Notes), should have eigenvalues sufficiently away from the imaginary axis.
此外,如果
e
或s
不完全是None
,則 CARE 的廣義版本解決了。省略時,假設
e
是恒等式,假設s
是零矩陣,其大小分別與a
和b
兼容。- a: (M, M) 數組
方陣
- b: (M, N) 數組
輸入
- q: (M, M) 數組
輸入
- r: (N, N) 數組
非奇異方陣
- e: (M, M) 數組,可選
非奇異方陣
- s: (M, N) 類數組,可選
輸入
- balanced: 布爾型,可選
指示是否對數據執行平衡步驟的布爾值。默認設置為 True。
- x: (M, M) ndarray
continuous-time 代數 Riccati 方程的解。
- LinAlgError
對於無法隔離鉛筆的穩定子空間的情況。有關詳細信息,請參閱注釋部分和引用。
參數 ::
返回 ::
拋出 ::
注意:
該方程通過形成擴展的哈密頓矩陣鉛筆來求解,如 [1] 中所述, 由塊矩陣給出
[ A 0 B ] [ E 0 0 ] [-Q -A^H -S ] - \lambda * [ 0 E^H 0 ] [ S^H B^H R ] [ 0 0 0 ]
並使用QZ分解方法。
在該算法中,失敗條件與產品 的對稱性和 的條件編號相關聯。在這裏, 是 2m-by-m 矩陣,它包含跨越 2-m 行的穩定子空間的特征向量,並劃分為兩個 m-row 矩陣。有關詳細信息,請參閱 [1] 和 [2]。
為了提高 QZ 分解的準確性,鉛筆經過一個平衡步驟,其中 和 條目的絕對值之和(在去除總和的對角線條目之後)按照 [3 ]。
參考:
[2]A.J. Laub,“求解代數 Riccati 方程的 Schur 方法。”,麻省理工學院。信息和決策係統實驗室。 LIDS-R ; 859. 在線可用:http://hdl.handle.net/1721.1/1301
[3]P. Benner,“哈密頓矩陣的辛平衡”,2001,SIAM J. Sci。計算機, 2001, Vol.22(5), DOI:10.1137/S1064827500367993
例子:
給定 a、b、q 和 r 求解 x:
>>> import numpy as np >>> from scipy import linalg >>> a = np.array([[4, 3], [-4.5, -3.5]]) >>> b = np.array([[1], [-1]]) >>> q = np.array([[9, 6], [6, 4.]]) >>> r = 1 >>> x = linalg.solve_continuous_are(a, b, q, r) >>> x array([[ 21.72792206, 14.48528137], [ 14.48528137, 9.65685425]]) >>> np.allclose(a.T.dot(x) + x.dot(a)-x.dot(b).dot(b.T).dot(x), -q) True
相關用法
- Python SciPy linalg.solve_continuous_lyapunov用法及代碼示例
- Python SciPy linalg.solve_circulant用法及代碼示例
- Python SciPy linalg.solve_banded用法及代碼示例
- Python SciPy linalg.solve_discrete_lyapunov用法及代碼示例
- Python SciPy linalg.solve_sylvester用法及代碼示例
- Python SciPy linalg.solve_toeplitz用法及代碼示例
- Python SciPy linalg.solve_discrete_are用法及代碼示例
- Python SciPy linalg.solve_triangular用法及代碼示例
- Python SciPy linalg.solve用法及代碼示例
- Python SciPy linalg.solveh_banded用法及代碼示例
- Python SciPy linalg.svd用法及代碼示例
- Python SciPy linalg.spsolve用法及代碼示例
- Python SciPy linalg.spsolve_triangular用法及代碼示例
- Python SciPy linalg.splu用法及代碼示例
- Python SciPy linalg.spilu用法及代碼示例
- Python SciPy linalg.svdvals用法及代碼示例
- Python SciPy linalg.sqrtm用法及代碼示例
- Python SciPy linalg.svds用法及代碼示例
- Python SciPy linalg.sinm用法及代碼示例
- Python SciPy linalg.schur用法及代碼示例
- Python SciPy linalg.sinhm用法及代碼示例
- Python SciPy linalg.signm用法及代碼示例
- Python SciPy linalg.subspace_angles用法及代碼示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代碼示例
- Python SciPy linalg.cdf2rdf用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.linalg.solve_continuous_are。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。