Функции пользователя

Функция, как правило, предназначена для неоднократного использования, она имеет входные параметры и не выполняется без их предварительного задания. Рассмотрим несколько способов создания функций в 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