Построение импульсной функции - PullRequest
0 голосов
/ 30 апреля 2020

, поэтому я новичок в Matlab и должен был нарисовать функцию Impulse с y (n), равной только 1, если n == 3, иначе 0. Следующий код работает:

n = -5:5;                       
f = n;                          % allocate f
for i = 1 : length(n)           
    f(i) = dd1(n(i)-3);         
end                            

stem(n, f);                     
function y = dd1(n)            
    y = 0;                    
    if n == 0                
        y = 1;              
    end
end

Но я чувствую как будто это сложно, поэтому я попробовал следующее:

n = -5:5
stem(n, fo)
function y = fo(n)
    y = 0
    if n == 3
        y=1
    end
end

Это возвращает

Not enough input arguments.

Error in alternative>fo (line 5)
    if n == 3

Error in alternative (line 2)
stem(n, fo)

Я чувствую, что здесь что-то упущено.

1 Ответ

1 голос
/ 30 апреля 2020

if не является векторной операцией, но ожидает один логический (или, по крайней мере, скаляр, который он может привести к логическому).

Но вы можете сделать это векторным:

lg = n == 3;

Это создает логический (имя MATLAB для логического) массива (потому что n - это массив, а не вектор), что верно, когда n равно (==) трем. Таким образом, вам не нужна функция, потому что вы можете использовать способность MATLAB работать с векторами и массивами неявно. (для вашего кода это будет f = (n-3) == 3)

Последний совет: если у вас есть система пространства состояний (ss -объект), вы можете использовать функцию step, чтобы получить шаг- ответ как сюжет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...