Синтаксис языка 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 Инсталляция |
Синтаксис языка |
Командная строка
|
---|