python – 我正确使用scipy.linalg.solve_discrete_lyapunov
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 我正确使用scipy.linalg.solve_discrete_lyapunov,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1388字,纯文字阅读大概需要2分钟。
内容图文
![python – 我正确使用scipy.linalg.solve_discrete_lyapunov](/upload/InfoBanner/zyjiaocheng/785/b47a9a2d6c4e48fe93bea9a42a938fb2.jpg)
我正在使用scipy.linalg.solve_discrete_lyapunov来计算矩阵P
MT PM -P = -Q其中M = A-BK且Q = I.
(见下文,见Lyapunov Equation).然而,对于计算的P I,得到MT PM -P≠-Q.
这是代码:
import numpy as np
import scipy as sp
A = np.array([[-1.86194971, 3.49237959],[-2.34245904, 3.86194971]])
B = np.array([[ 3000., 2500.5], [ 2000.2, 3000.]])
K = np.array([[ 0.0001367, -0.00016844], [-0.00069637, 0.0009627]])
I = np.array([[1., 0.],[0., 1.]])
# Eigenvalues of A are (0.9, 1.1)
# Eigenvalues of A-BK are (0.29, 0.49) (i.e. A-BK is Schur)
P = sp.linalg.solve_discrete_lyapunov(A-np.dot(B,K), I)
# P= [[ 6.61311138 4.32497891]
# [ 4.32497891 4.36910499]]
# But after checking (A-BK)^TP(A-BK)-P, that is
J = np.dot((A.transpose()-np.dot(K.transpose(),B.transpose())),np.dot(P,A-np.dot(B,K)))-P
# I get the following
# J = (A-BK)^TP(A-BK)-P = [[ -1.11929701 -19.5567893 ]
# [-19.5567893 37.89911723]]
#
# Not equal to -I?
解决方法:
设M = A – np.dot(B,K).然后solve_discrete_lyapunov(M,I)正在解决
np.dot(M, np.dot(P, M.T)) - P = -I
In [64]: M = A - np.dot(B,K)
In [65]: np.dot(M, np.dot(P,M.T)) - P
Out[65]:
array([[ -1.00014927e+00, -9.93418066e-05],
[ -9.93418066e-05, -1.00006419e+00]])
In [66]: np.allclose(np.dot(M, np.dot(P,M.T)) - P, -I, atol=0.001)
Out[66]: True
如果你想解决
np.dot(M.T, np.dot(P, M)) - P + I = 0
然后打电话
P = solve_discrete_lyapunov(M.T, I)
内容总结
以上是互联网集市为您收集整理的python – 我正确使用scipy.linalg.solve_discrete_lyapunov全部内容,希望文章能够帮你解决python – 我正确使用scipy.linalg.solve_discrete_lyapunov所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。