Рассмотрим уравнение разности с его начальными условиями.Решение дифференциального уравнения с начальным условием
5y(n) + y(n-1) - 3y(n-2) = (1/5^n) u(n), n>=0
y(n-1) = 2, y(n-2) = 0
Как определить y (n) в Matlab?
Рассмотрим уравнение разности с его начальными условиями.Решение дифференциального уравнения с начальным условием
5y(n) + y(n-1) - 3y(n-2) = (1/5^n) u(n), n>=0
y(n-1) = 2, y(n-2) = 0
Как определить y (n) в Matlab?
Используйте подход, аналогичный 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)
.
Мне нравится ваш подход с 'filter'. Но, как прокомментировал мой ответ, я не верю, что вы можете просто удалить 'u (n)'. На самом деле, с вашей точки зрения, '(1/5^n) u (n)' - это то, что фильтруется, не так ли? –
Вторая строка вашего кода не дает начальных условий, поскольку она относится к индексной переменной 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
для вычисления.
Вам нужно определить (возможно, просто удалить) 'u (n)'. BTW, nice hat :-D –
В дополнение к удалению 'u (n)' (потому что он равен 1 для всех рассмотренных 'n'), вы должны заменить' 1/5^n' на '1/5^(n- 3) '. Это потому, что ваш n = 1 действительно момент времени -2; ваш n = 2 действительно равен -1 и т. д. Предполагая, что начальными условиями являются y (-2), y (-1). С этими исправлениями (вы согласны?), Ваш ответ и мой дают тот же результат. –
Не уверен в начальных условиях и '1/5^n', возможно, вы правы. Начальные условия, данные ОП, на самом деле не имели смысла, поэтому я изменил их на то, что имеет смысл, и вы изменили их на нечто другое, что также имеет смысл. - Я не согласен с 'u (n)' хотя; как бы вы знали, что он равен 1? Он не был явно определен ОП, поэтому можно просто предположить, что он был определен где-то в другом месте. –
Вот функция, я построил, чтобы вычислить его с дополнительным примером. [введите ссылку здесь] (https://www.mathworks.com/matlabcentral/fileexchange/56142-output-estimation-difference-equation) –