SlideShare a Scribd company logo
1 of 16
Download to read offline
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ
УНИВЕРСИТЕТ»
КРАТКОЕ ВВЕДЕНИЕ В СИСТЕМУ OCTAVE
Учебно-методическое пособие для вузов
Составитель
Я.А. Израилевич
Издательско-полиграфический центр
Воронежского государственного университета
2009
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Утверждено научно-методическим советом математического факультета
30 апреля 2009 г., протокол № 8
Рецензент А.В. Костин
Учебно-методическое пособие подготовлено на кафедре математического
анализа математического факультета Воронежского государственного уни-
верситета.
Рекомендуется для студентов 3–5 курсов математического факультета очной
формы обучения.
Для специальности 010101 – Математика и направления 010100 – Математика
2
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3
ВВЕДЕНИЕ
В последнее время усилился интерес к свободно распространяемому
программному обеспечению (freeware) — как альтернативе коммерческому
лицензионному программному обеспечению (proprietary software), причем
этот интерес характерен для самых различных сфер деятельности, включая
образование и бизнес. Стоит отметить, что основной альтернативой коммер-
ческому лицензионному пакету Microsoft Office является свободно распро-
страняемый пакет OpenOffice.org, и что имеется достаточно широкий выбор
свободно распространяемых средств программирования и разработки баз
данных, а в качестве альтернатив таким коммерческим лицензионным паке-
там компьютерной математики, как Mathematica, Maple и MATLAB, часто
используют программы Maxima и scilab, существенно уступающие своим
коммерческим лицензионным конкурентам (как это обычно и бывает). Оп-
ределенный интерес может представлять такая свободно распространяемая
программа компьютерной математики, как GNU Octave. Ее возможности в
решении задач математического программирования шире, чем у Maxima,
scilab и OpenOffice.org Calc, а документация по Octave вполне удобочитаема
и подробна. Отметим наличие в Octave основных финансовых функций, ак-
тивно используемых в финансовой математике и финансовом анализе; это
позволяет в ряде случаев сравнивать результаты расчетов в Octave и
OpenOffice.org Calc. Несмотря на примитивизм интерфейса Octave и даже
некоторую неустойчивость в работе, к Octave можно быстро приспособиться
и успешно ее использовать, по крайней мере для определенного ограниченно-
го круга задач. Дистрибутив и описание GNU Octave Вы можете получить
легально и бесплатно на сайтах
http://www.octave.org
http://www.gnu.org/software/octave/
или по адресу
http://freestatistics.altervista.org/click/fclick.php?fid=48
или там, где найдете (также легально и бесплатно).
Ниже дано беглое введение в систему GNU Octave и описано примене-
ние Octave к решению некоторых простых задач учебного характера, связан-
ных с математическим программированием и финансовой математикой.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
4
НАЧАЛО РАБОТЫ
Мы описываем версии 2.9.11 – 3.0.0 программы GNU Octave. Запуск
программы Octave в MS Windows производится обычным образом. Начать
работу стоит с приведения окна консоли в удобочитаемый вид; это можно
сделать (если необходимо) через меню Edit-Settings-Appearance, установив
параметр Size, равным, скажем, 14, Custom color — ярко-зеленым и проставив
птичку в поле Save settings to user directory.
В открывшемся окне консоли программы стало видно приглашение
octave:1>
Вы можете выйти из программы, набрав в приглашении quit или exit
octave:1>quit
или octave:1>exit
Выйти из программы можно и через строку меню окна консоли.
Если же Вы хотите попробовать начать работу, наберите в приглаше-
нии команду A = [1, 1,2;3,5.5,8 ;13,21, 34 ]
octave:1> A = [1, 1,2;3,5.5,8 ;13,21, 34 ]
Эта команда создает матрицу и помещает ее в переменную. До элемен-
тов матрицы A можно добраться командами вида A(3, 2)
octave:2> A(3, 2)
Команда a= rand (3, 2);
octave:3> a= rand (3, 2);
создает матрицу 3 х 2, элементы которой ― случайные числа между 0 и 1.
Точка с запятой подавляет вывод результата. Вывести матрицу a можно
командой a
octave:4> a
Выведя аналогичным образом матрицу A
octave:5> A
убеждаемся, что Octave различает строчные и заглавные буквы. Заметим
также, что пробелы внутри имен, чисел и операторов не допускаются.
В Octave есть средства редактирования командной строки. Однако без
них вполне можно обойтись, редактируя команды в Блокноте и вставляя их
не слишком большими порциями в командную строку через строку меню или
контекстное меню (Edit-Paste).
Команды
octave:6> A * a
octave:7> a * A
octave:8> a' * A
и
octave:9>(a')*A
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
5
приводят к естественным результатам. Отметим наличие в Octave большого
числа операций над матрицами, в том числе для поэлементных
арифметических действий (операции .* , ./ , . и др.). Так
octave:10>A*A
– обычный квадрат квадратной матрицы, а операция .* поэлементного
умножения
octave:11>A .* A
даст матрицу, составленную из квадратов элементов матрицы A.
ДОКУМЕНТАЦИЯ/СПРАВКА
Дистрибутив программы GNU Octave содержит обширную докумен-
тацию, из которой наиболее полезными, по-видимому, являются документы
GNU Octave-Documentation-HTML-Octave
и GNU Octave-Documentation-PDF-FAQ Octave ,
доступные из меню «Все программы» кнопки «Пуск» после установки
программы GNU Octave.
Справка, доступная из меню окна консоли программы GNU Octave, не
особенно полезна.
Из командной строки можно запускать команды
octave.exe:1> help
– это приводит к выводу большого количества информации, которой не
очень удобно пользоваться; можно также запускать команды вида
octave.exe:1> help command
например,
octave.exe:1> help rand
Много новой и полезной информации можно найти по адресам
http://www.octave.org
http://www.gnu.org/software/octave/
РЕШЕНИЕ УРАВНЕНИЙ
Мы будем рассматривать алгебраические и трансцендентные уравнения
вида f(x) = 0. Сначала определим графически начальные приближения к
корням уравнения, а затем численно уточним их.
Для построения графиков будем использовать функцию plot. Скажем,
для построения графика функции y = sin t на отрезке [-10,10] зададим
вектор аргументов t командой
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
6
octave.exe:1> t = -10:0.1:10;
и построим график командой
octave.exe:2> plot (t, sin(t));
– эта команда откроет графическое окно, в котором и покажет нам
график. Заметим, что передвигая курсор этого окна, мы можем в левом
нижнем углу графического окна видеть абсциссы и ординаты различных
точек на графике.
Для численного уточнения корня применим функцию fsolve .. Для
этого сначала зададим функцию y = f(x)
octave.exe:3>function y = f (x)
y=sin(x)
endfunction
а затем уточним начальное приближение (скажем, 3.0) к корню
octave.exe:4>[x, info] = fsolve (@f, [3.0])
Octave сообщит нам о том, что корень найден, выдав
info = 1
Командой octave.exe:5> x, получим x = 3.1416
Рассмотрим теперь несколько более сложное уравнение
x3-5sin(3x)=0.
Ясно, что вне промежутка [-2,2] корней у этого уравнения нет.
Командами
octave.exe:6>t=-2:0.1:2;
octave.exe:7>plot (t, t.*t.*t.-5*sin(3*t));
построим график левой части уравнения на промежутке [-2,2]. Кроме
очевидного корня x=0 на графике видна пара симметричных относительно
нуля корней, приближенно равных –1 и 1. Зададим функцию g командой
octave.exe:6>function y = g(x)
y=x^3-5*sin(3*x)
endfunction
и уточним начальные приближения командами
octave.exe:7>[x, info] = fsolve (@g, [1])
octave.exe:8>x
что даст нам x=0.98341
и
octave.exe:9>[x, info] = fsolve (@g, [-1])
octave.exe:10>x
что даст нам x=-0.98341
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
7
РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ
Рассмотрим следующую несложную задачу линейного
программирования:
max{3x-4y}
x >= 0
y >= 0
x+y <=1
Решим ее численно с помощью доступной в Octave функции glpk из
GNU GLPK library. Для этого зададим вектор коэффициентов целевой
функции командой
octave:1> C = [3,-4]'
и параметр s = –1, что означает максимизацию, командой
octave:2> s = -1;
(Обратите внимание на символ транспонирования ‘ )
Ограничения x >= 0 , y >= 0 зададим командой
octave:3> lb = [0,0]';
означающей, что обе переменные ограничены снизу нулем, и командой
octave:4> ub = [];
означающей, что обе переменные формально не ограничены сверху.
(Симвод l в команде lb = [0,0]'; – это, конечно строчная буква, соответст-
вующая заглавной L – от lower bounds – нижние границы, а отнюдь не единица.)
Для учета ограничения x+y <=1 зададим матрицу A и вектор B
командами
octave:5>A= [1,1]
octave:6>B= [1]
а также зададим параметр ctype = "U" командой
octave:7>ctype = "U";
что означает знак "<=" в ограничении, которое задается с помощью A и B в
данном случае. Команда
octave:8>vartype="CC";
указывает, что обе переменные непрерывны (не дискретны). Далее зададим
нормальный уровень вывода командой
octave:9> param.msglev = 2;
и ограничим количество шагов симплекс-метода величиной 100 с помощью
команды
octave:10> param.itlim = 100;
Теперь запустим функцию glpk командой
octave:11>[xmin, fmin, status, extra] = ...
glpk (C, A, B, lb, ub, ctype, vartype, s, param);
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
8
Многоточие “…” здесь обозначает, что команда продолжается на
следующей строке.
В качестве результата получаем среди прочего значение целевой
функции в точке максимума
objval = 3.000000000e+000
и саму точку максимума
xmin = 1 0
Рассмотрим теперь следующую задачу линейного программирования;
она получена из примера, приведенного на листе «График занятости» файла
SOLVSAMP.xls из пакета Microsoft Office.
min { x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7)}
x(2)+x(3)+x(4)+x(5)+x(6) >= 22
x(3)+x(4)+x(5)+x(6)+x(7) >= 17
x(1)+x(4)+x(5)+x(6)+x(7) >= 13
x(1)+x(2)+x(5)+x(6)+x(7) >= 14
x(1)+x(2)+x(3)+x(6)+x(7) >= 15
x(1)+x(2)+x(3)+x(4)+x(7) >= 18
x(1)+x(2)+x(3)+x(4)+x(5) >= 24
x(i) целые
x(i) >= 0
Решим ее численно с помощью доступной в Octave функции glpk из
GNU GLPK library. Для этого зададим вектор коэффициентов целевой
функции командой
octave:1> c = [1, 1, 1,1,1, 1,1]';
и параметр s = 1, что означает минимизацию, командой
octave:2> s = 1;
Ограничения x(i) >= 0 зададим командой
octave:3> lb = [0, 0, 0,0, 0, 0,0]';
означающей, что все переменные ограничены снизу нулем, и командой
octave:4> ub = [];
означающей, что все переменные формально не ограничены сверху.
Команда octave:5> vartype = "IIIIIII" указывает, что все перемен-ные –
целые. (Здесь символ I –заглавная буква, соответствующая строчной i ).
Для учета оставшихся ограничений зададим матрицу a и вектор b
командами
octave:6> a = [ 0,1,1, 1, 1,1,0;
0,0,1, 1, 1,1,1;
1,0,0, 1, 1,1,1;
1,1,0, 0, 1,1,1;
1,1,1, 0,0,1,1;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
9
1,1,1,1, 0,0,1;
1,1,1,1, 1,0,0;];
octave:7> b = [ 22, 17, 13, 14, 15, 18, 24]';
а также зададим параметр ctype = "LLLLLLL" командой
octave:8> ctype = "LLLLLLL";
что означает знак ">=" в ограничениях, которые задаются с помощью a и b в
данном случае. Далее зададим нормальный уровень вывода командой
octave:9> param.msglev = 2;
и ограничим количество шагов симплекс-метода величиной 100 с помощью
команды
octave:10> param.itlim = 100;
Теперь запустим функцию glpk командой
octave.exe:11> [xmin, fmin, status, extra] = ...
glpk (c, a, b, lb, ub, ctype, vartype, s, param);
Многоточие “…” здесь обозначает, что команда продолжается на
следующей строке.
В качестве результата получаем значение целевой функции в точке
минимума
octave.exe:12> fmin
fmin = 25
и саму точку минимума
octave.exe:13> xmin
xmin =
3
5
7
4
6
0
0
Эта точка минимума не единственная, в чем можно убедиться с
помощью вышеупомянутого файла SOLVSAMP.xls, подставляя найденные в
Octave значения в SOLVSAMP.xls и сравнивая значения целевой функции для
точек, найденнвх численно в Octave и в MS Excel – в SOLVSAMP.xls.
РЕШЕНИЕ ЗАДАЧ МАТЕМАТИЧЕСКОГО ПРОГРАММИРОВАНИЯ
Рассмотрим следующую несложную задачу математического
программирования:
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
10
min{–3x+y2}
x >= 0
x2+y2 <=1
Решим ее численно с помощью доступной в Octave функции sqp. Для
этого зададим целевую функцию phi
octave:1> function obj = phi (x)
obj = -3*x(1)+x(2)^2;
endfunction
и вектор-функцию ограничений h
octave:2> function r = h (x)
r = [ -x(1)^2-x(2)^2+1; x(1)];
endfunction
Зададим начальное приближение x0
octave:3> x0 = [1.8; 1.7];
Теперь запустим функцию sqp командой
octave:4> [x,obj,info,iter,nf,lambda] = ...
sqp(x0, @phi, [], @h)
В качестве результата получаем точку минимума
x =
1.0000e+000
–7.5246e-009
и значение целевой функции в точке минимума
obj = -3.0000
Рассмотрим теперь следующую транспортную задачу; она получена из
примера, приведенного на листе «Транспортная задача» файла SOLVSAMP.xls,
входящего в состав пакета Microsoft Office. Конечно, транспортные задачи –
это специальный класс задач линейного программирования, но решать их
удобнее, используя средства решения задач математического
программирования. Это связано с тем, что выписывание векторов и матриц для
стандартной формы задачи линейного программирования, соответствующей
транспортной задаче, является малоприятным упражнением на
интеллектуальную выносливость, в то время как целевая функция и вектор-
функция ограничений для стандартной формы задачи математического
программирования, соответствующей транспортной задаче, выписываются
естественным образом. (Под стандартной формой мы понимаем форму,
используемую в той или иной программе. Отметим, что сделанное выше заме-
чание справедливо, пока не вмешиваются соображения, связанные с возможны-
ми большими размерами реальных задач.)
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
11
Итак, рассмотрим задачу
min { 10*x(1;1)+8*x(1;2)+6*x(1;3)+5*x(1;4)+4*x(1;5) ...
+6*x(2;1)+5*x(2;2)+3*x(2;3)+3*x(2;4)+6*x(2;5) ...
+3*x(3;1)+4*x(3;2)+5*x(3;3)+5*x(3;4)+9*x(3;5) }
x(1;1)+x(1;2)+x(1;3)+x(1;4)+x(1;5) <= 310
x(2;1)+x(2;2)+x(2;3)+x(2;4)+x(2;5) <= 260
x(3;1)+x(3;2)+x(3;3)+x(3;4)+x(3;5) <= 280
x(1;1)+x(2;1)+x(3;1) >= 180
x(1;2)+x(2;2)+x(3;2) >= 80
x(1;3)+x(2;3)+x(3;3) >= 200
x(1;4)+x(2;4)+x(3;4) >= 160
x(1;5)+x(2;5)+x(3;5) >= 220
x(i;j)>=0
Решим ее численно с помощью доступной в Octave функции sqp. Для
этого зададим целевую функцию phi
octave:1> function obj = phi (x)
xxx = rand (3, 5);
xxx(1,1)=x(1); xxx(1,2)=x(2);xxx(1,3)=x(3); xxx(1,4)=x(4); xxx(1,5)=x(5);
xxx(2,1)=x(6); xxx(2,2)=x(7);xxx(2,3)=x(8); xxx(2,4)=x(9); xxx(2,5)=x(10);
xxx(3,1)=x(11); xxx(3,2)=x(12); xxx(3,3)=x(13); xxx(3,4)=x(14); xxx(3,5)=x(15);
y1=10*xxx(1,1)+8*xxx(1,2)+6*xxx(1,3)+5*xxx(1,4)+4*xxx(1,5);
y2=6*xxx(2,1)+5*xxx(2,2)+4*xxx(2,3)+3*xxx(2,4)+6*xxx(2,5);
y3=3*xxx(3,1)+4*xxx(3,2)+5*xxx(3,3)+5*xxx(3,4)+9*xxx(3,5);
obj=y1+y2+y3
endfunction
Зададим вектор-функцию ограничений h
function r = h (x)
xx = rand (3, 5);
xx(1,1)=x(1); xx(1,2)=x(2);xx(1,3)=x(3); xx(1,4)=x(4); xx(1,5)=x(5);
xx(2,1)=x(6); xx(2,2)=x(7);xx(2,3)=x(8); xx(2,4)=x(9); xx(2,5)=x(10);
xx(3,1)=x(11); xx(3,2)=x(12);xx(3,3)=x(13); xx(3,4)=x(14); xx(3,5)=x(15);
r = [x(1); x(2); x(3);x(4);x(5);x(6); x(7);x(8);x(9);x(10); x(11);x(12);
x(13); x(14); x(15);
310 - xx(1,1)-xx(1,2)-xx(1,3)-xx(1,4)-xx(1,5);
260 - xx(2,1)-xx(2,2)-xx(2,3)-xx(2,4)-xx(2,5);
280 - xx(3,1)-xx(3,2)-xx(3,3)-xx(3,4)-xx(3,5);
- 180 + xx(1,1)+xx(2,1)+xx(3,1) ;
- 80 + xx(1,2)+xx(2,2)+xx(3,2) ;
- 200 + xx(1,3)+xx(2,3)+xx(3,3) ;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
12
xx(1,4)+xx(2,4)+xx(3,4) - 160;
xx(1,5)+xx(2,5)+xx(3,5) - 220]
endfunction
Зададим начальное приближение x0
octave:3> x0 = [9;9;9;9;9;9;9;9;9;9;9;9;9;9;9];
Теперь запустим функцию sqp командой
octave:4> [x, obj, info, iter, nf, lambda] = sqp (x0, @phi, [], @h)
В качестве результата получаем точку минимума
x =
0.00000
0.00000
45.00000
35.00000
220.00000
0.00000
0.00000
135.00000
125.00000
0.00000
180.00000
80.00000
20.00000
0.00000
0.00000
и значение целевой функции в точке минимума obj = 3200
Эта точка минимума не единственная, в чем можно убедиться с
помощью вышеупомянутого файла SOLVSAMP.xls, подставляя найденные в
Octave значения в SOLVSAMP.xls и сравнивая значения целевой функции для
точек, найденнвх численно в Octave и в MS Excel – в SOLVSAMP.xls.
ФИНАНСОВЫЕ ФУНКЦИИ
Дадим описание некоторых финансовых функций Octave.
Функция: fv (r, n, p, l, method)
Возвращает будущее значение в конце промежутка времени из n перио-
дов для потока платежей, состоящего из n платежей при ставке r для каждого
периода. Необязательный аргумент l может использоваться для задания до-
полнительной начальной суммы платежа. Необязательный аргумент method
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
13
может быть использован для указания того, что платежи производятся в конце
( "e" , по умолчанию), или же в начале ("b") каждого периода. Заметим, что
ставку r следует задавать как дробь (т. е., 0.05, а не 5 %).
Функция: fvl (r, n, l)
Возвращает будущее значение в конце промежутка времени из n пе-
риодов для начальной инвестиции l при ставке r для каждого периода. Ставку
r следует задавать как дробь (т. е., 0.05, а не 5 %).
Функция: irr (p, i)
Возвращает внутреннюю доходность потока платежей p, порожденного
начальной инвестицией i ( другими словами,. решение относительно r урав-
нения npv (r, p, i) = 0; сравните с описанием функции npv).
Функция nper (r, p, a, l, method)
Возвращает количество регулярных платежей величины p, необходимых
для выплаты займа величины a при процентной ставке r. Необязательный ар-
гумент l может использоваться для задания дополнительной суммы платежа в
конце последнего периода платежа. Необязательный аргумент method может
быть использован для указания того, что регулярные платежи производятся в
конце ( "e" , по умолчанию), или же в начале ("b" ) каждого периода. Заме-
тим, что ставку r следует задавать как дробь (т. е., 0.05, а не 5 %).
Функция npv (r, p, i)
Возвращает чистое приведённое (текущее) значение потока нерегуляр-
ных (т.е. не обязательно равных) платежей, осуществляемых в концах n по-
следовательных промежутков времени (периодов). Аргумент r задаёт одно-
периодные процентные ставки и может быть как скаляром (в случае постоян-
ной процентной ставки), так и вектором той же длины, что и p.
Необязательный аргумент i может использоваться для задания началь-
ной суммы платежа.
Заметим, что ставку r следует задавать как дробь (т. е., 0.05, а не 5 %).
Функция pmt (r, n, a, l, method)
Возвращает размер периодического платежа, необходимый для выпла-
ты займа величины a за n периодов при однопериодной процентной ставке r
Необязательный аргумент l может использоваться для задания дополнитель-
ной конечной суммы платежа. Необязательный аргумент method может быть
использован для указания того, что платежи производятся в конце ("e" , по
умолчанию), или же в начале ( "b" ) каждого периода.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
14
Заметим, что ставку r следует задавать как дробь (т. е., 0.05, а не 5 %).
Функция pvl (r, n, p)
Возвращает текущее (настоящее) значение вклада, по которому по завер-
шении n периодов при однопериодной процентной ставке r будет выплачена ве-
личина p. Заметим, что ставку r следует задавать как дробь (т. е., 0.05, а не 5 %).
Функция rate (n, p, v, l, method)
Возвращает ставку доходности по вкладу с настоящим (текущим) зна-
чением v, порождающему выплаты величины p за n последовательных пе-
риодов.
Необязательный аргумент l может использоваться для задания допол-
нительной конечной суммы платежа. Необязательный аргумент method мо-
жет быть использован для указания того, что платежи производятся в конце
("e" , по умолчанию), или же в начале ( "b" ) каждого периода.
Рассмотрим следующие задачи.
1. Определить, какой вклад следует положить на депозит, чтобы через
3 года на счете оказалась сумма 44 000 при номинальной ставке 16.5 % годо-
вых и начислении процентов 2 раза в год.
Решение:
octave.exe:1> l=44000
l = 44000
octave.exe:2> n=3*2
n = 6
octave.exe:3> r=0.165/2
r = 0.082500
octave.exe:4> p=0
p = 0
octave.exe:5> pv (r, n, p, l, "e")
ans = 2.7345e+004
octave.exe:6> format long e
octave.exe:7> pv (r, n, p, l, "e")
ans = 2.73454608150543e+004
2. Ссуда размером a погашается платежами размера p при номинальной
ставке i в течение n лет m раз в год. Определите n по известным a=5000,
p=141.7, r=16 %, m=12.
Решение:
octave.exe:1> a=5000, p=141.7, r=0.16/12
a = 5000
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
15
p = 141.70
r = 0.013333
octave.exe:2> nper (r, p, a)
ans = 48.001
octave.exe:3> 48/12
ans = 4
3. Рассчитайте годовую процентную ставку i по вкладу размером
100 000, если за 13 лет сумма возросла до 1 000 000 при начислении процен-
тов 4 раза в год.
Решение:
octave.exe:1> n=13*4, p=0, v= 100 000, l=1 000 000
n = 52
p = 0
v = 100 000
l = 1 000 000
octave.exe:2> rate (n, p, v, l)*4
ans = 0.18110
4. Рассчитайте внутреннюю доходность потока платежей 15 000,
16 000, 17 000, порожденного начальной инвестицией 20000.
Решение:
octave.exe:1> i=20000, p=[15000,16000,17000]
i = 20000
p =
5000 16000 17000
octave.exe:2> irr (p, i)
ans = 0.58964
Литература
1. GNU Octave. Documentation. (http://www.octave.org,http://
www.gnu.org/ software/octave/).
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Учебное издание
КРАТКОЕ ВВЕДЕНИЕ В СИСТЕМУ OCTAVE
Учебно-методическое пособие для вузов
Составитель
Израилевич Яков Аронович
Редактор И.Г. Валынкина
Подписано в печать 20.07.09. Формат 60×84/16. Усл. печ. л. 0,9.
Тираж 25 экз. Заказ 1161.
Издательско-полиграфический центр
Воронежского государственного университета.
394000, г. Воронеж, пл. им. Ленина, 10. Тел. 208-298, 598-026 (факс)
http://www.ppc.vsu.ru; e-mail: pp_center@ppc.vsu.ru
Отпечатано в типографии Издательско-полиграфического центра
Воронежского государственного университета.
394000, г. Воронеж, ул. Пушкинская, 3. Тел. 204-133
16
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

