Функции пользователя
Функция, как правило, предназначена для неоднократного использования, она имеет входные параметры и не выполняется без их предварительного задания. Рассмотрим несколько способов создания функций в SciLab.
Способ 1.Применение оператора deff, который в общем виде можно записать так:
deff(’[имя1,...,имяN] = имя_функции(переменная_1,...,переменная_M)’, ’имя1=выражение1;...;имяN=выражениеN’)
где
имя1,...,имяN - список выходных параметров, то есть переменных, которым будет присвоен конечный результат вычислений,
имя_функции - имя, с которым эта функция будет вызываться,
переменная_1,...,переменная_M - входные параметры.
В программировании аргументы функции называют входными параметрами.
Функция также имеет имя, однако ее значение должно быть присвоено переменной, определяемой внутри функции.
Эта переменная называется выходным параметром, а ее значение – возвращаемым значением.
В описании функции допустимо существование нескольких выходных параметров, то есть функция может иметь не одно, а несколько (!) значений одновременно. Конечно, в ряде случаев это очень удобно!
Пример. Определите функцию f(x)=sin(cos(x)) и вычислите ее значение в точках {-1,3; 2,1; 3,7}.
-->deff('f=fun(x)','f=sin(cos(x))')
-->[fun(-1.3) fun(2.1) fun(3.7)]
ans = 0.2643200 - 0.4836727 - 0.7500251
Способ 2. Применение конструкции function, синтаксис которой следующий:
function [имя1,...,имяN]=имя_функции(переменная_1,...,переменная_M)
тело функции
endfunction
Здесь аналогично предыдущему имя1,...,имяN – список выходных параметров;
имя_функции – имя с которым эта функция будет вызываться, переменная_1, ...,переменная_M – входные параметры.
Определение выходных переменных происходит в теле функции.
Пример. Определите функцию f(x)=sin(cos(x)) и вычислите ее значение в точках {-1,3; 2,1; 3,7}.
-->function f=fun(x)
-->f=sin(cos(x))
-->endfunction
-->[fun(-1.3) fun(2.1) fun(3.7)]
ans = 0.2643200 - 0.4836727 - 0.7500251
Пример. Определите функцию, в которой одновременно задаются f(x,y)=cos(x+y) и g(x,y)=sin(x-y) и вычислите ее значение в точке (-2,5; 1,7).
-->deff('[f,g]=fnc(x,y)','f=cos(x+y);g=sin(x-y)')
-->[f1,g1]=fnc(-2.5,1.7)
g1 = 0.8715758
f1 = 0.6967067
-->function[f,g]=fnc(x,y)
-->f=cos(x+y)
-->g=sin(x-y)
-->endfunction
-->[f2,g2]=fnc(-2.5,1.7)
g2 = 0.8715758
f2 = 0.6967067
Все имена переменных внутри функции, а также имена из списка входных и
выходных параметров воспринимаются системой как локальные, т.е. считаются определенными только внутри функции.
Вообще говоря, функции в SciLab играют роль подпрограмм. Поэтому целесообразно набирать их тексты в редакторе и сохранять в виде отдельных файлов.
Причем имя файла должно обязательно совпадать с именем функции.
Расширение файлам-функциям обычно присваивают sciили sce.
Обращение к функции осуществляется так же, как и к любой другой встроенной функции системы, т.е. из командной строки. Однако функции, хранящиеся в отдельных файлах, должны быть предварительно загружены в систему, например, при помощи оператора exec(имя_файла) или командой главного меню File – Exec. . . , что, в общем, одно и то же.
Например, создан файл-функция cub для решения кубического уравнения.
function [x1, x2, x3]=cub(a, b, c, d)
r=b/a;
s=c/a;
t=d/a;
p=(3*s-r^2)/3;
q=2*r^3/27-r*s/3+t;
D=(p/3)^3+(q/2)^2;
u=(-q/2+sqrt(D))^(1/3);
v=(-q/2-sqrt(D))^(1/3);
y1=u+v;
y2=-(u+v)/2+(u-v)/2*%i*sqrt(3);
y3=-(u+v)/2-(u-v)/2*%i*sqrt(3);
x1=y1-r/3;
x2=y2-r/3;
x3=y3-r/3;
endfunction
Для использования функции загружаем ее, т.е. указываем путь к файлу, содержащему функцию
-->exec('e:\Документы\SciLab\Примеры\cub.sce');
-->[x1,x2,x3]=cub(3,-20,-3,4)
x3 = 0.3880206
x2 = - 0.5064407
x1 = 6.7850868