Ой, это просто так почему-то скопировалось. я не заметила. На самом деле там значок "или".
На самом деле там правильный значок именно "и". Но не в этом дело, а в том, что верхняя граница задана неверно. Если в оригинале действительно так и было, то именно "
not assigned during call to" и должно было выдаваться.
Кроме того, я не понимаю смысла команды
f=interp1(s,p,'linear'). Я не помню синтаксиса матлабовских команд кусочной интерполяции, но в любом случае: где тут ссылка на аргумент-то?...
Кроме того, хоть формально это и не ошибка, но в подобных случаях операторы
if малоуместны. Надо писать всё в одну строчку, примерно так:
f=3*(x<=0) + 0.5*(x>=4) + <...interp...> * ((x<4)&(x>0));