Переменные в среде MATLAB. Элементы М-языка MATLAB. Программы MATLAB
К текущему моменту мы познакомились с четырьмя различными типами данных
программы MATLAB: числами с плавающей точкой, строками, символьными
выражениями и функциями.
При длительной сессии программы MATLAB может быть нелегко запомнить имена и типы всех переменных, которые вы задали.
Вы можете ввести команду whos
, чтобы просмотреть общий список имен и
типов, или классов, ваших заданных на текущий момент переменных. Но перед тем
как сделать это, произведите присвоения а = pi, b = "pi ", с = ("pi"), а затем
введите whos
. Ниже показан вывод результатов сессии программы MATLAB,
отображенной в этой главе.
Переменным A, X, Y, Z, а и d были присвоены числовые значения и они
обозначены как «двойной массив». Это означает, что они являются массивами чисел с
двойной точностью; в данном случае массивы a и d имеют размер 1х1, то есть,
являются скалярами. Столбец Bytes (Байты) показывает, сколько компьютерной
памяти занимает каждая переменная. Переменная ans также является числовой,
поскольку последний вывод был вектором 1Х2. Переменная b является строкой,
обозначенной как char array (Символьный массив), так как переменные с, u, v, w,
х, у являются символьными. Наконец, мы видим также два массива обработки
функции и два массива встроенных объектов, соответствующие парам
анонимных функций и встроенных функций.
Команда whos показывает сведения обо всех заданных переменных, но эта
команда не показывает значения переменных. Чтобы увидеть значение переменной,
достаточно просто ввести название переменной и нажать клавишу Fnterl.
При вводе командам программы MATLAB требуются определенные классы
данных, и очень важно знать, какой именно класс данных требуется данной команде;
справочный текст по команде обычно содержит класс или классы, которые
требуются при вводе. Неверный класс ввода обычно приводит к появлению
сообщения об ошибке или к неожиданному результату. Например, введите команду sin("pi "), чтобы увидеть, к какому результату может привести добавление строки в
функцию, которая не приемлет строк.
Чтобы очистить все заданные Matlab переменные, введите clear или clear all.
Вы можете также ввести, например, clear x у, чтобы очистить только
переменные х и у.
Puc. 2.2. Рабочий стол с окном Workspace (Рабочее пространство)
Обычно следует очищать переменные перед началом новых вычислений.
В противном случае значения из предыдущих вычислений могут случайно
попасть в новые. Окно Workspace (Рабочее пространство) предоставляет
графическую альтернативу команде whos. Вы можете активировать это окно, щелкнув
мышью на вкладке Workspace (Рабочее пространство) в окне Current Directory (Текущий каталог), или введя команду workspace в командной строке. На Рис. 2.2 показан
Рабочий стол, в котором окна Command Window (Командное окно) и Workspace
(Рабочее пространство) содержат ту же самую информацию, которая отображена
выше.
Поэтому из выше всего сказанного можно сделать вывод, что вам необходимо просмотреть много дополнительной информации и альтернатив!
5. Видимость имён переменных и имён функций.
Локальные и глобальные переменные. Функция располагает собственным, изолированным от рабочего пространства системы MATLAB, пространством переменных. Поэтому, если перед вызовом M-функции в командном окне MATLABа была определена переменная с именем, например, varName1, то нельзя рассчитывать на то, что переменная в теле функции с этим же именем уже имеет некоторое значение. Это совсем другая переменная (хотя у неё и то же самое имя varName1) и располагается она в памяти машины в другой области памяти.
Переменные, которые используются в теле M-функции и не совпадают с именами формальных параметров этой функции, называются локальными. По-другому говорят, что они видимы лишь в пределах M-функции. Извне они не видны (не достижимы). Внутри функции не видны переменные, определённые в командном окне MATLABа - они являются внешними по отношению к функции и не видны в ней.
Аналогично, локальные внутри некоторой функции переменные не видны внутри другой M-функции.
Одним из каналов передачи информации из командного окна системы MATLAB в M-функцию и из одной функции в другую является механизм параметров функции. Другим таким механизмом являются глобальные переменные.
Чтобы рабочая область системы MATLAB и несколько M-функций могли совместно использовать переменную с некоторым именем, её всюду нужно объявить как глобальную с помощью ключевого слова global. К примеру, переменная glVarS, участвующая в вычислениях в рабочем пространстве и в функции FuncWithGlobVar является одной и той же переменной (единственный участок памяти) повсюду - поэтому её можно использовать в функции без дополнительного присваивания её какого-либо значения:
Так как у глобальных переменных "глобальная" область действия, то чтобы случайно (по ошибке) не переопределить её где-либо, желательно давать таким переменным более мнемонические (более длинные и осмысленные) имена.
Теперь рассмотрим вопрос о видимости имён функций. Если мы сохранили функцию с некоторым именем в файле с этим же именем и расширением m, и кроме того если системе MATLAB известен путь к этому файлу на диске, то эту функцию можно вызывать как из командного окна, так и из других функций.
Однако в тексте M-функции можно поместить опеределения нескольких функций, причём только одна из них может совпадать по имени с именем файла. Именно эта функция и будет видна из командного окна и других функций. Все остальные функции будут внутренними - их могут вызывать только функции из того же файла.
Например, если в файле ManyFunc.m будет содержаться следующий текст
function ret1 = ManyFunc(x1, x2)
ret1 = x1 .* x2 + AnotherFunc(x1)
function ret2 = AnotherFunc(y)
ret2 = y .* y + 2 * y + 3;
состоящий из определений двух функций с именами ManyFunc и AnotherFunc, то извне можно вызывать только функцию ManyFunc. По-другому можно сказать, что извне видны только функции с именами, совпадающими с именами M-файлов. Остальные функции должны вызываться этой функцией и другими внутренними функциями.
1. ЭЛЕМЕНТЫ М-ЯЗЫКА MATLAB
Элементами в М-языке, применяемом для управления вычислительным процессом в MATLAB, служат константы, переменные, функции, команды и управляющие конструкции. Эти элементы, возможно, в различных соединениях с помощью специальных соединительных элементов, используются как в командной строке, так и в программах.
1.1. КОНСТАНТЫ В MATLAB
Константа в MATLAB представляет собой информацию, не изменяющуюся в течение всего сеанса связи. Константы бывают пользовательскими (определяемыми пользователем) и системными (определяемыми системой). Пользовательские константы задаются пользователем и используются однократно – в момент их упоминания в исполняемой командной строке. Например, 16, -38.654, -1.е-23, 1+2i, "This is a symbol constant".
Системные константы постоянно определены в системе и имеют специальные обозначения, по которым на них ссылаются, например, pi (=3.1416), eps (=2.2204e-016), realmin (=2.2251e-308), realmax (=1.7977e+308), i, j (jºi).
1.2. ПЕРЕМЕННЫЕ В MATLAB
Переменная в MATLAB определяется идентификатором, типом, местом в памяти компьютера. Для определения переменной в MATLAB необходимо выбрать идентификатор (имя) переменной (начинается с латинской буквы, далее – лат.буквы, цифры, спец.знаки) и использовать эту переменную в операторе командной строки, задающем значение переменной (простое присваивание, ссылка на некот.функции и др.).
- Числовые переменные: обычные (вещественные) или комплексные числа, векторы, матрицы и многомерные массивы. Под вещественное число отводится 8 байт, под комплексное – 16. Целые и вещественные числа не различаются.
А) вещественные числа
A=2 A=2.0 B=-143.298 C=1.23e-2
B) комплексные числа
Q=1+3i r=-4.6-7.45i S=2+5j
real(Q) – веществ.часть компл.числа,
imag(Q) – мнимая часть компл.числа,
abs(Q) – абс.величина компл.числа,
conj(Q) – сопряженное компл.число,
angle(Q) – значение фазы (угла) компл.числа в радианах.
C) векторы
векторы-строки
a=1:3:10 b= c=linspace(13,53,5)
векторы-столбцы
aa=a’ bb= cc= linspace(13,53,5)’ dd=(15:45)’
для векторов с комплексными компонентами: если y – компл.вектор, то y.’ – это вектор-столбец с теми же компонентами, а y’ – это вектор-столбец с компонентами – сопряженными компл.числами.
D) матрицы: M(i,j) – элемент i – й строки и j – го столбца; M(k) – k-й элемент матрицы, вытянутой в столбец.
A= ---à 1 2
A(2,2) (=4) A(3) (=2) -à A = (1 3 2 4)
A(3,4)=10 ---à 1 2 0 0
size(A) (=) =size(A) (m=3, n=4)
A=A(:) -à вытянуть в столбец – матрица становится вектором!
reshape(A,3,4) -à превращает вектор снова в матрицу 3х4
A(,:)= -à убирает из матрицы 1-ю и последнюю строки
A(:,)= à убирает все столбцы кроме последнего
Некоторые специальные матрицы:
eye(m,n) - единицы на главной диагонали, остальные – нули (eye(m) – квадратная единичная матрица mxm)
ones(m,n) – матрица из единиц
zeros(m,n) – матрица из нулей
rand(m,n) – матрица mxn заполненная случайными числами от 0 до1
C=round(1+100*rand(10,10)) – матрица 10х10, заполненная целыми случайными числами от 1 до 100.
Простые операции с матрицами:
diag(A) – вектор из элементов, стоящих на главной диагонали матрицы А,
diag(diag(А)) – квадратная диагональная матрица с диаг.элементами, как у А, и нулями.
triu(A) tril(A) – матрица с верхней (upper) или нижней (lower) частями из А, дополненные нулями.
- Символьные переменные
cvb=’Moscow is the Capital of Russia’
Строка символов ограничивается одинарными апострофами (на клавише с русской буквой «э») и выделяется цветом.
Каждый символ занимает 2 байта и рассматривается как отдельный элемент символьного вектора-строки. Так что, если задать операцию транспонирования cvb’ , то получим вектор-столбец с 31 элементом.
Можно переводить символьные переменные в числа и наоборот.
Обычно они используются при выводе результатов, графиков, надписей, сообщений.
Контроль за переменными.
1 способ – в окне Workspace
2 способ – команда who – дает перечень определенных к данному моменту времени переменных.
3 способ - команда whos – дает более полную информацию о переменных (Name Size Bytes Class)
Чистка памяти.
clear – полная очистка от всех переменных (или clear variables)
clear var1,var2,… - очистка отдельных переменных var1,var2,….
1.3. ФУНКЦИИ В MATLAB
Функции в MATLAB – это программы, выполняющие некоторые типовые операции с данными. Для выполнения этих операций и получения требуемых результатов достаточно указать имя функции и, возможно, задать некоторые исходные данные. Таким образом, с понятием функции здесь (как и в любом другом языке) связаны 3 понятия: имя функции, набор входных данных (varargin) и набор выходных данных (varargout). Кроме того, определены понятия числа входных параметров (nargin) и числа выходных параметров (nargout).
Функции в MATLAB подразделяются на пользовательские (определенные, разработанные пользователем) и системные (определенные, заданные в системе, не требующие программирования). О том, как создавать пользовательские функции, будет рассказано при рассмотрении вопросов программирования. После создания и отладки пользовательская функция ничем не отличается от системной.
Системные функции подразделяются на встроенные (built-in) и библиотечные. Библиотечные функции хранятся в системе в виде программ на М-языке, записанных в файлы с именем, совпадающим с именем функции, и с расширением *.m. Тексты этих программ доступны для просмотра пользователями (каталог \toolbox\matlab\ в месте установки MATLAB). Например, можно открыть для просмотра m-файл с функцией расчета значения десятичного логарифма (\toolbox\matlab\elfun\log10.m). При выполнении операторы этих программ сначала переводятся в инструкции исполнительной системы компьютера (интерпретируются), а затем – выполняются. Встроенные функции хранятся в системе в откомпилированном виде, не требуют перевода и, благодаря этому, выполняются быстрее библиотечных. В системном каталоге для таких функций хранятся файлы, названные аналогично библиотечным, но содержащие только комментарии по применению функций. Например, можно открыть файл, относящийся к функции расчета экспоненты (\toolbox\matlab\elfun\exp.m).
1.4. ВЫРАЖЕНИЯ В MATLAB
Выражение – это языковая конструкция, включающая элементы языка (константы, переменные, функции), связанные друг с другом с помощью соединительных знаков, задающих операции, выполняемые при вычислении значения выражения. Различают численные (Nexpression), символьные (Cexpression) и логические (Lexpression) выражения в зависимости от результата, получающегося после выполнения операций, входящих в выражение.
Ode23("lotka2",,);
plot(t,y)
Команда global объявляет переменные ALPHA и BETA гло-
бальными и следовательно, доступными в функции lotka.m. Таким
образом, они могут быть изменены из командной строки, а новые ре-
шения будут получены без редактирования М-файла lotka.m. Для ра-
боты с глобальными переменными необходимо:
объявить переменную как глобальную в каждой М-функции,
которая необходима эта переменная. Для того чтобы пере-
менная рабочей области была глобальной, необходимо объя-
вить ее как глобальную из командной строки;
в каждой функции использовать команду global перед пер-
вым появлением переменной; рекомендуется указывать ко-
манду global в начале M-файла.
Имена глобальных переменных обычно более длинные и бо-
лее содержательные, чем имена локальных переменных, и часто ис-
пользуют заглавные буквы. Это необязательно, но рекомендуется,
чтобы обеспечить удобочитаемость кода языка MATLAB и умень-
шить вероятность случайного переопределения глобальной перемен-
ной.
Специальные переменные. Некоторые М-функции возвра-
щают специальные переменные, которые играют важную роль при
работе в среде системы MATLAB:
Последний результат; если выходная переменная не
ans
указана, то MATLAB использует переменную ans.
Точность вычислений с плавающей точкой; определя-
eps ется длиной мантиссы и для PC eps =
2.220446049250313e-016
Максимальное число с плавающей точкой, представи-
realmax мое в компьютере; для PC realmax =
1.797693134862316e+308.
Минимальное число с плавающей точкой, представи-
realmin мое в компьютере; для PC realmin =
2.225073858507202e-308.
Специальная переменная для числа p:
pi
pi=3.141592653589793e+000.
70
Специальные переменные для обозначения мнимой
i, j
единицы
Специальная переменная для обозначения символа
inf
бесконечности?
Специальная переменная для обозначения неопреде-
NaN ленного значения - результата операций типа: 0/0,
inf/inf.
Специальная переменная для обозначения типа ис-
computer
пользуемого компьютера; для PC - PCWIN.
Специальная переменная для обозначения количества
flops
операций с плавающей точкой.
Специальная переменная для хранения номера исполь-
version
зуемой версии системы MATLAB.
Соответсвущие М-функции, генерирующие эти специальные
переменные, находятся в каталоге elmat и поддержаны online-
подсказкой.
Типы данных
В системе MATLAB определено шесть базовых типов дан-
ных, каждый из которых является многомерным массивом. Шесть
классов - это double, char, sparse, uint8, cell, и struct. Двумерные вер-
сии этих массивов называются матрицами, откуда MATLAB и полу-
чил свое имя МАТричная ЛАБоратория.
Диаграмма принадлежности того или иного объекта системы
MATLAB к одному из классов имеет следующий вид (рисунок 3.1):
Рисунок 3.1
71
Вероятно, что чаще всего вам придется иметь дело только с
двумя из этих типов данных: массив чисел удвоенной точности
(double) и массив символов (char), или просто строка. Это связано с
тем, что все вычисления в системе MATLAB выполняются с удвоен-
ной точностью и большинство функций работают с массивами чисел
удвоенной точности или строками.
Другие типы данных предназначены для таких специальных
приложений, как работа с разреженными матрицами (sparse), обра-
ботка изображений (uint8), работа с массивами большой размерности
(cell и struct).
Нельзя задать тип переменной numeric или array. Эти типы
называются виртуальными и служат только для того, чтобы сгруппи-
ровать переменные, которые имеют общие атрибуты.
Тип uint8 предназначен для эффективного хранения данных в
памяти. К данным этого типа можно применять только базовые опе-
рации индексации и изменения размеров, но нельзя выполнить ника-
кой математической операции. Для этого такие массивы необходимо
преобразовать в тип double.
Создание собственных типов и добавление методов для
встроенных типов. Нижеприведенная таблица содержит седьмой тип
данных - UserObject. Язык MATLAB позволяет создавать собствен-
ные типы данных и работать с ними по аналогии со встроенными ти-
пами.
Для встроенных типов данных можно переопределять метод точно
также, как это делается для объекта. Например, чтобы задать опера-
цию сортировки для массива типа uint8, необходимо создать метод
(sort.m или sort.mex) и поместить его в специальный каталог @uint8.
Следующая таблица описывает типы данных более подробно.
Класс Пример Описание
Числовой массив удво-
енной точности (это
наиболее распростра-
[ 1 2; 3 4]
Double ненный тип переменной
5 + 6i
в системе MATLAB
72
Массив символов (каж-
дый символ - длиной 16
битов), часто именуется
Char "Привет"
строкой.
Разреженная матрица
удвоенной точности
(только двумерная). Раз-
реженная структура
применяется для хране-
ния матриц с небольшим
количеством ненулевых
элементов, что позволяет
Sparse Speye(5) использовать лишь не-
большую часть памяти,
требуемой для хранения
полной матрицы. Разре-
женные матрицы требу-
ют применения специ-
альных методов для ре-
шения задач.
Массив ячеек. Элемен-
ты этого массива содер-
жат другие массивы.
Массивы ячеек позволя-
Cell { 17 "привет" eye (2)} ют объединить связан-
ные данные, возможно
различных размеров, в
единую структуру.
Массив записей. Он
включает имена полей.
A.day = 12; A.color = Поля сами могут содер-
жать массивы. Подобно
Struct "Red"; A.mat = массивам ячеек, массивы
magic(3); записей объединяют cвя-
занные данные и инфор-
мацию о них.
73
Массив 8-разрядных
целых чисел без зна-
ков. Он позволяет хра-
нить целые числа в диа-
пазоне от 0 до 255 в 1/8
части памяти, требуемой
Uint8 Uint8 (magic (3))
для массива удвоенной
точности. Никакие мате-
матические операции
для этих массивов не
определены.
Тип данных, опреде-
UserObject inline("sin(x)") ляемый пользователем.
Описание диаграммы. Соединительные линии на диаграмме
(рисунок 3.1) определяют принадлежность того или иного типа дан-
ных к одному или нескольким классам.
Пример. Матрица типа sparse имеет также типы double и
numeric. Операторы
isa(S",sparse")
isa(S",double")
isa(S",numeric")
возвращают значения 1(истина), то есть S - числовая разреженная
матрица удвоенной точности. Обратите внимание, что тип array -
массив находится в вершине диаграммы. Это означает, что все данные
системы MATLAB являются массивами.
Каждому типу данных можно соотнести свои функции и опе-
раторы обработки, или другими словами, методы. Дочерние типы
данных, расположенные на диаграмме ниже родительского типа, под-
держаны также и методами родителя. Следовательно, массив типа
double поддержан методами, применяемыми для типа numeric. В таб-
лице приведены некоторые из таких методов:
Класс Метод
74
Вычисление размера (size), длины (length),
размерности (ndims), объединение массивов (), транспонирование (transpose), многомер-
Массив array
ная индексация (subsindex), переопределение
(reshape) и перестановка (permute) размерно-
стей многомерного массива.
Индексация с использованием фигурных ско-
Массив ячеек cell бок {e1,…,en} и разделением элементов списка
запятыми.
Строковые функции (strcmp, lower), автомати-
Строка Char ческое преобразование к типу double для при-
менения методов класса double.
Арифметические и логические операции, мате-
Double
матические функции, функции от матриц.
Поиск (find), обработка комплексных чисел
(real, imag), формирование векторов, выделе-
Numeric
ние строк, столбцов, подблоков массива, рас-
ширение скаляра.
Sparse Операции над разреженными матрицами.
Массив записей Доступ к содержимому поля.field (разделитель
Struct элементов списка - запятая).
Операция хранения (чаще всего используется с
Uint8
ППП Image Processing Toolbox)
UserObject Определяется пользователем
Пустые массивы. Ранние версии системы MATLAB допус-
кали единственную форму пустого массива размера 0х0, обозначаемо-
го как . MATLAB поддерживает массивы, у которых одна, но не
все из размерностей, равна нулю, то есть массивы с размерами 1х0,
10х0х20 или определяются как пустые. Квадратные скобки
продолжают обозначать массив 0х0. Пустые массивы другого раз-
мера могут быть созданы с помощью функций zeros, ones, rand или
eye. Например, для формирования пустого массива размера 0х5, мож-
но использовать оператор присваивания
E = zeros(0,5).
75
Основное назначение пустых массивов состоит в том, чтобы
любая операция, которая определена для массива(матрицы) размера
m?n, определяла правильный результат для случая, когда m или n
равно нулю. Размер массива(матрицы) результата должен соответст-
вовать значению функции, вычисленной в нуле. Например, оператор
C =
требует, чтобы массивы A и B имели одинаковое число строк. Таким
образом, если массив A имеет размер m?n, а B - m?p, то C есть мас-
сив размера m?(n+p). Результат будет правильным, если любой из
параметров m, n или p равен нулю.
Многие операции в системе MATLAB создают вектор-строку
или вектор-столбец. В этом случае результат может быть, либо пустой
вектор-строкой
r = zeros(1, 0),
либо пустым вектор-столбцом
C = zeros(0, 1).
MATLAB 5 и более поддерживает правила системы MATLAB
4 для операторов if и while. Например, условный оператор типа
if A, S1, else, S0, end
выполняет оператор S0, когда A - пустой массив.
Некоторые функции системы MATLAB такие, как sum, prod,
min и max понижают размерность результата: если аргумент массив,
то результат - вектор; если аргумент вектор, то результат - скаляр. Для
этих функций при пустом массиве входа получаются следующие ре-
зультаты:
sum() = 0 ;
prod() = 1 ;
max() = ;
min() = .
3.4 Операторы системы MATLAB 5. Объедине-
ние операторов в арифметические выражения.
Встроенные функции
Операторы системы MATLAB
Операторы системы MATLAB делятся на три категории:
76
арифметические операторы позволяют конструировать ариф-
метические выражения и выполнять числовые вычисления.
операторы отношения позволяют сравнивать числовые опе-
ранды.
логические операторы позволяют строить логические выра-
жения.
Логические операторы имеют самый низкий приоритет от-
носительно операторов отношения и арифметических операторов.
Арифметические операторы. При работе с массивом чисел
установлены следующие уровни приоритета среди арифметических
операций:
уровень 1:
поэлементное транспонирование (."), поэлементное
возведение в степень (.^), эрмитово сопряженное
транспонирование матрицы ("), возведение матрицы
в степень (^);
уровень 2: унарное сложение (+), унарное вычитание (-);
уровень 3:
умножение массивов (.*), правое деление (./), левое
деление массивов (.\), умножение матриц (*), реше-
ние систем линейных уравнений, операция (/), опера-
ция (\);
уровень 4: сложение (+), вычитание (-);
уровень 5: оператор формирования массивов (:).
Внутри каждого уровня операторы имеют равный приоритет
и вычисляются в порядке следования слева направо. Заданный по
умолчанию порядок следования может быть изменен с помощью
круглых скобок.
Пример. Пусть заданы 2 вектора
A = ;
B = ;
Результаты выполнения оператора
C = A./B. ^ 2 равен C = 0.7500 9.0000 0.2000 , а оператора
C = (A./B). ^ 2 равен C = 2.2500 81.0000 1.0000. Как видно результаты
совершенно различны.
Арифметические операторы допускают использование ин-
дексных выражений. Например:
77
b = sqrt (A(2)) + 2*B (1)
b=7
Арифметические операторы системы MATLAB работают, как
правило, с массивами одинаковых размеров. Для векторов и прямо-
угольных массивов оба операнда должны быть одинакового размера,
за исключением единственного случая, когда один из них - скаляр.
Если один из операндов скалярный, а другой нет, в системе MATLAB
принято, что скаляр расширяется до размеров второго операнда и за-
данная операция применяется к каждому элементу. Такая операция
называется расширением скаляра.
Операторы отношения. В системе MATLAB определено 6
следующих операторов отношения:
< Меньше
<= Меньше или равно
> Больше
> = Больше или равно
== Равно тождественно
~ = Не равно
Операторы отношения выполняют поэлементное сравнение
двух массивов равных размерностей. Для векторов и прямоугольных
массивов, оба операнда должны быть одинакового размера, за исклю-
чением случая когда один из них скаляр. В этом случае MATLAB
сравнивает скаляр с каждым элементом другого операнда. Позиции,
где это соотношение истинно, получают значение 1, где ложно - 0.
Операторы отношения, как правило, применяется для изменения по-
следовательности выполнения операторов программы. Поэтому они
чаще всего используются в теле операторов if, for, while, switch.
Операторы отношения всегда выполняются поэлементно.
Пример. Выполним сравнение двух массивов, используя ус-
ловие А Основы программирования в MatLab
Наместников С.М. / Сборник лекций: УлГТУ, Ульяновск. - 2011 Введение Глава 1. Структура программы. Основные математические операции и типы данных 1.1. Структура программы пакета MatLab 1.2. Простые переменные и основные типы данных в MatLab 1.3. Арифметические операции с простыми переменными 1.4. Основные математические функции MatLab 1.5. Векторы и матрицы в MatLab 1.6. Операции над матрицами и векторами 1.7. Структуры в MatLab 1.8. Ячейки в MatLab Глава 2. Условные операторы и циклы в MatLab 2.1. Условный оператор if 2.2. Условный оператор switch 2.3. Оператор цикла while 2.4. Оператор цикла for Глава 3. Работа с графиками в MatLab 3.1. Функция plot 3.2. Оформление графиков 3.3. Отображение трехмерных графиков 3.4. Отображение растровых изображений Глава 4. Программирование функций в MatLab 4.1. Порядок определения и вызова функций 4.2. Область видимости переменных Глава 5. Работа с файлами в MatLab 5.1. Функции save и load 5.2. Функции fwrite и fread 5.3. Функции fscanf и fprintf 5.4. Функции imread и imwrite Введение
Среди множества существующих математических пакетов, таких как Mathematica, MathCad и др., система MatLab занимает лидирующее место благодаря удобному встроенному языку программирования для реализации самых разнообразных математических алгоритмов и задач математического моделирования. Кроме того, данный пакет имеет дополнительно инструмент визуального моделирования Simulink, позволяющий строить и исследовать математические модели, не прибегая к их программированию. В данном учебном пособии рассматривается внутренний язык программирования MatLab, дающий наибольшую гибкость, богатство функционала и удобство при решении и исследовании математических задач. При изложении материала предпочтение отдавалось наиболее простым конструкциям языка, изучая которые можно создавать самые разнообразные и нетривиальные математические алгоритмы. Глава 1. Структура программы. Основные математические операции и типы данных
Первым шагом на пути создания математических алгоритмов является изучение структуры программы и набора математических операций, доступных языку программирования. В частности, в данной главе будут рассмотрены математические операции и функции пакета MatLab, связанные с обработкой как скалярных, так и матричных переменных. Структура программы пакета MatLab
Как правило, каждая программа в MatLab представляет собой функцию и начинается с ключевого слова function, за которым через пробел следует ее название. Например, function Lab1 Данная программа заключена в функции с именем Lab1 и вычисляет произведение двух переменных а и b. При сохранении программы в m-файл рекомендуется указывать имя файла, совпадающее с именем функции, т.е. в данном случае – Lab1. Следует отметить, что в одном m-файле можно задавать множество дополнительных функций. Для этого достаточно написать в конце листинга основной программы еще одно ключевое слово function и задать ее имя, например, function Lab1 function out_c(arg_c) % определение функции out_c() Обратите внимание, что функцию out_c() можно вызывать в основной программе до ее определения. Это особенность языка MatLab, позволяющая не беспокоиться программисту о последовательности задания функций. В приведенном примере функция out_c() имеет один входной параметр с именем arg_c, который выводится на экран (в командное окно MatLab) с помощью встроенной функции disp(). В итоге, при выполнении приведенной программы в командном окне MatLab будет отображено значение переменной c. Дополнительные функции можно оформлять и в отдельных m-файлах. Например, если есть необходимость какую-либо функцию описать в одном m-файле, а вызывать ее в другом, то это можно реализовать следующим образом. 1-й файл (Lab1.m) При выполнении функции Lab1 система MatLab вызовет функцию square из файла square.m. Это будет сделано автоматически, т.к. встроенные функции языка MatLab определены также и вызываются из файлов, имена которых, как правило, соответствуют именам вызываемых функций. Обратите также внимание на то, что функция square() не только принимает два аргумента a и b, но и возвращает их произведение с помощью переменной res. Представленный синтаксис следует использовать всякий раз, когда требуется возвратить результат вычислений основной программе. В четвертой главе данного пособия более подробно изложены конструкции вызова функций для реализации разнообразных алгоритмов. Простые переменные и основные типы данных в MatLab
Создание программы, как правило, начинается с определения переменных и способа представления данных. Следовательно, чтобы правильно организовать описание данных программы, необходимо знать как задавать переменные в MatLab и какие виды переменных возможны. Самый простой и наиболее распространенный тип данных – это число. В MatLab число хранится в переменной, которая имеет некоторое уникальное имя, например, задает переменную с именем a и присваивает ей значение 5. По умолчанию переменная а является вещественной (тип double), т.е. может принимать дробные значения, например, задает значение переменной а равное -7,8. Изменить тип переменной можно, указав тип присваиваемого числа с помощью соответствующего ключевого слова, например, выполнит присваивание числа 5 как целочисленного 16-битового значения. В результате выполнения такой операции тип переменной a будет соответствовать int16. Типы данных, доступные в MatLab, представлены в табл. 1.1. Таблица 1.1. Основные типы данных в MatLab По умолчанию используется тип double, который имеет наибольшую точность представления вещественного числа и является потому универсальным типом. Однако, если необходимо экономить память ЭВМ, то можно указывать самостоятельно желаемый тип. Последнее, что следует знать при задании переменных – это правило определения их имен. В MatLab имена переменных могут задаваться только латинскими буквами, цифрами и символом ‘_’. Причем, первый символ в имени должен соответствовать букве латинского алфавита. Также следует отметить, что имена arg = 1; это три разных имени, т.е. три разные переменные со значениями 1, 2 и 3 соответственно. Данный пример показывает, что MatLab различает регистр в именах переменных. При программировании лучше всего задавать осмысленные имена переменных, по которым можно было бы понять какие данные они представляют. Это позволяет избежать путаницы при построении больших программ.
a = 5;
b = 2;
c = a*b;
a = 5;
b = 2;
c = a*b;
out_c(c); % вызов функции out_c()
disp(arg_c);
Arg = 2;
ARG = 3;