我有一个4x4的矩阵,需要解决这个李雅普诺夫方程,并找出未知矩阵满足以下方程。
a = [0 1 0 0;0 0 -1 0;0 0 0 1;0 0 5 0];
f = [-1 1 0 0;-1 -1 0 0;0 0 -1.5 0.5;0 0 -0.5 -1.5];
b = [0;1;0;-2];
k = [1 0 1 0];
方程为 at - tf = bk。
a*t - t*f = b*k ;
在这里,t是一个4x4未知矩阵。你能帮我找到矩阵t吗?
% Your variables
a = [0 1 0 0;0 0 -1 0;0 0 0 1;0 0 5 0];
f = [-1 1 0 0;-1 -1 0 0;0 0 -1.5 0.5;0 0 -0.5 -1.5];
b = [0;1;0;-2];
k = [1 0 1 0];
% The unknows:
t = sym('t', [4 4]);
% Create the symbolic system of linear equation
eq = a*t - t*f == b*k;
% Equation to matrix
[A,b] = equationsToMatrix(eq);
% Solve the system and get a numeric solution
sol = double(reshape(A\b,[4,4])).'
% sol =
%
% 0.0690 -0.3276 -0.0853 -0.1973
% 0.2586 0.3966 0.2267 0.2533
% -0.3448 0.1379 -0.5333 0.2667
% 0.2069 -0.4828 0.6667 -0.6667
您需要知道矩阵f
是可逆的,我们可以按照以下方式使用dlyap
t = dlyap(a,inv(f),-b*k/f)
t = lyap(a,-f,-b*k)
这提供了
t =
0.0690 -0.3276 -0.0853 -0.1973
0.2586 0.3966 0.2267 0.2533
-0.3448 0.1379 -0.5333 0.2667
0.2069 -0.4828 0.6667 -0.6667
为了验证这一点
>> a*t-t*f-b*k
ans =
1.0e-15 *
0 0 0.0555 0
0 0 0 -0.0555
0.0833 0 0.1110 0
0 0.1110 0 0
0.0690 -0.3276 -0.0853 -0.1973
0.2586 0.3966 0.2267 0.2533
-0.3448 0.1379 -0.5333 0.2667
0.2069 -0.4828 0.6667 -0.6667
`我想要一个数学解决方案,通过它你可以在Matlab中解决任何高阶方程。有没有一种方法可以将其分解而不使用内置函数? - Trickk
equationsToMatrix()
函数非常有用。 - obchardon