Оператор присваивания в цикле for использует синтаксис индексации массивов ячеек. Вот пример применения функции testvar2:
a = {1 2; 3 4 ; 5 6 ; 7 8; 9 0}; [p1, p2, p3, p4, p5] = testvar2 (a);
Место функций varargin и varargout в списке аргументов
Функции varargin или varargout должны быть последними в списке аргументов, при этом они могут быть расположены после любого числа входных или выходных переменных. Это значит, что в строке определения функции следует сперва указать требуемые входные или выходные аргументы. Например, следующие строки определения функций показывают правильное применение varargin и varargout.
function [out1,out2] = example1(a,b,varargin) function [i,j,varargout] = example2(x1,y1,x2,y2,flag)
Каждая исполняемая функция MATLAB-а, определенная некоторым М-файлом, имеет свои собственные локальные переменные расположенные в своем рабочем пространстве, которые отделены от локальных переменных других функций и переменных в основном рабочем пространстве. Однако, если несколько функций и, возможно, основное рабочее пространство, объявляют некоторую конкретную переменнуюглобальной, то все эти функции и основное рабочее пространство будут иметь доступ к данной переменной. Любое изменение глобальной переменной, произведенное в пространстве какой-либо одной функции, немедленно воспринимается всеми остальными функциями, где эта переменная объявлена глобальной. Допустим, вы хотите изучить эффект изменения коэффициентов взаимосвязей a и b, в дифференциальном уравнении Лотки-Вольтера(Lotka-Volterra), известного как модель хищника-жертвы.
dy1/dt = y1 - ay1y2 dy2/dt = y2 - by1y2
Создадим М-файл lotka.m.
function yp = lotka(t,y) global ALPHA BETA
yp = [y(1) – ALPHA*y(1)*y(2); –y(2) + BETA*y(1)*y(2)];
Затем введем последовательно в командное окно следующие выражения
global ALPHA BETA ALPHA = 0.01
[t,y] = ode23('lotka',0,10,[1; 1]); plot(t,y)
Объявление переменных ALPHA и BETA глобальными в командной строке позволяет менять соответствующие значения внутри функции заданной файломlotka.m. Интерактивное изменение данных переменных в командном окне приводит к получению новых решений без каких-либо редактирований текста файла.
106
Для работы в ваших приложениях с глобальными переменными следует:
qОбъявить соответствующую переменную глобальной в каждой функции, где предусмотрено ее использование. Для обеспечения доступа к глобальной переменной из командного окна нужно объявить данную переменную глобальной также и в командной строке.
qВ каждой функции объявите переменную глобальной до первого появления ее
имени в тексте файла. Обычно рекомендуется объявлять переменные глобальными в начале М-файла.
Глобальные переменные в MATLAB-е обычно имеет более длинные имена и иногда записываются заглавными буквами.Это не является настоятельным требованием, но упрощает чтение файлов и уменьшает риск случайного изменения глобальной переменной.
Перманентные переменные (Persistent Variables)
Переменная может быть объявленаперманентной (постоянной) – при этом она не меняет своего значения между ее последовательными вызовами. Перманентные переменные могут быть использованы только в пределах определенной функции. Эти переменные остаются в памяти до удаления М-файла из памяти или его изменения. Во многих отношениях перманентные переменные аналогичны глобальным, за тем исключением, что их имя не находится в глобальном рабочем пространстве, а их значение сбрасывается при изменении М-файла или удаления из памяти.
Для работы с перманентными переменными в MATLAB-е предусмотрены три функции:
Функция |
Описание |
|
mlock |
Исключает возможность удаления |
|
|
М-файла из памяти |
|
munlock |
Возвращает М-файлу возможность |
|
|
его удаления из памяти |
|
mislocked |
Указывает, может ли М-файл быть |
|
|
удален из памяти |
|
Специальные переменные
Несколько функций возвращают важные специальные значения, которые вы можете использовать в ваших М-файлах.
Функция |
Возвращаемое значение |
|
ans |
Последний ответ (переменная). Если вы не присваиваете |
|
|
выходной переменной или вычисляемому выражению какое- |
|
|
либо имя, MATLAB автоматически запоминает результат в |
|
|
переменной ans. |
|
eps |
Относительная точность вычислений с плавающей запятой. |
|
|
Это допуск, который MATLAB использует при вычислениях. |
|
realmax |
Наибольшее число с плавающей запятой. |
|
realmin |
Наименьшее число с плавающей запятой. |
|
pi |
3.1415926535897... |
|
i, j |
Мнимая единица. |
|
inf |
Бесконечность. Вычисления вида n/0 где n – любое ненулевое |
|
|
реально число, дает в результате inf. |
|
NaN |
Не численное значение (Not-a-Number). Выражения вида 0/0 и |
|
|
inf/inf дают в результате NaN, так же как и арифметические |
|
|
операции содержащие NaN. Выражения типа n/0, где n явля- |
|
107
|
ется комплексным числом, также возвращают NaN. |
|
|
computer |
Тип компьютера. |
version |
Строка, содержащая версию MATLAB-а. |
Вот несколько примеров, где используются эти переменные.
x = 2*pi;
A = [3 + 2i 7 – 8i]; tol = 3*eps;
Типы данных
Всего в MATLAB –е имеется 14 базовых типов (или классов) даных. Каждый из этих типов данных является формой массива. Этот массив может иметь минимальный размер 0х0 и может иметь произвольную размерность по любой координате. Двумерные варианты таких массивов называются матрицами.Все 14 базовых класса типов данных показаны на приведенной ниже диаграмме. Дополнительно, тип данных, определенных пользователем, показанный ниже какuser class (класс пользователя), является подмножеством данных типа
структуры.
Тип данных char содержит символы данные в кодеUnicode. Строка символов является просто массивом символов размера 1хn. array of characters. Вы можете использовать тип данных char для хранения массивов строк, при условии, что все строки массива имеют одинаковую длину (это является следствием того, что все массивы MATLAB-а должны быть прямоугольными). Для хранения массива строк разной длины нужно использовать массив ячеек.
Числовые типы данных включают целые числа со знаком и без знака, числа в формате плавающей запятой одинарной и двойной точности, разреженные массивы(sparse arrays) двойной точности.
Сказанное ниже сохраняется в силе для всех типов числовых данных в MATLAB-е:
qВсе вычисления в MATLAB-е выполняются с двойной точностью.
qЦелые числа и числа одинарной точности обеспечивают более эффективное использование памяти по сравнению с числами двойной точности.
108
qВсе типы данных поддерживают базовые операции над массивами, такие как использование индексов и измерение размеров массива.
qДля выполнения математических операций над целыми числами или массивами с одинарной точностью представления, вы должны первратить их в массивы с двойной точностью при помощи функции double.
Операторы системы MATLAB делятся на три категории:
qАрифметические опреаторы, осуществляющие численные вычисления.
qОперации отношения, которые осуществляют численное сравнение операндов.
qЛогические операторы, включающие AND (логическое И), OR (логическое ИЛИ), и NOT (логическое отрицание НЕ).
Арифметческие операторы
MATLAB обеспечивает следующие арифметические операторы
Операторы |
Описание |
+ |
Сложение |
- |
Вычитание |
.* |
Умножение |
./ |
Правое деление |
.\ |
Левое деление |
+ |
Унарный плюс (изменение знака объекта) |
- |
Унарный минус |
: |
Оператор двоеточия |
.^ |
Степень |
.’ |
Транспонирование |
‘ |
Комплексно-сопряженное транспонирование |
* |
Матричное умнжение |
/ |
Матричное правое деление |
\ |
Матричное левое деление |
^ |
Степень матрицы |
Арифметические операторы и массивы
За исключением некоторых матричных операторов, арифметические операторы MATLAB-а работают с соответствующими элементами массивов одинаковой размерности. Для векторов и прямоугольных массивов, оба операнда должны иметь одинаковый размер, или же один из них должен быть скаляром. Если один операнд является скаляром, а второй - нет, MATLAB применяет данный скаляр ковсем элементам второго операнда; данное свойство известно как скалярное расширение (scalar expansion).
Следующий пример иллюстрирует свойство скалярного расширения при вычислении произведения скалярного опренда и матрицы
A = magic(3)
A = |
|
|
8 |
1 |
6 |
3 |
5 |
7 |
4 |
9 |
2 |
Введем
3 * A
что дает
109
ans =
24 |
3 |
18 |
9 |
15 |
21 |
12 |
27 |
6 |
Операторы отношения
MATLAB обеспечивает следующие операторы отношения
Операторы |
Описание |
< |
Меньше чем |
<= |
Меньше чем или равно |
> |
Больше чем |
>= |
Больше чем или равно |
== |
Равно |
~= |
Не равно |
Операторы отношения и массивы
Операторы отношения в MATLAB-е сравнивают соответствующие элементы двух массивов с одинаковыми размерностями. Эти операторы всегда действуют поэлементно. В приведенном ниже примере, результирующая матрица показывает, где элемент матрицы A равен соответствующему элементу матрицы B.
A = [2 |
7 6; 9 0 |
5; 3 |
0.5 |
6]; |
B = [8 |
7 0; 3 2 |
5; 4 |
–1 |
7]; |
A == B ans =
0 1 0
0 0 1
0 0 0
Для векторов и прямоугольных массивов, оба операнда должны иметь одинаковый размер или один из них должен быть скаляром. В случае когда один операнд является скаляром, а второй – нет , MATLAB проверяет данный скаляр с каждым элементом другого операнда. Те положение, где заданное отношение является истинным, принимают значение 1. Положение, где отношение является ложным, принимают значение 0.
Операторы отношения и пустые массивы
Операторы отношения работают и с массивами, у которых какая-либо размерность равна нулю (что приводит к пустому массиву), если оба массива имеют одинаковый размер или же один из них является скаляром. Однако, выражения вида
A == [ ]
приводят к ошибке, если только массив А не имеет размеры 0х0 или 1х1. Для проверки является ли данный массив пустым, следует использовать специальную функцию isempty(A).
110