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