Сложность / путаница с использованием подписок в MATLAB - PullRequest
0 голосов
/ 13 апреля 2019

Я работаю с кодом в MATLAB, и мне нужно реализовать функцию y= 1-2x(t-1) но когда я пытаюсь кодировать, я получаю ошибку .

Как избавиться от этой ошибки?

    clc
    clear all
    close all
    t=-3:.1:3;
    x=heaviside(t);
    y=1-2*x(t-1)
    plot(t,y)

1 Ответ

2 голосов
/ 13 апреля 2019

Существует разница между оценкой функции и , индексирующей массив , хотя они оба используют один и тот же синтаксис в MATLAB.

, поскольку x являетсямассив, а не функция, x(t-1) пытается индексировать в массив x в местах t-1.Однако t содержит нецелочисленные значения и неположительные значения.Индексы в MATLAB должны быть между 1 и количеством элементов в массиве.

Чтобы сдвинуть массив на 1 вправо, вы можете использовать индексирование следующим образом:

x([1,1:end-1])

Здесь,мы повторяем элемент № 1 и удаляем последний элемент.Есть и другие способы сделать то же самое.

Но, поскольку одна единица времени не соответствует одному элементу массива, поскольку t увеличивается на 0,1 для каждого элемента массива, это соответствует сдвигу на 0,1 единицы времени., а не 1 единица времени.

Чтобы сдвинуться на одну единицу времени, вам нужно изменить указанную выше индексацию, чтобы сместить массив на 10 элементов.В общем случае возможно, что 1 единица времени не соответствует целому числу элементов массива, например, если приращение было 0,3 вместо 0,1.В этом случае вам нужно интерполировать:

interp1(t,x,t-1,'linear','extrap')

Здесь мы читаем за пределами входного массива, и поэтому должны позаботиться об экстраполяции.Отсюда и последний аргумент вызова функции.Вы также можете заполнить экстраполированные значения нулями, например.

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