在MATLAB中查找未知矩阵的所有元素?

3

我有一个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吗?

2个回答

2
您可以使用符号数学创建一个线性方程组,然后解决这个方程组:
% 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

看起来是解决方程的通用方法,太棒了!+1! - ThomasIsCoding
1
@ThomasIsCoding 是的!equationsToMatrix() 函数非常有用。 - obchardon

1

您需要知道矩阵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

1
我们可以使用Lyap来解决它,正如我所知道的那样,如下所示:`lyap(a,-f,-b*k)答案 =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
@Trickk 我猜没有办法以分析的方式来分解它。 - ThomasIsCoding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接