More Related Content

What's hot

Алгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеАлгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеAndrey Dolinin
 
Обработка коллекций наизнанку: как применить много функций к одному аргументу...
Обработка коллекций наизнанку: как применить много функций к одному аргументу...Обработка коллекций наизнанку: как применить много функций к одному аргументу...
Обработка коллекций наизнанку: как применить много функций к одному аргументу...corehard_by
 
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введениеmcroitor
 
Rabota so strokami_v_php
Rabota so strokami_v_phpRabota so strokami_v_php
Rabota so strokami_v_phpVasya Petrov
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stlmcroitor
 
Ввод - вывод алфавитно цифровой информации
Ввод - вывод алфавитно цифровой информацииВвод - вывод алфавитно цифровой информации
Ввод - вывод алфавитно цифровой информацииLungu
 
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Nikolay Grebenshikov
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++mcroitor
 
практика 4
практика 4практика 4
практика 4student_kai
 
Запись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальЗапись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальAndrey Dolinin
 
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Nikolay Grebenshikov
 
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...Iosif Itkin
 
scanf(). Операторы ветвления. Тернарный оператор. switch
scanf(). Операторы ветвления. Тернарный оператор. switchscanf(). Операторы ветвления. Тернарный оператор. switch
scanf(). Операторы ветвления. Тернарный оператор. switchIhor Porotikov
 
