Lecture

Created: 12.03.2015 | Level: for all | Access: paid | University: Компания ALT Linux
Lecture 2:

Основы работы

< Lecture 1 || Lecture 2: 1234567 || Lecture 3 >

2.5.5 Функции, определённые пользователем

В первой главе мы уже рассмотрели создание небольшой программы, которая решает конкретное квадратное уравнение. В этой программе отсутствовал заголовок (первая строка определённого вида), и в неё невозможно было передать входные параметры, то есть это был обычный список команд, воспринимаемый системой как единый оператор.

Функция, как и программа, предназначена для неоднократного использования, но она имеет входные параметры и не выполняется без их предварительного задания. Функция имеет заголовок вида

\[ function\ name1[,name2,... ] = fun(var1[,var2,... ]) \]

где \[ name1[,name2,... ] \] — список выходных параметров, то есть переменных, которым будет присвоен конечный результат вычислений, \[ fun \] — имя функции, \[ var1[,var2,... ] \] — входные параметры. Таким образом простейший заголовок функции выглядит так:

\[ function\ name = fun(var) \]

Все имена переменных внутри функции, а также имена из списка входных и выходных параметров воспринимаются системой как локальные, то есть эти переменные считаются определёнными только внутри функции.

Программы и функции в Octave могут быть созданы при помощи текстового редактора и сохранены в виде файла с расширением .m или .M. Но при создании и сохранении функции следует помнить, что её имя должно совпадать с именем файла.

Вызов программ в Octave осуществляется из командной строки. Программу можно запустить на выполнение, указав имя файла, в котором она сохранена.

Обращение к функции осуществляется так же, как и к любой другой встроенной функции системы, то есть с указанием входных и выходных параметров. Вы можете вызвать функцию из командной строки или использовать её как один из операторов программы.

Пример 2.1. Создать функцию для решения кубического уравнения.

Кубическое уравнение

\[ ax^3+bx^2+cx+d=0 \]

после деления на \[ a \] принимает канонический вид:

\[ x^3+rx^2+sx+t=0, \]

где \[ r=\frac{b}{a}, s=\frac{c}{a}, t=\frac{d}{a} \]

В уравнении (2.1) сделаем замену

\[ x=y-\frac{r}{3} \]

и получим следующее приведённое уравнение:

\[ y^3+py+q=0, \]

где \[ p=\frac{(3s-r^2)}{3},q=\frac{2r^3}{27}-\frac{rs}{3}+t \]

Число действительных корней приведённого уравнения (2.2) зависит от знака дискриминанта \[ D =(\frac{p}{3})^3+(\frac{q}{2})^3 \] (табл. 2.10).

Корни приведённого уравнения могут быть рассчитаны по формулам Кардано:

\[ y_1=u+v,y_2=\frac{-(u+v)}{2}+\frac{(u-v)}{2}i\sqrt{3},y_3=\frac{-(u + v)}{2}-\frac{(u-v)}{2}i\sqrt{3} \]
Таблица 2.10. Количество корней кубического уравнения
Дискриминант Количество действительных корней Количество комплексных корнейth
D \[ \ge \] 0 1 3
D<0 3 -

Здесь \[ u=\sqrt[3]{\frac{-q}{2}+\sqrt{D}}, v =\sqrt[3]{\frac{-q}{2}-\sqrt{D}}, \]

Далее представлен список команд (листинг 2.1), реализующий описанный выше способ решения кубического уравнения:

	
>>> 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
% Вычисляем корни уравнения 
                \[
                3x^3-2x^2-x-4=0
                \]
            
>>> [x1, x2, x3]=cub(3, -2, -1, -4)
x1 = 1.4905
x2 = -0.41191 + 0.85141i
x3 = -0.41191 - 0.85141i
Листинг 2.1. Нахождение корней кубического уравнения (пример 2.1).
< Lecture 1 || Lecture 2: 1234567 || Lecture 3 >