Синтаксис языка GNU Octave
Материал из Xgu.ru
Автор: Владимир Кореньков
Правильная ссылка: http://xgu.ru/wiki/octave/variables
Содержание |
[править] Константы
Как таковых констант, в привычном понимании (переменных, не изменяющих своего значения), Octave не имеет. Есть лишь несколько зарезервированных слов, используемых в типовых расчетах:
| ans | - содержит результат вычислений |
| pi | - число 3.1415... |
| I или J | - мнимая единица |
| Inf | - используется для проверки деления на ноль |
| eps | - погрешность операций над числами с плавающей точкой |
| realmin | - минимально допустимое число, которое может быть использовано в расчетах |
| realmax | - максимально допустимое число, которое может быть использовано в расчетах |
[править] Переменные
Синтаксис:
<имя переменной> = <значение>
Поскольку GNU Octave считается языком высокого уровня, к определению переменных выставляются определенные требования:
- название переменной может содержать буквы, цифры и символы подчеркивания "_", но не должно начинаться с цифры;
- язык GNU Octave чувствителен к регистру, т.е. А и а - это разные переменные;
- создавать переменные можно в любом месте программы (они не описываются и не объявляются);
- переменные не имеют "постоянства" типа данных, т.е., сначала можно присвоить а=10, а потом а="Hello!";
Как и в обычных языках программирования, переменные Octave подразделяются на глобальные (определенные в файлах-сценариях) и локальные (определенные в файлах-функциях). Рассмотрим следующий пример. Пусть результаты расчетов (в данном случае, присваивание значений переменным а и b) "главной" программы Script1 передаются в подпрограмму Script2, а та, в свою очередь, выполняет над ними какие-то действия и вызывает функцю function MyFunction().
Пример 1.
#Файл Script1.m
a = 1;
b = 3;
Script2;
#Файл Script2.m
a = 2;
b = 2;
MyFunction();
#Файл MyFunction.m
function MyFunction()
a = 3;
b = 3;
endfunction
В результате вызова трех m-файлов, значения переменных останутся а=2 и b=2. Дело в том, что переменные объявленные в функции считаются локальными, т.е. они создаются при обращении к MyFunction и удаляются из памяти при выходе из нее. Переменные же созданные в скриптах "живут" до тех пор, пока не будет выполнен весь набор команд (неважно, размещены ли эти команды в одном или разных файлах). И более того, значения глобальных переменных сохраняются на протяжении всего сеанса работы с Octave, т.е. они доступны даже в абсолютно разных программах, запускаемых последовательно не выходя из системы. Таким образом, в приведенном выше примере по сути созданы две разных пары переменных с одинаковыми именами -- одна пара а и b существует вне определения функций, вторая ее копия -- сугубо в пределах function .. endfunction.
[править] Global декларация переменных
Как было указано выше, пространства переменных скриптов и функций не пересекаются между собой. Однако существует возможность из функции обратиться к глобальной переменной для использования ее значения (как чтения, так и изменения). Реализуется такая возможность посредством ключевого слова global.
Пример 2.
# Файл Script.m
# объявляем глобальную переменную (данное объявление должно быть выполнено до вызова соответствующей функции)
global N;
# выполняем какие-то действия (вычисления, присваивания и т.п.)
N = 2;
- # функция может быть описана и в отдельном файле
- function y = f()
- # указываем, что использоваться будет глобальная переменная N, а не создаваться локальная "копия-однофамилец"
- global N;
- # изменяем ее значение
- N = 3;
- # используем значения N для расчетов
- y = N^3;
- endfunction
# вызываем функцию: ans = 27
f() # проверяем значение: N = 3 N
[править] Persistent декларация переменных
[править] Структуры данных
Достаточно часто приходится иметь дело с данными, которые сгруппированы по некоторому логическому условию, но имеют в общем случае различные типы. С одной стороны их можно рассматривать как единую структуру, а с другой -- как набор отдельных элементов. Подобные конструкции в языках программирования называют "записями". В Octave их именуют структурами данных.
Синатаксис:
<имя переменной 1>.<имя переменной 2>[.<имя переменной 3>[.<имя переменной 4>[. ...<имя переменной N>]]]
Пример 3. Определение межосевого расстояния зубчатой передачи
Gear1.m = 1.5; # модуль зубчатого колеса №1
Gear1.z = 20; # число зубьев зубчатого колеса №1
Gear2.m = 1.5; # модуль зубчатого колеса №2
Gear2.z = 50; # число зубьев зубчатого колеса №2
function d = Diam(Gear) # расчет делительного диаметра
endfunction
- d = Gear.m * Gear.z;
a = (Diam(Gear1) + Diam(Gear2))/2 # межосевое расстояние: ans = 52.5
Структуры данных можно создавать с помощью встроенной функции struct, имеющей синтаксис struct(<"поле 1">, <значение1>, <"поле 2">, <значение 2> ...):
> Point = struct ("X", 1, "Y", 15, "Z", 7) # имя поля (т.е. имя переменной) должно быть в кавычках
Point =
{
X = 1
Y = 15
Z = 7
}
В Octave также предусмотрены ряд функций getfield, rmfield, isfield, isstruct, fieldnames, struct, cellstr, iscellstr,setfield, subsref,subsasgn (см. help).
[править] Формат вывода значений
Очевидно, что в разных случаях необходимо выводить результаты вычислений с различной точностью. Для этих целей служит команда format.
Синтаксис:
format <опция>
где <опция> может принимать одно из значений:
| bank | - 2 знака после запятой |
| short | - 5 знаков после запятой (используется по умолчанию) |
| short e или E | - то же, но в инженерном формате с соответствующей буквой |
| short g или G | - автоматический выбор между short и short е/Е |
| long | - 15 знаков после запятой |
| long e или E | - то же, но в инженерном формате с соответствующей буквой |
| long g или G | - автоматический выбор между long и long е/Е |
| bit | - представление числа в двоичной системе исчисления (в 32- или 64-битном представлении, смотря какая машина) |
| hex | - представление числа в шестнадцатеричной системе исчисления (в 32- или 64-битном представлении, смотря какая машина) |
| free | - свободный формат |
Пример использования:
> format bank # устанавливаем формат > 1/3 # для примера, получаем какое-либо дробное число ans = 0.33 > > format short e # устанавливаем новый формат > 1/3 ans = 3.3333e-001
[править] Операторы
[править] Логические
| < | - меньше |
| > | - больше |
| <= | - меньше или равно |
| >= | - больше или равно |
| == | - равно |
| != или ~= | - не равно |
| & | - логическое И (для проверки условия в операторах if, while и т.п., используется форма записи &&) |
| | | - логическое ИЛИ (для проверки условия в операторах if, while и т.п., используется форма записи два символа) |
| ! или ~ | - логическое НЕ |
[править] Арифметические
| Операторы для работы с переменными | ||
|---|---|---|
| + | - сложение | |
| - | - вычитание | |
| * | - умножение | |
| / | - деление | |
| \ | - обратное деление | |
| ^ или ** | - возведение в степень | |
| ++ | - инкремент переменной (эквивалент a=a + 1) | |
| -- | - декремент переменной (эквивалент a=a - 1) | |
| Операторы для работы с массивами | ||
| .+ | - поэлементное сложение | |
| .- | - поэлементное вычитание | |
| .* | - поэлементное умножение | |
| ./ | - поэлементное деление | |
| .\ | - поэлементное обратное деление | |
| .^ или .** | - поэлементное возведение в степень | |
Для конструкций вида a=a + b можно использовать сокращенную форму записи: a+=b (аналогично для вычитания: -=, умножения: *= и деления: /=)
[править] Служебные символы
| # | - комментарий в программе |
| . | - разделитель целой и дробной части числа; разделитель различных выражений (например, см. структуры данных) |
| , | - в скриптах - разделитель нескольких операторов в строке; в описании функции - разделитель переменных; в массивах - разделитель строк |
| ; | - в скриптах - блокирование вывода на экран результата; в массивах - разделитель столбцов |
| ... | - неразрывный перенос строки - при вводе элементов массивов, если недостаточно места в текущей |
| | GNU Octave Инсталляция |
Синтаксис языка |
Командная строка
|
|---|