0

对于矩阵A依赖于变量t(时间)的状态空间方程,如何获得阶跃或输出响应?

这是代码,它不起作用:

A = [sin(t) 0;0 cos(t)];
B = [0.5; 0.0];
C = [1 0; 0 1];
G = ss(A,B,C,[]);
step(G,t)
x0 = [-1;0;2];
initial(G,x0)

以下是错误信息:

使用 horzcat 时出错 被连接的矩阵的维度不一致。

响应错误(第 11 行) A = [sin(t) 0;0 cos(t)];

4

1 回答 1

1

如前所述,您只能使用该ss函数生成 LTI 系统,但您可以使用前向欧拉、后向欧拉、Tustin 等方法对模型进行分析离散化,并使用for循环模拟您的模型。

对于您的示例,您可以运行如下内容:

  • 考虑一个采样周期h = 0.01(如果动态没有被正确捕获,则更低);
  • 选择N作为模拟的步数(100、1000 等);
  • 声明时间点向量t = (0:N-1)*h
  • 创建一个for计算系统状态和输出的循环,这里使用前向 Euler 方法(参见https://en.wikipedia.org/wiki/Euler_method):

    % A = [sin(t) 0;0 cos(t)]; 
    B = [0.5; 0.0];
    C = [1 0; 0 1];
    D = [0; 0];
    x0 = [-1;1];  % the initial state must have two elements as this is a second-order system
    u = 0;  % constant zero input, but can be modified
    N = 1000;
    h = 0.01;
    t = (0:N-1)*h;
    x_vec = [];
    y_vec = [];
    xk = x0;
    yk = [0;0];
    for k=1:N
        Ad = eye(2)+h*[sin(t(k)) 0; 0 cos(t(k))];
        Bd = h*B; % C and D remain the same
        yk = C*xk + D*u;
        xk = Ad*xk + Bd*u;
        x_vec = [x_vec, xk]; % keep results in memory
        y_vec = [y_vec, yk];
    end
    
    % Plot output response
    plot(t,y_vec);
    
于 2018-05-28T07:42:02.563 回答