контейнеры STL
контейнеры STLконтейнеры STL
контейнеры STLmcroitor
 
Конструирование алгоритмов
Конструирование алгоритмовКонструирование алгоритмов
Конструирование алгоритмовAndrey Dolinin
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularitiesmcroitor
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey Paznikov
 

What's hot (20)

Алгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеАлгоритмическая конструкция Повторение
Алгоритмическая конструкция Повторение
 
Обработка коллекций наизнанку: как применить много функций к одному аргументу...
Обработка коллекций наизнанку: как применить много функций к одному аргументу...Обработка коллекций наизнанку: как применить много функций к одному аргументу...
Обработка коллекций наизнанку: как применить много функций к одному аргументу...
 
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
 
лр1
лр1лр1
лр1
 
Rabota so strokami_v_php
Rabota so strokami_v_phpRabota so strokami_v_php
Rabota so strokami_v_php
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stl
 
Ввод - вывод алфавитно цифровой информации
Ввод - вывод алфавитно цифровой информацииВвод - вывод алфавитно цифровой информации
Ввод - вывод алфавитно цифровой информации
 
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
практика 4
практика 4практика 4
практика 4
 
Запись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальЗапись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка Паскаль
 
Javascript functions
Javascript functionsJavascript functions
Javascript functions
 
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
 
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
 
