matlab中的稳态响应

时间:2015-11-18 19:10:58

标签: matlab

我们必须在代码中计算状态空间A的稳态响应。 MATLAB函数tf(sys)为我提供了传递函数。现在,我想将这些tf函数与步进输入0.0175/s相乘。接下来,我必须采用限制s->0,这将给我稳态响应。但是,我不确定如何在MATLAB中编程。我不知道如何处理tf(sys)命令的输出。有人能提供一些见解吗?我写的代码如下:

A=[ 0.00501 0.00464 -72.90 -31.34;
    -0.08570 -0.545 309 -7.4;
    0.00185 -0.00767 -0.395 0.00132;
    0 0 1 0];

B=[5.63 -23.8 -4.51576 0]'; 

C=[1 0 0 0;
    0 1 0 0;
    0 0 1 0;
    0 0 0 1];

D=0;

sys=ss(A,B,C,D);

tf=tf(sys)

1 个答案:

答案 0 :(得分:1)

您需要使用的只是dcgain函数,用于在转换为等效传递函数后,推断状态空间模型中每个输入/输出关系的稳态值。在计算阶跃响应时,DC增益基本上取限为s->0。但是,尽管不需要绘制步骤响应,但以图形方式验证dcgain是否为您提供了正确的结果可能很有用。在这种情况下,请使用step。它找到线性动力系统的阶跃响应,包括状态空间模型。在您的情况下,转换为tf对象后,您必须将传递函数缩放0.0175,然后调用step以及dcgain

我还将您的上一个变量重命名为T,因为tf是一个实际的函数,但您将使用变量tf掩盖该函数。

简单地说:

%// Your code
clear all; clc;

A=[ 0.00501 0.00464 -72.90 -31.34;
    -0.08570 -0.545 309 -7.4;
    0.00185 -0.00767 -0.395 0.00132;
    0 0 1 0];

B=[5.63 -23.8 -4.51576 0]'; %'

C=[1 0 0 0;
    0 1 0 0;
    0 0 1 0;
    0 0 0 1];

D=0;

sys=ss(A,B,C,D);    
T=0.0175*tf(sys); %// Change

%// New - find the step response
[y,t] = step(T);

%// Plot the step response
plot(t, y);
legend('x1', 'x2', 'x3', 'x4');

%// Determine the steady-state values
format long g;
ss_values = dcgain(T);
disp(ss_values);

我得到了这些稳态值:

>> ss_values

ss_values =

          23.7245028635498
         -4.57981861496758
                         0
       0.00625827699339293

我也得到了这个情节:

enter image description here

稳态值或多或少与我们在图中看到的一致。