考虑一个带有初始条件的差分方程。
5y(n) + y(n-1) - 3y(n-2) = (1/5^n) u(n), n>=0
y(n-1) = 2, y(n-2) = 0
如何在Matlab中确定y(n)?
答案 0 :(得分:2)
使用与this类似的方法(使用filter
),但指定初始条件为here(使用filtic
)。
我假设您的初始条件为:y(-1)=2
,y(-2)=0
。
num = 1; %// numerator of transfer function (from difference equation)
den = [5 1 -3]; %// denominator of transfer function (from difference equation)
n = 0:100; %// choose as desired
x = (1/5).^n; %// n is >= 0, so u(n) is 1
y = filter(num, den, x, filtic(num, den, [2 0], [0 0]));
%// [2 0] reflects initial conditions on y, and [0 0] those on x.
以下是使用stem(n,y)
获得的结果图。
答案 1 :(得分:1)
代码的第二行没有给出初始条件,因为它引用了索引变量n
。由于Matlab只允许正整数索引,我假设你的意思是y(1) = 0
和y(2) = 2
。
您可以通过简单代数从第一个等式中得到迭代规则:
y(n) = ( (1/5^n) u(n) - y(n-1) + 3y(n-2) ) / 5
在Matlab中应用此规则的代码:
n_max = 100;
y = nan(n_max, 1);
y(1) = 0;
y(2) = 2;
for n = 3 : n_max
y(n) = ( (1/5^n) * u(n) - y(n-1) + 3 * y(n-2) ) / 5;
end
此代码假定已定义数组u
。 n_max
指定要计算的y
元素数。