Сложность / путаница с использованием индексов в MATLAB

#arrays #matlab

#массивы #matlab

Вопрос:

Я работаю с кодом в 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. @CrisLuengo x (t-1) должен создать новый вектор, который содержит исходный вектор x, сдвинутый на одну единицу в соответствии с теорией

Ответ №1:

Существует разница между вычислением функции и индексацией массива, хотя оба они используют один и тот же синтаксис в 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')
 

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