Обзор
Выделение группы операций в отдельную функцию, пригодную для повторного использования, является одной из наиболее распространенных задач при работе со Scilab.
Простейший синтаксис вызова функции выглядит следующим образом:
outvar = myfunction ( invar )
Значение каждого из трех элементов вызова функции приведено в списке:
- myfunction представляет собой наименование вызываемой функции,
- invar обозначает входные аргументы,
- outvar соответствует выходным аргументам.
Значения входных аргументов, в отличие от выходных, функция изменить не может.
Мы уже имели дело со многими функциями на протяжении данного руководства. Например, функция sin в составе команды y=sin(x) принимает входной аргумент х и помещает результат вычисления в переменную у. В соответствии с терминологией Scilab входные аргументы называются правосторонними, а выходные - левосторонними.
Количество входных и выходных аргументов функции не ограничено. Синтаксис функции с фиксированным числом аргументов таков:
[ol , . . . , on] = myfunction ( il , . . . , in )
Входные и выходные аргументы разделяются запятыми " ,". Отметим, что список входных аргументов ограничивается круглыми скобками, а выходных -квадратными.
Следующий фрагмент демонстрирует выполнение LU-разложения матрицы Гильберта. Для начала матрица генерируется с использованием функции testmatrix, принимающей два входных аргумента (тип матрицы и ее порядок). Созданную матрицу мы передаем функции lu, которая возвращает две или три матрицы в зависимости от заданного пользователем количества выходных аргументов. Если аргументов три, в качестве последнего возвращается матрица перестановок Р.
-->А = testmatrix("hilb", 2)
А =
4. - 6.
-6. 12.
-->[L, U] = lu(A)
U =
6. 12.
0. 2.
L =
-0.6666667 1.
Таблица 16: Инструкции Scilab, использующиеся при работе с функциями.
function | начинает определение функции |
endfunction | завершает определение функции |
argn | количество входных и выходных аргументов в данном вызове функции |
varargin | вектор, представляющий переменное число входных аргументов функции |
varargout | вектор, представляющий переменное число выходных аргументов функции |
fun2string | генерирует текстовое определение (исходный код) функции |
get_function_path getd | возвращает путь к файлу исходного кода функции отображает полный список функций, определения которых хранятся в некотором каталоге файловой системы |
head_comments | отображает комментарии к функции |
listfunctions | отображает свойства функций, которые были вызваны ранее |
macrovar | возвращает списки входных и выходных параметров функции, используемых в теле функции внешних переменных, вызовов других функций и локальных переменных |
1. 0.
-->[L,U,Р] =1u(А)
Р =
0. 1.
1. 0.
u =
- 6. 12.
0. 2.
L =
1. 0.
-0.6663667 1.
Заметим, что поведение функции lu зависит от числа выходных аргументов: во втором случае строки матрицы L меняются местами. Конкретнее, при двух выходных аргументах выполняется разложение А = LU (команда A-L*U позволяет проверить корректность результата), а при трех - разложение РА = LU с матрицей перестановок Р (в чем можно убедиться, выполнив команду P*A-L*U). Таким образом, функция lu выбирает соответствующий алгоритм в зависимости от количества переданных ей параметров. Возможность определения функции с переменным числом аргументов не рассматривается в данном руководстве, однако следует иметь в виду, что такая возможность доступна в Scilab.
Инструкции Scilab, предназначенные для работы с функциями, приведены в табл. 16. В последующих разделах наиболее часто используемые из них будут рассмотрены подробно.