Создание собственной функции
Для определения новой функции используются ключевые слова function и endfunction, В следующем примере мы создаем функцию myfunction, которая принимает единственный параметр х, умножает его значение на 2 и возвращает результат в качестве выходного параметра у.
function у = myfunction ( х )
у = 2 * х endfunction
В Scilab существует, по меньшей мере, три способа определить эту функцию:
• Во-первых, можно ввести тело функции непосредственно в консоли Scilab, инструкция за инструкцией. Встретив запись наподобие function у = myfunction ( х ), интерпретатор переходит в режим ожидания тела функции. Завершается ввод командой endfunction, после чего Scilab возвращается в обычный режим,
• Более удобным вариантом является определение функции в отдельном файле. Этот способ применяется в большинстве случаев. Для того чтобы загрузить заданную таким образом функцию, можно скопировать содержимое файла в консоль (удобно если определение функции содержит всего несколько строк) либо воспользоваться командой Load into Scilab в меню Scilab.
• Также для загрузки функции можно использовать команду exec. Предположим, что определение функции размещается в файле "C:\myscripts\examples-functions.sce". Для загрузки применяется команда exec, как показано в следующем фрагменте:
-->ехес("С:\mys сгipts\examples - functions.see")
-->function у = myfunction ( x )
--> у = 2 * x
-->endfunction
Функция exec предназначена для исполнения инструкций, содержащихся в некотором файле, так как если бы они вводились непосредственно в консоли Scilab. При этом в консоли отображается каждая инструкция скрипта. Если файл содержит большое число команд, отображение каждой из них может оказаться избыточным. Чтобы этого избежать, после инструкции exec необходимо поставить “;”. Того же результата можно добиться, выбрав пункт меню Execute file into Scilab.
-->exec("С:\mys cript s\examples - functions.see" );
После того как функция создана, ее можно использовать подобно любой другой инструкции Scilab:
-->ехес("С:\mys сгipts\examples - functions.see");
-->y = myfunction ( 3 )
y = 6.
Заметим, что присвоение выходному аргументу у значения (в данном случае у=2*х) является обязательным. Для того чтобы убедиться в этом, рассмотрим следующий пример, где значение присваивается переменной z, а не выходному параметру у:
function у = myfunction ( х )
z = 2 * х
endfunction
Попытаемся теперь вызвать эту функцию, передав ей значение 1:
-->myfunction ( 1 )
!-- error 4 Undefined variable: у
at line 4 of function myfunction called by :
myfunction ( 1 )
Интерпретатор Scilab сообщает нам об ошибке, поскольку переменная у не была инициализирована в теле функции.
При решении некоторой задачи часто возникает потребность в определении более чем одной функции. Например, при оптимизации системы посредством функции optim нам, во-первых, требуется задать целевую функцию в соответствии с форматом, которого ожидает optim, а во-вторых - определить функцию-исполнитель, которая будет вызывать optim с требуемыми параметрами, В данном случае требуется всего две функции, однако на практике для решения задачи может потребоваться и несколько десятков функций, В этом случае будет разумным объединить функции в библиотеку, как показано в следующем разделе.