Некорректное построение последовательности рамп в Matlab - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь построить дискретную последовательность линейного изменения , используя Matlab, в пределах интервала [-10, 10].

Это мой код:

function Ramp()
   rampseq(-10, 10);
end

function rampseq (n1, n2)
    n = (n1:1:n2);
    stem (n, pw(n));
end

function y = pw(n)
    if (n < 0)
        y = 0;
        return;
    else
        y = n;
        return;
    end
end

Я определяю поведение последовательности в функции pw(n) (краткая форма для «кусочно»). Обратите внимание, что если n < 0, то вывод должен быть 0, а если n >= 0, то вывод должен быть n. Однако график получается следующим:

Это не последовательность линейного изменения, поскольку значения Y равны , а не 0 когда n < 0, в отличие от поведения, определенного в функции pw(n). Куда я иду не так? Оператор if по какой-то причине пропущен? Окно команд не показывает никаких ошибок.

1 Ответ

1 голос
/ 01 февраля 2020

Вы передаете весь вектор n в функцию pw(). Однако функция pw() затем сравнивает n с 0, что является скаляром.

Вы можете настроить свою функцию pw() для работы с векторными входами, например так:

function y = pw(n)
    y = n;
    y(n < 0) = 0;
end
...