Компания ALT Linux
Опубликован: 12.03.2015 | Доступ: свободный | Студентов: 576 / 64 | Длительность: 20:55:00
Лекция 2:

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

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, ( 2.1)

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

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

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

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

y^3+py+q=0, ( 2.2)

где 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\ge0 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).
Алексей Игнатьев
Алексей Игнатьев

Возможна ли разработка приложения на Octave с GUI?

Евгений Ветчанин
Евгений Ветчанин

Добрый день. Я самостоятельно изучил курс "Введение в Octave" и хочу получить сертификат. Что нужно сднлать для этого? Нужно ли записаться на персональное обучение с тьютором или достаточно перевести деньги?