我们必须在代码中计算状态空间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)
答案 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
我也得到了这个情节:
稳态值或多或少与我们在图中看到的一致。