我正在使用输入向量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循环以获得相同的结果?
答案 0 :(得分:3)
这实际上是一阶IIR过滤器,因此您可以使用filter
:
u(20:50, 1) = 2;
k = 0.8;
x = filter(1 - k, [1, -k], u);
答案 1 :(得分: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的每个索引执行此操作可能比循环和重用先前结果花费更多时间。