本文簡要介紹 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
