Написание кусочной функции внутри deff - PullRequest
0 голосов
/ 04 ноября 2019

Я использую deff для определения кусочных функций в Scilab. Я использую операторы if-else для определения функции в разных интервалах. Кажется, что все они работают, кроме this .

Это мой подход:

deff('a=f(p)', ["if(q >= -2 & q <= -1) then"; "a=1"; "elseif(q >= 1 & q <= 2) then"; "a=-1"; "else"; "a=0"; "end";])

Тот же подход работал на аналогичные функции, такие как this.

eff('a=f(p)', ["if((p > 0 & p <= 2)) then"; "a=p/2"; "else"; "a=0"; "end";])

Я определил q следующим образом:

q = -3:Ts:3;

где Ts - некоторое число с плавающей запятой. Что я делаю не так?

1 Ответ

0 голосов
/ 04 ноября 2019

Вы не можете использовать свою функцию как есть, если на входе есть вектор. Возможный обходной путь - использовать feval:

a = feval(q,f)

Другое (лучшее) решение - это кодировать f в векторизованном виде:

function a = f(q)
     a = 1*(q >= -2 & q <= -1) - 1*(q >= 1 & q <= 2)
end

, 1* не являютсянеобходимо, если вам не нужно менять значения.

...