0

我正在使用输入向量 u 在 Matlab 中计算 PT1 行为:

u(20:50,1) = 2;
k = 0.8;
x=zeros(50,1);
for i=2:size(u,1)
    x(i) = k*x(i-1) + (1-k)*u(i);
end

如何删除 for 循环以获得相同的结果?

4

2 回答 2

3

这实际上是一个一阶 IIR 滤波器,因此您可以使用filter它:

u(20:50, 1) = 2;
k = 0.8;
x = filter(1 - k, [1, -k], u);
于 2012-06-12T08:13:41.680 回答
0

如果你为几个值写出 x(i),你会在其中看到一个模式:

x(1) = 0; % since the loop starts at i=2
x(2) = k*x(1) + (1-k)*u(2)
     = 0      + (1-k)*u(2)
x(3) = k*x(2) + (1-k)*u(3)
     = k*(1-k)*u(2) + (1-k)*u(3)
x(4) = k*x(3) + (1-k)*u(4)
     = k^2*(1-k)*u(2) + k*(1-k)*u(3) + (1-k)*u(4)
...

所以你会很容易发现模式是:

x(i) = (1-k) * sum(k^(i-j)*u(j), j=2..i)

现在是一个显式函数。

你可以应用它来删除你的循环,但实际上这个显式函数本身必须计算一个很大的总和。对 x 的每个索引执行此操作可能比循环和重用先前结果花费更多时间。

于 2012-06-12T08:14:15.950 回答