【问题标题】:Steady-state response in matlabmatlab中的稳态响应
【发布时间】:2015-11-18 19:10:58
【问题描述】:

我们必须在我的代码中计算状态空间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)

【问题讨论】:

    标签: matlab


    【解决方案1】:

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

    我还将您的最后一个变量重命名为 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
    

    我也得到了这个情节:

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

    【讨论】:

    • 谢谢!这对我有很大帮助:)
    • @JurriënPlijter graag gedaan。祝你好运!
    • 也许说明为什么将输入乘以 0.0175 而不是 0.0175/s 会有所帮助,尤其是在使用 dcgain 时(step 是不言自明的)。
    • @IKavanagh 好主意。当我有机会时,我会的。对于 OP,不需要乘以 1/s,因为 dcgain 函数会处理这个问题。
    • @rayryeng 这不是不需要乘以1/s 的原因。所有dcgain 所做的都是设置s = 0 并评估结果。它不会乘以1/s。您可以使用evalfr(T, 0) 验证这一点,它将返回与dcgain(T) 相同的结果。 evalfr 仅评估特定频率的频率响应,没有花哨的乘法或任何额外的添加。 在这种情况下使用dcgain 时不需要乘以1/s 的原因是因为最终值定理中的s 与步骤输入中的1/s 相抵消。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多