用初始条件求解差分方程

时间:2013-12-26 13:56:08

标签: matlab

考虑一个带有初始条件的差分方程。

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)?

2 个答案:

答案 0 :(得分:2)

使用与this类似的方法(使用filter),但指定初始条件为here(使用filtic)。

我假设您的初始条件为:y(-1)=2y(-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)获得的结果图。

enter image description here

答案 1 :(得分:1)

代码的第二行没有给出初始条件,因为它引用了索引变量n。由于Matlab只允许正整数索引,我假设你的意思是y(1) = 0y(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

此代码假定已定义数组un_max指定要计算的y元素数。