К текущему моменту мы познакомились с четырьмя различными типами данных
программы 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-файлов. Остальные функции должны вызываться этой функцией и другими внутренними функциями.
Как и во всех языках программирования, в MatLab предусмотрена возможность работы с переменными. Причем пользователь не должен заботиться о том, какие значения будет принимать переменная (комплексные, вещественные или только целые). Для того чтобы присвоить, например, переменной z значение 1.45, достаточно написать в командной строке z = 1.45, при этом MatLab сразу же выведет значение z:
» z = 1.45
z =
1.4500
Здесь знак равенства используется в качестве оператора присваивания.
Часто не очень удобно после каждого присваивания получать еще и результат. Поэтому в MatLab предусмотрена возможность завершать оператор присваивания точкой с запятой для подавления вывода результата в командное окно. Именем переменной может быть любая последовательность букв и цифр без пробела, начинающаяся с буквы. Строчные и прописные буквы различаются, например MZ и mz являются двумя разными переменными. Количество воспринимаемых MatLab символов в имени переменной составляет 31.
В качестве упражнения на использование переменных найдите значение следующего выражения:
Наберите последовательность команд, приведенную ниже (обратите внимание на точку с запятой в первых двух операторах присваивания для подавления вывода промежуточных значений на экран):
» х = sin(1.3*pi)/log(3.4);
» у = sqrt(tan(2.75)/tanh(2.75));
» z
= (х+у)/(х-у)
Z =
0.0243 - 0.9997i
Последний оператор присваивания не завершается точкой с запятой для того, чтобы сразу получить значение исходного выражения. Конечно, можно было бы ввести сразу всю формулу и получить тот же результат:
»(sin(1.3*pi)/log(3.4)+sqrt(tan(2.75)/tanh(2.75)))/…
(sin(1.3*pi)/log(3.4)-sqrt(tan(2.75)/tanh(2.75))) ans =
0.0243 - 0.9997i
Обратите внимание, насколько первая запись компактнее и яснее второй! Во втором варианте формула не помещалась в командном окне на одной строке, и пришлось записать ее в две строки, для чего в конце первой строки поставлены три точки.
Для ввода длинных формул или команд в командную строку следует поставить три точки (подряд, без пробелов), нажать клавишу
MatLab запоминает значения всех переменных, определенных во время сеанса работы. Если после ввода примера, приведенного выше, были проделаны еще какие-либо вычисления, и возникла необходимость вывести значение х
, то следует просто набрать х
в командной строке и нажать
» x
-0.6611
Переменные, определенные выше, можно использовать и в других формулах. Например, если теперь необходимо вычислить выражение
,
то достаточно ввести следующую команду:
» (x-y)^(3/2)
ans =
-0.8139 + 0.3547i
Вызов функций в MatLab обладает достаточной гибкостью. Например, вычислить е3.5 можно, вызвав функцию ехр из командной строки:
» ехр(3.5)
ans =
33.1155
Другой способ состоит в использовании оператора присваивания:
» t = ехр(3.5)
t =
33.1155
Предположим, что часть вычислений с переменными выполнена, а остальные придется доделать во время следующего сеанса работы с MatLab. В этом случае понадобится сохранить переменные, определенные в рабочей среде.
Просмотр переменных
При работе с достаточно большим количеством переменных необходимо знать, какие переменные уже использованы, а какие нет. Для этой цели служит команда who, выводящая в командное окно MatLab список используемых переменных:
» who
Your variables are:
al a2 a3
Команда whos позволяет получить более подробную информацию о переменных в виде таблицы:
Grand total is 3 elements using 24 bytes
Первый столбик Name состоит из имен используемых переменных. То, что содержится в столбике Size, по существу, определяется основным принципом работы MatLab. Программа MatLab все данные представляет в виде массивов.
Переменные al, a2 и а3 являются двумерными массивами размера один на один. Каждая из переменных занимает по восемь байтов, как указано в столбике Bytes. Наконец, в последнем столбике Class указан тип переменных - double array, т.е. массив, состоящий из чисел двойной точности. В строке под таблицей написано, что в итоге три элемента, т.е. переменные, занимают двадцать четыре байта. Оказывается, что представление всех данных в MatLab в виде массивов дает определенные преимущества.
Для освобождения из памяти всех переменных используется команда clear. Если в аргументах указать список переменных (через пробел), то только они будут освобождены из памяти, например:
» clear al аЗ
» who
Your variables are:
a2
Начиная с версии 6.0, появилось удобное средство для просмотра переменных рабочей среды - окно Workspace , для перехода к которому следует активизировать одноименную закладку. Данное окно содержит таблицу, аналогичную той, что выводится командой whos. Двойной щелчок по строке, соответствующей каждой переменной, приводит к отображению ее содержимого в отдельном окне, что особенно полезно при работе с массивами. Панель инструментов окна Workspace позволяет удалить лишние переменные, сохранить и открыть рабочую среду.
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) выражения в зависимости от результата, получающегося после выполнения операций, входящих в выражение.