Как указал Quantum7 , вы определили функцию в том же скрипте, который выдаст вам ошибку.Независимо от того, находится функция в другом файле или нет, то, что вы там написали, не является допустимой операцией с символическими переменными.Если вы просто закомментируете вторую строку и запустите ее, вы получите следующую ошибку:
???Ошибка при использовании ==> sym.sym> checkindex в 2697
Индекс должен быть положительным целым или логическим.
, потому что i-1
равен нулю для первого цикла, иMATLAB начинает считать с 1. Если вы попробуете for i=2:3
, вы получите эту ошибку,
???Ошибка при использовании ==> mupadmex
Ошибка в команде MuPAD: индекс превышает размеры матрицы.
, поскольку символическая переменная является просто массивом 1x1
.
Из того, что вы написали, кажется, что у вас есть массив T1
, а T2
составлен из T1
в соответствии с соотношением: T2(i)=T1(i)+2*[T1(i-1)+T1(i+1)]
.Я думаю, что лучший способ сделать то, что вы пытаетесь, это использовать анонимные функции.
Я немного изменю индексирование, чтобы учесть тот факт, что в первом и последнем элементе вы получите ошибку, поскольку индекс превысит границы T1
.Тем не менее, ответ тот же.
dummyT1=[0;T1(:);0];
f=@(i)(dummyT1(i+1)+2*(dummyT1(i)+dummyT1(i+2)));
T2=f(1:3)
Если вы не хотите добавлять нули, а вместо этого сделать его круглым (т. Е. T1(0)=T1(3)
), то вы можете использовать тот же код, легко модифицируяопределение f
.