Python
PythonPython
Python
 
scanf(). Операторы ветвления. Тернарный оператор. switch
scanf(). Операторы ветвления. Тернарный оператор. switchscanf(). Операторы ветвления. Тернарный оператор. switch
scanf(). Операторы ветвления. Тернарный оператор. switch
 
контейнеры STL
контейнеры STLконтейнеры STL
контейнеры STL
 
Конструирование алгоритмов
Конструирование алгоритмовКонструирование алгоритмов
Конструирование алгоритмов
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
 

Viewers also liked

Ganesha Ashtakam Bengali Transliteration
Ganesha Ashtakam Bengali TransliterationGanesha Ashtakam Bengali Transliteration
Ganesha Ashtakam Bengali TransliterationRavi Ramakrishnan
 
Bridging the Gap in Access to Finance by Small and Medium Enterprices in sudan
Bridging the Gap in Access to Finance by Small and Medium Enterprices in sudanBridging the Gap in Access to Finance by Small and Medium Enterprices in sudan
Bridging the Gap in Access to Finance by Small and Medium Enterprices in sudanAbeer Mohamed
 
384.что происходит с нефтяной и газовой промышленности
384.что происходит с нефтяной и газовой промышленности384.что происходит с нефтяной и газовой промышленности
384.что происходит с нефтяной и газовой промышленностиivanov1566359955
 
389.программа учебной практики с выездом
389.программа учебной практики с выездом389.программа учебной практики с выездом
389.программа учебной практики с выездомivanov1566359955
 
Certifecete.Law College 1
Certifecete.Law College 1Certifecete.Law College 1
Certifecete.Law College 1selwan mehgoub
 
Mcsa 2012 mạng căn bản phần 3
Mcsa 2012 mạng căn bản phần 3Mcsa 2012 mạng căn bản phần 3
Mcsa 2012 mạng căn bản phần 3laonap166
 
Amin tayyebi: Big Data and Land Use Change Science
Amin tayyebi: Big Data and Land Use Change ScienceAmin tayyebi: Big Data and Land Use Change Science
Amin tayyebi: Big Data and Land Use Change Scienceknowdiff
 
Tự học mcsa 2012 mạng căn bản phần 1
Tự học mcsa 2012 mạng căn bản phần 1Tự học mcsa 2012 mạng căn bản phần 1
Tự học mcsa 2012 mạng căn bản phần 1laonap166
 
Presentación bryan mendez
Presentación bryan mendezPresentación bryan mendez
Presentación bryan mendezbamendez15
 
Proyecto Implementación Leasing Financiero
Proyecto Implementación Leasing FinancieroProyecto Implementación Leasing Financiero
Proyecto Implementación Leasing Financierotutor03770
 
