Под рукой нет Матлаба - не могу проверить, как оно всё отработает, но
1)
Код:
syms x;
fun1=matlabFunction(t);
предназначены, если не ошибаюсь, для символьных вычислений. Зачем они Вам? Возможно, я просто недопонимаю задачу.
2)
Код:
for ii=q1:shag:q2+shag
x3(jj)=fun1(ii);
jj=jj+1;
end
это тоже вполне можно записать, не используя циклов.
Громоздкая реализация
Код:
function y=hysteresis(b1,b2,c,jj,x)
очевидно, также может быть сильно упрощена, если Вы будете смотреть на массив, как на единый объект и работать с ним целиком.
Например
Код:
y=diff(x)
вычисляет разности между всеми соседними элементами массива сразу, нет необходимости вытаскивать по элементу и поочередно вычислять.
Функция find() - находит сразу все элементы массива, удовлетворяющие какому-то условию
Cравнивать можно сразу массивы (равного размера или массив с числом), при этом результатом сравнения тоже будет массив (1, если результат сравнения верный и 0 в противном случае)
Не подгоняя к вашей задаче, просто как пример мощи работы с матрицами
Пусть имеется последовательность чисел x. Ко всем числам, которые больше или равны предыдущему прибавить 1, для остальных - вычесть 1.
Код:
x=x-1+2*[0 (diff(x)>=0)]
Что я тут делаю?
1) Сразу вычитаю от всех элементов массива
. (x=x-1)
2) Вычисляю разности между соседними элементами diff(x) и сравниваю с нулем (если разность больше или равна 0, то выполянется условие, что следующее число больше или равно предыдущему)
3) Длина массива (diff(x)>=0) на 1 меньше, чем длина исходного (и состоит этот массив из нулей и единиц), дополняю его слева нулем (поскольку мы потеряли, вычисляя разность, первый член, для которого условие не выполняется) и таким образом получаю [0 (diff(x)>=0)]
4) Домножаю на 2. 1 - чтобы компенсировать уже сделанное вычитание единицы из всех членов массива и еще 1, чтобы прибавить единицу к тем числам, к которым это прибавление надо сделать.
Тот же пример, но с числами:
пусть зададим
x = [1 2 1 4 5 6 5 3 7 10];
тогда
x-1 даст [0 1 0 3 4 5 4 2 6 9]
diff(x) даст [1 -1 3 1 1 -1 -2 4 3] (это то же самое , что x(2:end)-x(1:end-1))
diff(x)>=0 даст [1 0 1 1 1 0 0 1 1]
[0 (diff(x)>=0)] даст [0 1 0 1 1 1 0 0 1 1]
и, наконец,
x=x-1+2*[0 (diff(x)>=0)] - выдаст то, что мы ждем: [ 0 3 0 5 6 7 4 2 8 11]
Попробуйте разобраться с этим примером. Матлаб (наверное, как и любой другой язык программирования) надо немного прочувствовать, иначе вы не сможете использовать его сильные стороны и будете микроскопом заколачивать гвозди