Переменные в среде 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 необходимо выбрать идентификатор (имя) переменной (начинается с латинской буквы, далее – лат.буквы, цифры, спец.знаки) и использовать эту переменную в операторе командной строки, задающем значение переменной (простое присваивание, ссылка на некот.функции и др.).

  1. Числовые переменные: обычные (вещественные) или комплексные числа, векторы, матрицы и многомерные массивы. Под вещественное число отводится 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) частями из А, дополненные нулями.

  1. Символьные переменные

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
a = 5;
b = 2;
c = a*b;

Данная программа заключена в функции с именем Lab1 и вычисляет произведение двух переменных а и b. При сохранении программы в m-файл рекомендуется указывать имя файла, совпадающее с именем функции, т.е. в данном случае – Lab1.

Следует отметить, что в одном m-файле можно задавать множество дополнительных функций. Для этого достаточно написать в конце листинга основной программы еще одно ключевое слово function и задать ее имя, например,

function Lab1
a = 5;
b = 2;
c = a*b;
out_c(c); % вызов функции out_c()

function out_c(arg_c) % определение функции out_c()
disp(arg_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;
Arg = 2;
ARG = 3;

это три разных имени, т.е. три разные переменные со значениями 1, 2 и 3 соответственно. Данный пример показывает, что MatLab различает регистр в именах переменных.

При программировании лучше всего задавать осмысленные имена переменных, по которым можно было бы понять какие данные они представляют. Это позволяет избежать путаницы при построении больших программ.




Top