Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 1 по ММ. Основы работы с пакетом Matlab

.pdf
Скачиваний:
101
Добавлен:
01.06.2015
Размер:
1.79 Mб
Скачать

21

В Matlab определены следующие базовые типы данных, в общем случае представляющих собой многомерные массивы:

single — числовые массивы с числами одинарной точности;

double — числовые массивы с числами удвоенной точности;

char — строчные массивы с элементами-символами;

sparse — наследует свойства double, разреженные матрицы с элементами-числами удвоенной точности;

сеll — массивы ячеек; ячейки, в свою очередь, тоже могут быть массивами;

struct — массивы структур с полями, которые также могут содержать массивы;

function_handle — дескрипторы функций:

int32, uint32 — массивы 32-разрядных чисел со знаком и без знаков;

intl6,uint16 — массивы 16-разрядных целых чисел со знаком

ибез знаков;

int8. uint8 — массивы 8-разрядных целых чисел со знаками

ибез знаков.

Кроме того, предусмотрен еще один тип данных — UserObject, который относится к типам данных (объектом), определяемым пользователем.

Каждому типу данных можно соотнести некоторые характерные для него операции, называемые методами. Дочерние типы данных наследуют от последних их методы, что является признаком наследования объектов. Поскольку в иерархии типов данных сверху находятся данные типа array, это значит, что все виды данных в Matlab являются массивами.

4.4.1.2 Числа, переменные, функции

Числа в Matlab могут быть положительными и отрицательными, целыми и дробными, действительными и комплексными, могут представляться с фиксированной и плавающей точкой, с мантиссой и порядком.

22

Особенностью представления чисел в Matlab является:

мнимая единица кодируется с помощью двух символов: i или j;

целая часть от дробной отделяется точкой;

отделение порядка числа от мантиссы осуществляется символом e. Форматы представления чисел:

format chort – короткое представление (5 знаков);

format chort е - короткое представление в экспоненциальной форме (5 знаков мантиссы, 3 знака порядка);

format long – длинное представление числа (15 знаков);

format long е – длинное представление числа (15 знаков мантиссы, 3 знака порядка).

Переменные – это символы, используемые для обозначения

хранимых данных. Переменная имеет имя, называемое идентификатором. Имя переменной начинается с буквы и может состоять из букв, чисел и других допустимых символов.

Константы – это численное значение уникального имени. В Matlab используются следующие константы:

pi – число ;

inf – машинная бесконечность;

ans – имя переменной, хранящей результат вычислений;

NaN – нечисловой характер данных (возникает, например, как результат операции 1/0).

Элементарные функции Matlab:

abs(x) – абсолютное значение х;

exp(x) – экспоненциальная функция ех;

log(x), log10(x), log2(x) – логарифмы чисел с основанием е, 10, 2;

sqrt(x) – корень квадратный из х;

sin(x), cos(x), tan(x), cot(x), sec(x), csc(x), asin(x), acos(x), atan(x), acot(x), asec(x), acsc(x) – тригонометрические функции и обратные тригонометрические функции;

23

sinh(x), cosh(x), tanh(x), coth(x), sech(x), csch(x), asinh(x), acosh(x), atanh(x), acoth(x), asech(x), acsch(x) – гиперболические функции и обратные – гиперболические функции и обратные.

Функцию пользователя можно создать следующим образом:

1.Вызвать окно редактора m-файлов, нажав кнопки New M File (Создать m-файл).

2.Ввести строку:

function Z=expxp(x)

Ключевое слово function объявляет новую функцию, имя которой expxp, ее параметр – x. Символ Z определяет значение функции при аргументе х.

3.Задать саму новую функцию пользователя (пусть Z=exp(x)/x).

4.Сохранить функцию пользователя на диске, щелкнув мышью по кнопке Save (Сохранить).

5.Закрыть окна редактора m-файлов. Функция пользователя

Z=exp(x)/x создана.

Для вычисления функции для данного аргумента х достаточно набрать имя функции и значение аргумента в круглых скобках:

Z=expxp(1). На экране получим значение функции Z=2.7183.

Особо

отметим

следующие

особенности

система

программирования Matlab.

Имеется символ строчного комментария - %:

%Это комментарий

Использование точки с запятой не является обязательным. Символ ; используется для подавления вывода результата выполнения команды на экран. Строка х=1; – выполнит присвоение переменной х значения 1, а строка

