當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy linalg.solve_continuous_are用法及代碼示例


本文簡要介紹 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.

此外,如果 es 不完全是 None ,則 CARE 的廣義版本

解決了。省略時,假設 e 是恒等式,假設 s 是零矩陣,其大小分別與 ab 兼容。

參數

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 ]。

參考

[1] (1,2)

P. van Dooren,“求解 Riccati 方程的廣義特征值方法。”,SIAM 科學與統計計算雜誌,第 2(2) 卷,DOI:10.1137/0902010

[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

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.linalg.solve_continuous_are。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。