GNU Octave
Реализация языка программирования MATLABGNU Octave (назван в честь бывшего преподавателя главного разработчика) — система для математических вычислений, использующая язык высокого уровня, совместимый с MATLAB.
Проект GNU Octave был начат в 1988 году; изначально он предназначался для курса по дизайну химических реакторов. В 1992 году началась его разработка как отдельного программного продукта.
GNU Octave написан на C++ с использованием STL. Скрипты на этом языке интерпретируются. Система распространяется под лицензией GNU GPL.
Синтакс Octave по большей части повторяет синтакс MATLAB, но добавляет ряд новых возможностей:
- строки можно заключать как в одинарные, так и в двойные кавычки (MATLAB — только одинарные).
-
к комментариям
%
и%{ ... %}
в стиле MATLAB добавляются комментарии#
и#{ ... #}
. -
C-подобные операторы
+= -= *= /= \= ^= .*= ./= .\= .^= ! != ++ --
. - функции можно определять в скриптах и в самом интерпретаторе (в MATLAB — только в специальных .m файлах).
-
оператор конца блока может зависеть от того, какого типа этот блок: вместо одного
end
в MATLAB в Octave рекомендуется использоватьendif
,endfor
,endwhile
и т.д. - Octave менее строг к правилам разбиения длинных команд на несколько строк: явно указывать разбиение необходимо только в том случае, когда трактовка строк неоднозначна.
-
в Octave к механизму
try-catch
добавляется механизмunwind_protect
, вдохновленный Lisp. Это позволяет создавать конструкцииtry-catch-finally
для обработки ошибок. -
Octave позволяет индексирование временных переменных. Например,
x = 1:10; y = sin(x)(1:3)
— валидная конструкция в Octave, когда как MATLAB требовал бы отдельной промежуточной переменной для храненияsin(x)
.
Ссылки:
Примеры:
Hello, World!:
Пример для версий GNU Octave 3.2.3Первая функция аналогична printf
в C. Вторая — специфична для MATLAB.
printf("Hello, World!\n");
disp("Hello, World!");
Факториал:
Пример для версий GNU Octave 3.2.3Используется встроенная функция factorial
. Отметим, что на числах такого масштаба результат получается точный, но в общем случае Octave не предназначен для вычислений произвольной точности, и большие значения факториала будут вычисляться с ошибками.
for i = 0 : 16
printf("%d! = %d\n", i, factorial(i));
endfor
Факториал:
Пример для версий GNU Octave 3.2.3Используется рекурсивное вычисление факториала. Точка с запятой в конце строки подавляет автоматический вывод только что вычисленного значения (в данном случае fact
) в интерактивном режиме, чтобы не засорять отформатированный вывод.
fact = 1;
for i = 0 : 16
printf("%d! = %d\n", i, fact);
fact *= i+1;
endfor
Факториал:
Пример для версий GNU Octave 3.2.3Используется рекурсивное вычисление факториала.
function f = fact(n)
if (n <= 1)
f = 1;
else
f = n * fact(n - 1);
endif
endfunction
for i = 0 : 16
printf("%d! = %d\n", i, fact(i));
endfor
Числа Фибоначчи:
Пример для версий GNU Octave 3.2.3Используется рекурсивное определение чисел Фибоначчи.
function f = fib(n)
if (n <= 1)
f = n;
else
f = fib(n - 1) + fib(n - 2);
endif
endfunction
for i = 1 : 16
printf("%d, ", fib(i));
endfor
disp("...");
Квадратное уравнение:
Пример для версий GNU Octave 3.2.3За счет того, что Octave предназначен для работы с математическими задачами, в нем есть ряд встроенных численных методов решения стандартных задач, в том числе и нахождения корней полиномов. Чтобы найти корень полинома, достаточно вызвать функцию roots
для вектора-строки, составленного из коэффициентов полинома в порядке убывания степени (т.е. коэффициент при максимальной степени x идет первым).
roots([2 -3 1])
Комментарии
]]>blog comments powered by Disqus
]]>