х=1 – выполнит присвоение и выведет на экран результат х=1.

4.4.1.3 Матрицы и векторы

Матрицы в Matlab – это прямоугольные массивы чисел. Число это так же матрица, размерности [x] – скаляр. Матрица, имеющая один столбец или одну строку – вектор. В системе Matlab все

24

числовые данные можно рассматривать как матрицы. В отличие от других языков программирования, оперирующих отдельными числами, Matlab оперирует целыми матрицами.

Ввод матрицы осуществляется методом объединения элементов. Это объединение записывается следующим образом:

>>А1=[1 1 1 2];

-сформирован вектор (матрица-столбец или матрица строка для системы не важно). Элементы при таком формировании разделяются пробелами или запятыми. Для формирования матриц производят построчную запись, отделяя строки точкой с запятой:

>>А2=[1 1 1 2; 3 6 5 1; 0 9 7 3];

Можно составлять матрицу путем объединения ранее определенных матриц и векторов:

>>В=[А1,А2];

-вектор А1формирует первую строку матрицы В, а А2 – вторую, третью и четвертую.

При обращении к элементу матрицы используется запись вида А[i,j] – обращение к элементу i-строки j-столбца. Если необходимо обратиться не к одному, а к нескольким элементам, т.е. выделить из матрицы подматрицу, то используют запись вида

С=В[2:4;1:3];

-матрице С присвоена подматрица матрицы В, содержащая элементы строк со 2 по 4 в столбцах с 1 по 3. Если необходимо выделить всю строку (столбец), то вместо указания конкретных номеров необходимо проставить простое двоеточие (D=[2:3;:]).

Если требуется сформировать вектор, элементы которого расположены в арифметической прогрессии, то поступают так:

х=хн:h:xк

где хн – начальное значение х, xк – конечное значение х, h – шаг изменения значения х. Так удобно задавать, например, время изменения сигнала или создавать массив значений координаты.

25

Матрицы можно складывать, умножать, возводить в степень по правилам линейной алгебры, а также производить поэлементное сложение ( .+ ) и поэлементное умножение ( .* ).

4.4.2Виды программирования

Язык программирования системы Matlab вобрал в себя все средства, необходимые для реализации различных видов программирования:

процедурного;

операторного;

функционального;

логического;

структурного (модульного);

объектно-ориентированного;

визуально-ориентированного.

Воснове процедурного, операторного и функционального типов программирования лежат процедуры, операторы и функции, используемые как основные объекты языка. Эти типы объектов присутствуют в Matlab.

Логическое программирование реализуется в Matlab с помощью логических операторов и функций. Это позволяет реализовать основные идеи логического программирования, хотя на выдающуюся роль в этом классе языков программирования Matlab не претендует.

Matlab

представляет

собой

яркий

пример

плодотворности структурного программирования.

Подавляющее

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

26

объявления, а для создания и отладки самостоятельных модулей Matlab имеет все необходимые средства. Подавляющее большинство команд и функций системы Matlab поставляется в виде таких модулей.

Объектно-ориентированное программирование также широко представлено в системе Matlab. Оно особенно актуально при программировании задач графики.

Что качается визуально-ориентированного программирования, то в Matlab оно представлено в основном в пакете моделирования заданных блоками устройств и систем Simulink.

Особенностью Matlab является двойственность операторов и функций. Многие операторы имеют свои аналоги в виде функций. Так, например, оператор «+» имеет аналог в виде функции sum. Команды, записанные в виде Command argument нередко имеют форму записи и в виде функции:Command(' argument').

4.4.3Средства разработки программ

Средства разработки программ в Matlab совпадают с приемами, реализованными в большинстве языков программирования.

Цикл for…end. Для данного n, оператор x =[];

for i =1:n x=[x,i .2 ];

end x

создает вектор размерности n, а оператор x =[];

for i = n:1 x=[x,i .2 ];

end x

создает вектор с теми же элементами, но размещенными в обратном порядке. Заметим, что матрица может быть пустой (например, в случае оператора x=[]).

27

Последовательность операторов for i =1:m

for j =1:n H(i,j)=1/(i+j-1); end

end H

создаст и напечатает на экране матрицу Гильберта размерности m×n . Точка с запятой, которая завершает внутренний оператор, предотвращает вывод на экран ненужных промежуточных результатов, в то время как последний оператор H выводит на экран окончательный результат.

