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