Apostila completa desenho tecnico telecurso 2000
Apostila completa desenho tecnico telecurso 2000Apostila completa desenho tecnico telecurso 2000
Apostila completa desenho tecnico telecurso 2000paulojadacosta
 
грудень 2015
грудень 2015грудень 2015
грудень 2015puchckov
 
Small business plan
Small business planSmall business plan
Small business planYue Yun
 
Apostila desenho técnico básico
Apostila desenho técnico básicoApostila desenho técnico básico
Apostila desenho técnico básicoLehTec
 

Viewers also liked (17)

Ganesha Ashtakam Bengali Transliteration
Ganesha Ashtakam Bengali TransliterationGanesha Ashtakam Bengali Transliteration
Ganesha Ashtakam Bengali Transliteration
 
Bridging the Gap in Access to Finance by Small and Medium Enterprices in sudan
Bridging the Gap in Access to Finance by Small and Medium Enterprices in sudanBridging the Gap in Access to Finance by Small and Medium Enterprices in sudan
Bridging the Gap in Access to Finance by Small and Medium Enterprices in sudan
 
384.что происходит с нефтяной и газовой промышленности
384.что происходит с нефтяной и газовой промышленности384.что происходит с нефтяной и газовой промышленности
384.что происходит с нефтяной и газовой промышленности
 
389.программа учебной практики с выездом
389.программа учебной практики с выездом389.программа учебной практики с выездом
389.программа учебной практики с выездом
 
Certifecete.Law College 1
Certifecete.Law College 1Certifecete.Law College 1
Certifecete.Law College 1
 
Mcsa 2012 mạng căn bản phần 3
Mcsa 2012 mạng căn bản phần 3Mcsa 2012 mạng căn bản phần 3
Mcsa 2012 mạng căn bản phần 3
 
Amin tayyebi: Big Data and Land Use Change Science
Amin tayyebi: Big Data and Land Use Change ScienceAmin tayyebi: Big Data and Land Use Change Science
Amin tayyebi: Big Data and Land Use Change Science
 
Tự học mcsa 2012 mạng căn bản phần 1
Tự học mcsa 2012 mạng căn bản phần 1Tự học mcsa 2012 mạng căn bản phần 1
Tự học mcsa 2012 mạng căn bản phần 1
 
Presentación bryan mendez
Presentación bryan mendezPresentación bryan mendez
Presentación bryan mendez
 
Thesis_Presentation
Thesis_PresentationThesis_Presentation
Thesis_Presentation
 
Presse : CGV 2016
Presse : CGV 2016Presse : CGV 2016
Presse : CGV 2016
 
Proyecto Implementación Leasing Financiero
Proyecto Implementación Leasing FinancieroProyecto Implementación Leasing Financiero
Proyecto Implementación Leasing Financiero
 
Apostila completa desenho tecnico telecurso 2000
Apostila completa desenho tecnico telecurso 2000Apostila completa desenho tecnico telecurso 2000
Apostila completa desenho tecnico telecurso 2000
 
Cas de campagne : BMW Série 1
Cas de campagne : BMW Série 1Cas de campagne : BMW Série 1
Cas de campagne : BMW Série 1
 
грудень 2015
грудень 2015грудень 2015
грудень 2015
 
Small business plan
Small business planSmall business plan
Small business plan
 
Apostila desenho técnico básico
Apostila desenho técnico básicoApostila desenho técnico básico
Apostila desenho técnico básico
 

Similar to 359.краткое введение в систему octave

Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...
Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...
Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...Positive Hack Days
 
Ecma script 6 yevhen diachenko
Ecma script 6 yevhen diachenkoEcma script 6 yevhen diachenko
Ecma script 6 yevhen diachenkoDenis Khabrenko
 
Пояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteПояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteTatyanazaxarova
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++Olga Maksimenkova
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
 
Cpp0x Introduction
Cpp0x IntroductionCpp0x Introduction
Cpp0x IntroductionFedor Vompe
 
тема множество для загрузки 2013
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013AliyaAringazinova
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхSergey Vasilyev
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8chashnikov
 
C# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееC# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееGetDev.NET
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выраженияTatyanazaxarova
 
Структурные формулы и функциональные схемы
Структурные формулы и функциональные схемыСтруктурные формулы и функциональные схемы
Структурные формулы и функциональные схемыaleksashka3
 
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...Tatyanazaxarova
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Technopark
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Tatyanazaxarova
 

Similar to 359.краткое введение в систему octave (20)

Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...
Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...
Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...
 
Ecma script 6 yevhen diachenko
Ecma script 6 yevhen diachenkoEcma script 6 yevhen diachenko
Ecma script 6 yevhen diachenko
 
Пояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteПояснения к статье про Copy-Paste
Пояснения к статье про Copy-Paste
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Cpp0x Introduction
Cpp0x IntroductionCpp0x Introduction
Cpp0x Introduction
 
тема множество для загрузки 2013
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данных
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8
 
C# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееC# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущее
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выражения
 
Структурные формулы и функциональные схемы
Структурные формулы и функциональные схемыСтруктурные формулы и функциональные схемы
Структурные формулы и функциональные схемы
 
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...
 
Урок 7. Интерпретация и компиляция функциональных программ.
Урок 7. Интерпретация и компиляция функциональных программ.Урок 7. Интерпретация и компиляция функциональных программ.
Урок 7. Интерпретация и компиляция функциональных программ.
 
презентация1
презентация1презентация1
презентация1
 
Java 8 puzzlers
Java 8 puzzlersJava 8 puzzlers
Java 8 puzzlers
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
 

More from ivanov1566359955 (20)

7365
73657365
7365
 
7364
73647364
7364
 
7363
73637363
7363
 
7362
73627362
7362
 
7361
73617361
7361
 
7360
73607360
7360
 
7359
73597359
7359
 
7358
73587358
7358
 
7357
73577357
7357
 
7356
73567356
7356
 
7355
73557355
7355
 
7354
73547354
7354
 
7353
73537353
7353
 
7352
73527352
7352
 
7351
73517351
7351
 
7350
73507350
7350
 
7349
73497349
7349
 
7348
73487348
7348
 
7347
73477347
7347
 
7346
73467346
7346
 