Цикл while…end. В общем виде цикл while записывается в виде while <условие>

<операторы> end

<Операторы> будут повторяться до тех пор, пока <условие> будет оставаться истинным. Например, для заданного числа a приведенная далее последовательность операторов вычислит и выведет на дисплей наименьшее неотрицательное число n, такое, что

2n < a:

n=0;

while 2 ^n <a n=n +1;

end n

Условный оператор if…end. В общем виде простой оператор if используется следующим образом:

if <условие> <операторы> end

<Операторы> будут выполняться, только если <условие> истинно. Возможно также множественное ветвление, что демонстрируется приведенным далее примером.

28

if n <0 parity =0;

elseif rem(n,2)==0 parity =2;

else parity =1; end

При использовании двухвариантного условного оператора часть, связанная с elseif , конечно, не используется.

Оператор переключения case…end. При необходимости построить конструкцию ветвления с более чем двумя логическими условиями удобнее использовать не вложенные операторы if ,а оператор переключения switch ...case . Этот оператор имеет следующую структуру:

switch <выражение>

%<выражение> - это обязательно скаляр или строка case <значение1>

операторы

%выполняется, если <выражение>=<значение1> case <значение2>

операторы

%выполняется, если <выражение>=<значение2>

...

otherwise

операторы

%выполняется, если <выражение>не совпало %ни с одним значением

end

Операторы отношения (операторы условия). В Matlab

используются следующие операторы отношения:

Обозначение

Значение

<

меньше чем

 

>

больше чем

 

<=

меньше

или

 

равно

 

29

>=

больше

или

 

равно

 

==

равно

 

=

не равно

 

Отметим, что знак «используется в операторах присваивания, в то время как знак «==» используется в операторах отношения.

Операторы отношения (или, другими словами, логические переменные, которые они создают) могут объединяться с помощью логических операторов:

Обозначение

Значение

&

И

|

ИЛИ

 

НЕ

Когда эти операторы применяются к скалярам, то результатом является тоже скаляр 1 или 0 в зависимости от того, является ли результат истиной или ложью. Например,

3<5 ans = 1 3>5 ans = 0

Когда операторы отношения применяются к матрицам одного размера, результатом является матрица того же размера, у которой в качестве элементов стоят 0 или 1, в зависимости от соотношения между соответствующими элементами исходных матриц. Например,

a=rand(5); b=triu(a); a==b

ans =

 

 

 

 

1

1

1

1

1

0

1

1

1

1

0

0

1

1

1

0

0

0

1

1

0

0

0

0

1.

Операторы while и if интерпретируют отношение между матрицами как истинное в том случае, если результирующая матрица не имеет нулевых элементов.

30

Так, если необходимо выполнить оператор в том случае, когда матрицы A и B полностью совпадают, можно написать

if A ==B <операторы>end

но если необходимо выполнить оператор в том случае, когда матрицы A и B не равны, следует ввести

if any(any(A .=B))<оператор>end

или, что проще,

if A ==B else <оператор>end .

Заметим, что конструкция

if A .=B <оператор> end

почти наверняка не даст того, что нужно, поскольку оператор будет выполняться, только если каждый элемент матрицы A будет отличаться от соответствующего элемента матрицы B. Для сведения матричных отношений к вектору или скаляру можно воспользоваться функциями any и all. В предыдущем примере необходимо использование функции any два раза, поскольку эта функция – векторная.

Функция find. Оператор k = find(x) возвращает вектор k номеров ненулевых элементов вектора/матрицы x .Если x – матрица, то при определении индексов она рассматривается как вектор, образованный последовательно соединенными столбцами матрицы. Вектор find(x) можно использовать совместно с операторами отношения, поскольку результатом применения оператора отношения к матрицам является матрица из 0 и 1 (ложь или истина). Таким образом, можно с помощью одного оператора find определить и записать сразу все индексы матрицы, удовлетворяющие некоторому условию. Если при этом вспомнить, что оператор цикла for допускает форму for k=KK , где KK – целый вектор, то удобно использовать их вместе. Например, если необходимо выполнить <оператор>только для тех элементов матрицы, которые больше 3 ,то удобно это сделать следующим образом:

for i=find(A>3) <оператор>