Синтаксис языка GNU Octave

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Автор: Владимир Кореньков
Правильная ссылка: 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) # расчет делительного диаметра
d = Gear.m * Gear.z;
endfunction

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 (аналогично для вычитания: -=, умножения: *= и деления: /=)

[править] Служебные символы

# - комментарий в программе
. - разделитель целой и дробной части числа; разделитель различных выражений (например, см. структуры данных)
, - в скриптах - разделитель нескольких операторов в строке; в описании функции - разделитель переменных; в массивах - разделитель строк
 ; - в скриптах - блокирование вывода на экран результата; в массивах - разделитель столбцов
... - неразрывный перенос строки - при вводе элементов массивов, если недостаточно места в текущей


Octave GNU Octave

Инсталляция | Синтаксис языка | Командная строка
Скрипты | Функции | Регулярные выражения | Массивы | Графики | Ввод/вывод данных
Распределенные вычисления | Численные методы | Сплайны