359.краткое введение в систему octave

  • 1. ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» КРАТКОЕ ВВЕДЕНИЕ В СИСТЕМУ OCTAVE Учебно-методическое пособие для вузов Составитель Я.А. Израилевич Издательско-полиграфический центр Воронежского государственного университета 2009 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 2. Утверждено научно-методическим советом математического факультета 30 апреля 2009 г., протокол № 8 Рецензент А.В. Костин Учебно-методическое пособие подготовлено на кафедре математического анализа математического факультета Воронежского государственного уни- верситета. Рекомендуется для студентов 3–5 курсов математического факультета очной формы обучения. Для специальности 010101 – Математика и направления 010100 – Математика 2 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 3. 3 ВВЕДЕНИЕ В последнее время усилился интерес к свободно распространяемому программному обеспечению (freeware) — как альтернативе коммерческому лицензионному программному обеспечению (proprietary software), причем этот интерес характерен для самых различных сфер деятельности, включая образование и бизнес. Стоит отметить, что основной альтернативой коммер- ческому лицензионному пакету Microsoft Office является свободно распро- страняемый пакет OpenOffice.org, и что имеется достаточно широкий выбор свободно распространяемых средств программирования и разработки баз данных, а в качестве альтернатив таким коммерческим лицензионным паке- там компьютерной математики, как Mathematica, Maple и MATLAB, часто используют программы Maxima и scilab, существенно уступающие своим коммерческим лицензионным конкурентам (как это обычно и бывает). Оп- ределенный интерес может представлять такая свободно распространяемая программа компьютерной математики, как GNU Octave. Ее возможности в решении задач математического программирования шире, чем у Maxima, scilab и OpenOffice.org Calc, а документация по Octave вполне удобочитаема и подробна. Отметим наличие в Octave основных финансовых функций, ак- тивно используемых в финансовой математике и финансовом анализе; это позволяет в ряде случаев сравнивать результаты расчетов в Octave и OpenOffice.org Calc. Несмотря на примитивизм интерфейса Octave и даже некоторую неустойчивость в работе, к Octave можно быстро приспособиться и успешно ее использовать, по крайней мере для определенного ограниченно- го круга задач. Дистрибутив и описание GNU Octave Вы можете получить легально и бесплатно на сайтах http://www.octave.org http://www.gnu.org/software/octave/ или по адресу http://freestatistics.altervista.org/click/fclick.php?fid=48 или там, где найдете (также легально и бесплатно). Ниже дано беглое введение в систему GNU Octave и описано примене- ние Octave к решению некоторых простых задач учебного характера, связан- ных с математическим программированием и финансовой математикой. Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 4. 4 НАЧАЛО РАБОТЫ Мы описываем версии 2.9.11 – 3.0.0 программы GNU Octave. Запуск программы Octave в MS Windows производится обычным образом. Начать работу стоит с приведения окна консоли в удобочитаемый вид; это можно сделать (если необходимо) через меню Edit-Settings-Appearance, установив параметр Size, равным, скажем, 14, Custom color — ярко-зеленым и проставив птичку в поле Save settings to user directory. В открывшемся окне консоли программы стало видно приглашение octave:1> Вы можете выйти из программы, набрав в приглашении quit или exit octave:1>quit или octave:1>exit Выйти из программы можно и через строку меню окна консоли. Если же Вы хотите попробовать начать работу, наберите в приглаше- нии команду A = [1, 1,2;3,5.5,8 ;13,21, 34 ] octave:1> A = [1, 1,2;3,5.5,8 ;13,21, 34 ] Эта команда создает матрицу и помещает ее в переменную. До элемен- тов матрицы A можно добраться командами вида A(3, 2) octave:2> A(3, 2) Команда a= rand (3, 2); octave:3> a= rand (3, 2); создает матрицу 3 х 2, элементы которой ― случайные числа между 0 и 1. Точка с запятой подавляет вывод результата. Вывести матрицу a можно командой a octave:4> a Выведя аналогичным образом матрицу A octave:5> A убеждаемся, что Octave различает строчные и заглавные буквы. Заметим также, что пробелы внутри имен, чисел и операторов не допускаются. В Octave есть средства редактирования командной строки. Однако без них вполне можно обойтись, редактируя команды в Блокноте и вставляя их не слишком большими порциями в командную строку через строку меню или контекстное меню (Edit-Paste). Команды octave:6> A * a octave:7> a * A octave:8> a' * A и octave:9>(a')*A Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 5. 5 приводят к естественным результатам. Отметим наличие в Octave большого числа операций над матрицами, в том числе для поэлементных арифметических действий (операции .* , ./ , . и др.). Так octave:10>A*A – обычный квадрат квадратной матрицы, а операция .* поэлементного умножения octave:11>A .* A даст матрицу, составленную из квадратов элементов матрицы A. ДОКУМЕНТАЦИЯ/СПРАВКА Дистрибутив программы GNU Octave содержит обширную докумен- тацию, из которой наиболее полезными, по-видимому, являются документы GNU Octave-Documentation-HTML-Octave и GNU Octave-Documentation-PDF-FAQ Octave , доступные из меню «Все программы» кнопки «Пуск» после установки программы GNU Octave. Справка, доступная из меню окна консоли программы GNU Octave, не особенно полезна. Из командной строки можно запускать команды octave.exe:1> help – это приводит к выводу большого количества информации, которой не очень удобно пользоваться; можно также запускать команды вида octave.exe:1> help command например, octave.exe:1> help rand Много новой и полезной информации можно найти по адресам http://www.octave.org http://www.gnu.org/software/octave/ РЕШЕНИЕ УРАВНЕНИЙ Мы будем рассматривать алгебраические и трансцендентные уравнения вида f(x) = 0. Сначала определим графически начальные приближения к корням уравнения, а затем численно уточним их. Для построения графиков будем использовать функцию plot. Скажем, для построения графика функции y = sin t на отрезке [-10,10] зададим вектор аргументов t командой Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 6. 6 octave.exe:1> t = -10:0.1:10; и построим график командой octave.exe:2> plot (t, sin(t)); – эта команда откроет графическое окно, в котором и покажет нам график. Заметим, что передвигая курсор этого окна, мы можем в левом нижнем углу графического окна видеть абсциссы и ординаты различных точек на графике. Для численного уточнения корня применим функцию fsolve .. Для этого сначала зададим функцию y = f(x) octave.exe:3>function y = f (x) y=sin(x) endfunction а затем уточним начальное приближение (скажем, 3.0) к корню octave.exe:4>[x, info] = fsolve (@f, [3.0]) Octave сообщит нам о том, что корень найден, выдав info = 1 Командой octave.exe:5> x, получим x = 3.1416 Рассмотрим теперь несколько более сложное уравнение x3-5sin(3x)=0. Ясно, что вне промежутка [-2,2] корней у этого уравнения нет. Командами octave.exe:6>t=-2:0.1:2; octave.exe:7>plot (t, t.*t.*t.-5*sin(3*t)); построим график левой части уравнения на промежутке [-2,2]. Кроме очевидного корня x=0 на графике видна пара симметричных относительно нуля корней, приближенно равных –1 и 1. Зададим функцию g командой octave.exe:6>function y = g(x) y=x^3-5*sin(3*x) endfunction и уточним начальные приближения командами octave.exe:7>[x, info] = fsolve (@g, [1]) octave.exe:8>x что даст нам x=0.98341 и octave.exe:9>[x, info] = fsolve (@g, [-1]) octave.exe:10>x что даст нам x=-0.98341 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 7. 7 РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ Рассмотрим следующую несложную задачу линейного программирования: max{3x-4y} x >= 0 y >= 0 x+y <=1 Решим ее численно с помощью доступной в Octave функции glpk из GNU GLPK library. Для этого зададим вектор коэффициентов целевой функции командой octave:1> C = [3,-4]' и параметр s = –1, что означает максимизацию, командой octave:2> s = -1; (Обратите внимание на символ транспонирования ‘ ) Ограничения x >= 0 , y >= 0 зададим командой octave:3> lb = [0,0]'; означающей, что обе переменные ограничены снизу нулем, и командой octave:4> ub = []; означающей, что обе переменные формально не ограничены сверху. (Симвод l в команде lb = [0,0]'; – это, конечно строчная буква, соответст- вующая заглавной L – от lower bounds – нижние границы, а отнюдь не единица.) Для учета ограничения x+y <=1 зададим матрицу A и вектор B командами octave:5>A= [1,1] octave:6>B= [1] а также зададим параметр ctype = "U" командой octave:7>ctype = "U"; что означает знак "<=" в ограничении, которое задается с помощью A и B в данном случае. Команда octave:8>vartype="CC"; указывает, что обе переменные непрерывны (не дискретны). Далее зададим нормальный уровень вывода командой octave:9> param.msglev = 2; и ограничим количество шагов симплекс-метода величиной 100 с помощью команды octave:10> param.itlim = 100; Теперь запустим функцию glpk командой octave:11>[xmin, fmin, status, extra] = ... glpk (C, A, B, lb, ub, ctype, vartype, s, param); Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 8. 8 Многоточие “…” здесь обозначает, что команда продолжается на следующей строке. В качестве результата получаем среди прочего значение целевой функции в точке максимума objval = 3.000000000e+000 и саму точку максимума xmin = 1 0 Рассмотрим теперь следующую задачу линейного программирования; она получена из примера, приведенного на листе «График занятости» файла SOLVSAMP.xls из пакета Microsoft Office. min { x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7)} x(2)+x(3)+x(4)+x(5)+x(6) >= 22 x(3)+x(4)+x(5)+x(6)+x(7) >= 17 x(1)+x(4)+x(5)+x(6)+x(7) >= 13 x(1)+x(2)+x(5)+x(6)+x(7) >= 14 x(1)+x(2)+x(3)+x(6)+x(7) >= 15 x(1)+x(2)+x(3)+x(4)+x(7) >= 18 x(1)+x(2)+x(3)+x(4)+x(5) >= 24 x(i) целые x(i) >= 0 Решим ее численно с помощью доступной в Octave функции glpk из GNU GLPK library. Для этого зададим вектор коэффициентов целевой функции командой octave:1> c = [1, 1, 1,1,1, 1,1]'; и параметр s = 1, что означает минимизацию, командой octave:2> s = 1; Ограничения x(i) >= 0 зададим командой octave:3> lb = [0, 0, 0,0, 0, 0,0]'; означающей, что все переменные ограничены снизу нулем, и командой octave:4> ub = []; означающей, что все переменные формально не ограничены сверху. Команда octave:5> vartype = "IIIIIII" указывает, что все перемен-ные – целые. (Здесь символ I –заглавная буква, соответствующая строчной i ). Для учета оставшихся ограничений зададим матрицу a и вектор b командами octave:6> a = [ 0,1,1, 1, 1,1,0; 0,0,1, 1, 1,1,1; 1,0,0, 1, 1,1,1; 1,1,0, 0, 1,1,1; 1,1,1, 0,0,1,1; Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 9. 9 1,1,1,1, 0,0,1; 1,1,1,1, 1,0,0;]; octave:7> b = [ 22, 17, 13, 14, 15, 18, 24]'; а также зададим параметр ctype = "LLLLLLL" командой octave:8> ctype = "LLLLLLL"; что означает знак ">=" в ограничениях, которые задаются с помощью a и b в данном случае. Далее зададим нормальный уровень вывода командой octave:9> param.msglev = 2; и ограничим количество шагов симплекс-метода величиной 100 с помощью команды octave:10> param.itlim = 100; Теперь запустим функцию glpk командой octave.exe:11> [xmin, fmin, status, extra] = ... glpk (c, a, b, lb, ub, ctype, vartype, s, param); Многоточие “…” здесь обозначает, что команда продолжается на следующей строке. В качестве результата получаем значение целевой функции в точке минимума octave.exe:12> fmin fmin = 25 и саму точку минимума octave.exe:13> xmin xmin = 3 5 7 4 6 0 0 Эта точка минимума не единственная, в чем можно убедиться с помощью вышеупомянутого файла SOLVSAMP.xls, подставляя найденные в Octave значения в SOLVSAMP.xls и сравнивая значения целевой функции для точек, найденнвх численно в Octave и в MS Excel – в SOLVSAMP.xls. РЕШЕНИЕ ЗАДАЧ МАТЕМАТИЧЕСКОГО ПРОГРАММИРОВАНИЯ Рассмотрим следующую несложную задачу математического программирования: Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 10. 10 min{–3x+y2} x >= 0 x2+y2 <=1 Решим ее численно с помощью доступной в Octave функции sqp. Для этого зададим целевую функцию phi octave:1> function obj = phi (x) obj = -3*x(1)+x(2)^2; endfunction и вектор-функцию ограничений h octave:2> function r = h (x) r = [ -x(1)^2-x(2)^2+1; x(1)]; endfunction Зададим начальное приближение x0 octave:3> x0 = [1.8; 1.7]; Теперь запустим функцию sqp командой octave:4> [x,obj,info,iter,nf,lambda] = ... sqp(x0, @phi, [], @h) В качестве результата получаем точку минимума x = 1.0000e+000 –7.5246e-009 и значение целевой функции в точке минимума obj = -3.0000 Рассмотрим теперь следующую транспортную задачу; она получена из примера, приведенного на листе «Транспортная задача» файла SOLVSAMP.xls, входящего в состав пакета Microsoft Office. Конечно, транспортные задачи – это специальный класс задач линейного программирования, но решать их удобнее, используя средства решения задач математического программирования. Это связано с тем, что выписывание векторов и матриц для стандартной формы задачи линейного программирования, соответствующей транспортной задаче, является малоприятным упражнением на интеллектуальную выносливость, в то время как целевая функция и вектор- функция ограничений для стандартной формы задачи математического программирования, соответствующей транспортной задаче, выписываются естественным образом. (Под стандартной формой мы понимаем форму, используемую в той или иной программе. Отметим, что сделанное выше заме- чание справедливо, пока не вмешиваются соображения, связанные с возможны- ми большими размерами реальных задач.) Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 11. 11 Итак, рассмотрим задачу min { 10*x(1;1)+8*x(1;2)+6*x(1;3)+5*x(1;4)+4*x(1;5) ... +6*x(2;1)+5*x(2;2)+3*x(2;3)+3*x(2;4)+6*x(2;5) ... +3*x(3;1)+4*x(3;2)+5*x(3;3)+5*x(3;4)+9*x(3;5) } x(1;1)+x(1;2)+x(1;3)+x(1;4)+x(1;5) <= 310 x(2;1)+x(2;2)+x(2;3)+x(2;4)+x(2;5) <= 260 x(3;1)+x(3;2)+x(3;3)+x(3;4)+x(3;5) <= 280 x(1;1)+x(2;1)+x(3;1) >= 180 x(1;2)+x(2;2)+x(3;2) >= 80 x(1;3)+x(2;3)+x(3;3) >= 200 x(1;4)+x(2;4)+x(3;4) >= 160 x(1;5)+x(2;5)+x(3;5) >= 220 x(i;j)>=0 Решим ее численно с помощью доступной в Octave функции sqp. Для этого зададим целевую функцию phi octave:1> function obj = phi (x) xxx = rand (3, 5); xxx(1,1)=x(1); xxx(1,2)=x(2);xxx(1,3)=x(3); xxx(1,4)=x(4); xxx(1,5)=x(5); xxx(2,1)=x(6); xxx(2,2)=x(7);xxx(2,3)=x(8); xxx(2,4)=x(9); xxx(2,5)=x(10); xxx(3,1)=x(11); xxx(3,2)=x(12); xxx(3,3)=x(13); xxx(3,4)=x(14); xxx(3,5)=x(15); y1=10*xxx(1,1)+8*xxx(1,2)+6*xxx(1,3)+5*xxx(1,4)+4*xxx(1,5); y2=6*xxx(2,1)+5*xxx(2,2)+4*xxx(2,3)+3*xxx(2,4)+6*xxx(2,5); y3=3*xxx(3,1)+4*xxx(3,2)+5*xxx(3,3)+5*xxx(3,4)+9*xxx(3,5); obj=y1+y2+y3 endfunction Зададим вектор-функцию ограничений h function r = h (x) xx = rand (3, 5); xx(1,1)=x(1); xx(1,2)=x(2);xx(1,3)=x(3); xx(1,4)=x(4); xx(1,5)=x(5); xx(2,1)=x(6); xx(2,2)=x(7);xx(2,3)=x(8); xx(2,4)=x(9); xx(2,5)=x(10); xx(3,1)=x(11); xx(3,2)=x(12);xx(3,3)=x(13); xx(3,4)=x(14); xx(3,5)=x(15); r = [x(1); x(2); x(3);x(4);x(5);x(6); x(7);x(8);x(9);x(10); x(11);x(12); x(13); x(14); x(15); 310 - xx(1,1)-xx(1,2)-xx(1,3)-xx(1,4)-xx(1,5); 260 - xx(2,1)-xx(2,2)-xx(2,3)-xx(2,4)-xx(2,5); 280 - xx(3,1)-xx(3,2)-xx(3,3)-xx(3,4)-xx(3,5); - 180 + xx(1,1)+xx(2,1)+xx(3,1) ; - 80 + xx(1,2)+xx(2,2)+xx(3,2) ; - 200 + xx(1,3)+xx(2,3)+xx(3,3) ; Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 12. 12 xx(1,4)+xx(2,4)+xx(3,4) - 160; xx(1,5)+xx(2,5)+xx(3,5) - 220] endfunction Зададим начальное приближение x0 octave:3> x0 = [9;9;9;9;9;9;9;9;9;9;9;9;9;9;9]; Теперь запустим функцию sqp командой octave:4> [x, obj, info, iter, nf, lambda] = sqp (x0, @phi, [], @h) В качестве результата получаем точку минимума x = 0.00000 0.00000 45.00000 35.00000 220.00000 0.00000 0.00000 135.00000 125.00000 0.00000 180.00000 80.00000 20.00000 0.00000 0.00000 и значение целевой функции в точке минимума obj = 3200 Эта точка минимума не единственная, в чем можно убедиться с помощью вышеупомянутого файла SOLVSAMP.xls, подставляя найденные в Octave значения в SOLVSAMP.xls и сравнивая значения целевой функции для точек, найденнвх численно в Octave и в MS Excel – в SOLVSAMP.xls. ФИНАНСОВЫЕ ФУНКЦИИ Дадим описание некоторых финансовых функций Octave. Функция: fv (r, n, p, l, method) Возвращает будущее значение в конце промежутка времени из n перио- дов для потока платежей, состоящего из n платежей при ставке r для каждого периода. Необязательный аргумент l может использоваться для задания до- полнительной начальной суммы платежа. Необязательный аргумент method Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 13. 13 может быть использован для указания того, что платежи производятся в конце ( "e" , по умолчанию), или же в начале ("b") каждого периода. Заметим, что ставку r следует задавать как дробь (т. е., 0.05, а не 5 %). Функция: fvl (r, n, l) Возвращает будущее значение в конце промежутка времени из n пе- риодов для начальной инвестиции l при ставке r для каждого периода. Ставку r следует задавать как дробь (т. е., 0.05, а не 5 %). Функция: irr (p, i) Возвращает внутреннюю доходность потока платежей p, порожденного начальной инвестицией i ( другими словами,. решение относительно r урав- нения npv (r, p, i) = 0; сравните с описанием функции npv). Функция nper (r, p, a, l, method) Возвращает количество регулярных платежей величины p, необходимых для выплаты займа величины a при процентной ставке r. Необязательный ар- гумент l может использоваться для задания дополнительной суммы платежа в конце последнего периода платежа. Необязательный аргумент method может быть использован для указания того, что регулярные платежи производятся в конце ( "e" , по умолчанию), или же в начале ("b" ) каждого периода. Заме- тим, что ставку r следует задавать как дробь (т. е., 0.05, а не 5 %). Функция npv (r, p, i) Возвращает чистое приведённое (текущее) значение потока нерегуляр- ных (т.е. не обязательно равных) платежей, осуществляемых в концах n по- следовательных промежутков времени (периодов). Аргумент r задаёт одно- периодные процентные ставки и может быть как скаляром (в случае постоян- ной процентной ставки), так и вектором той же длины, что и p. Необязательный аргумент i может использоваться для задания началь- ной суммы платежа. Заметим, что ставку r следует задавать как дробь (т. е., 0.05, а не 5 %). Функция pmt (r, n, a, l, method) Возвращает размер периодического платежа, необходимый для выпла- ты займа величины a за n периодов при однопериодной процентной ставке r Необязательный аргумент l может использоваться для задания дополнитель- ной конечной суммы платежа. Необязательный аргумент method может быть использован для указания того, что платежи производятся в конце ("e" , по умолчанию), или же в начале ( "b" ) каждого периода. Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 14. 14 Заметим, что ставку r следует задавать как дробь (т. е., 0.05, а не 5 %). Функция pvl (r, n, p) Возвращает текущее (настоящее) значение вклада, по которому по завер- шении n периодов при однопериодной процентной ставке r будет выплачена ве- личина p. Заметим, что ставку r следует задавать как дробь (т. е., 0.05, а не 5 %). Функция rate (n, p, v, l, method) Возвращает ставку доходности по вкладу с настоящим (текущим) зна- чением v, порождающему выплаты величины p за n последовательных пе- риодов. Необязательный аргумент l может использоваться для задания допол- нительной конечной суммы платежа. Необязательный аргумент method мо- жет быть использован для указания того, что платежи производятся в конце ("e" , по умолчанию), или же в начале ( "b" ) каждого периода. Рассмотрим следующие задачи. 1. Определить, какой вклад следует положить на депозит, чтобы через 3 года на счете оказалась сумма 44 000 при номинальной ставке 16.5 % годо- вых и начислении процентов 2 раза в год. Решение: octave.exe:1> l=44000 l = 44000 octave.exe:2> n=3*2 n = 6 octave.exe:3> r=0.165/2 r = 0.082500 octave.exe:4> p=0 p = 0 octave.exe:5> pv (r, n, p, l, "e") ans = 2.7345e+004 octave.exe:6> format long e octave.exe:7> pv (r, n, p, l, "e") ans = 2.73454608150543e+004 2. Ссуда размером a погашается платежами размера p при номинальной ставке i в течение n лет m раз в год. Определите n по известным a=5000, p=141.7, r=16 %, m=12. Решение: octave.exe:1> a=5000, p=141.7, r=0.16/12 a = 5000 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 15. 15 p = 141.70 r = 0.013333 octave.exe:2> nper (r, p, a) ans = 48.001 octave.exe:3> 48/12 ans = 4 3. Рассчитайте годовую процентную ставку i по вкладу размером 100 000, если за 13 лет сумма возросла до 1 000 000 при начислении процен- тов 4 раза в год. Решение: octave.exe:1> n=13*4, p=0, v= 100 000, l=1 000 000 n = 52 p = 0 v = 100 000 l = 1 000 000 octave.exe:2> rate (n, p, v, l)*4 ans = 0.18110 4. Рассчитайте внутреннюю доходность потока платежей 15 000, 16 000, 17 000, порожденного начальной инвестицией 20000. Решение: octave.exe:1> i=20000, p=[15000,16000,17000] i = 20000 p = 5000 16000 17000 octave.exe:2> irr (p, i) ans = 0.58964 Литература 1. GNU Octave. Documentation. (http://www.octave.org,http:// www.gnu.org/ software/octave/). Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
  • 16. Учебное издание КРАТКОЕ ВВЕДЕНИЕ В СИСТЕМУ OCTAVE Учебно-методическое пособие для вузов Составитель Израилевич Яков Аронович Редактор И.Г. Валынкина Подписано в печать 20.07.09. Формат 60×84/16. Усл. печ. л. 0,9. Тираж 25 экз. Заказ 1161. Издательско-полиграфический центр Воронежского государственного университета. 394000, г. Воронеж, пл. им. Ленина, 10. Тел. 208-298, 598-026 (факс) http://www.ppc.vsu.ru; e-mail: pp_center@ppc.vsu.ru Отпечатано в типографии Издательско-полиграфического центра Воронежского государственного университета. 394000, г. Воронеж, ул. Пушкинская, 3. Тел. 204-133 16 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»