русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Высшего профессионального образования


Дата добавления: 2015-06-12; просмотров: 910; Нарушение авторских прав


ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение

высшего профессионального образования

 

«Санкт-Петербургский государственный университет
аэрокосмического приборостроения»

________________________________________________________________

 

М. В. Бураков

 

 

Основы работы в MATLAB

 

Учебное пособие

 

Санкт-Петербург


М.В. Бураков

Основы работы в MATLAB: Учеб. пособие / СПбГУАП. СПб., 2006.

 

Рецензенты: кафедра «Инжиниринг и менеджмент качества» БГТУ «ВОЕНМЕХ» им. Д.Ф. Устинова; канд. техн. наук доцент Долженков В.А.

 

 

Система MATLAB является языком программирования высокого уровнядля технических вычислений. Система MATLAB вобрала в себя передовой опыт развития и компьютерной реализации численных методов, накопленный за последние десятилетия. MATLAB имеет большое количество пакетов расширения системы (toolbox) для специализированных применений. Более того, имеется возможность самостоятельного создания таких пакетов.

Указанные особенности сделали систему MATLAB фактическим стандартом в образовательном процессе ведущих технических университетов, а также незаменимым инструментом ученых и инженеров.

Учебное пособие предназначено для студентов специальности 22020165 “Управление и информатика в технических системах”. Они могут быть использованы при проведении вычислительной практики.

 

 

Редактор А.М. Смирнова

Компьютерная верстка М.В. Бураков

 

________________________________________________________________



 

Подписано в печать Формат 60´84 1/16. Бумага тип. №3

Печать офсетная. Усл. печ. л. 4 Уч.-изд. л. 3,8 Тираж 100 экз.

Заказ №

________________________________________________________________



Редакционно-издательский отдел

Отдел электронных публикаций и библиографии библиотеки

Отдел оперативной полиграфии

СПбГУАП

190000, Санкт-Петербург, ул. Б. Морская, 67

 

 

© ГОУ ВПО «СПбГУАП», 2006

Предисловие

 

MATLAB — самая популярная система автоматизации математических расчетов, построенная на расширенном представлении и применении матричных операций. Это нашло отражение в названии системы — MATrix LABoratory — матричная лаборатория.

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

Наиболее известные области применения системы MATLAB:

- математические расчеты;

- разработка алгоритмов;

- имитационное моделирование,

- анализ данных, визуализация результатов эксперимента;

Особенную популярность MATLAB получил благодаря пакету расширения (toolbox) Simulink, предназначенному для решения задач блочного моделирования динамических систем и устройств. Кроме Simulink, MATLAB имеет десятки других пакетов расширения, каждый из которых ориентирован на решение задач в той или иной технической области. Например, Fuzzy Logic Toolbox позволяет моделировать нечеткие логические регуляторы, а Neural Network Blockset позволяет описать поведение искусственных нейронных сетей.

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

Настоящие методические указания предназначены для первоначального ознакомления студентов с системой MATLAB, что предполагает освоение работы с командной строкой, изучение графических возможностей, а также принципов программирования в MATLAB. Большое количество примеров позволяет быстро освоить основные приемы работы с системой.

Для более глубокого изучения возможностей MATLAB может быть рекомендована литература [1 - 8].

 

 


1. Работа с MATLAB в режиме калькулятора

1.1. Ввод выражений

 

В режиме калькулятора (или режиме прямых вычислений) пользователь может вводить команды с клавиатуры. Ввод каждой команды завершается нажатием клавиши ENTER. При этом используются обычные простейшие команды редактирования.

После запуска MATLAB появляется знак приглашения к работе

>>

Выpaжeния, нaбpaнныe пoльзoвaтeлeм, интepпpeтиpуются и выполняются систeмoй MATLAB. Выpaжeния oбычнo зaписывaются в фopмe:

пepeмeнная = выpaжeниe [;]

или

выpaжeниe [;]

Выpaжeния сoстaвляются из oпepaтopoв, спeциaльных симвoлoв, функций и имен пepeмeнных. Eсли имя пepeмeннoй и симвoл "=" oтсутствуют, aвтoмaтичeски сoздaется пepeмeннaя с имeнeм "ans", чтo oзнaчaeт oтвeт. Haпpимep, выpaжeниe

>> (2006-1985)*12

ans =

Десятичная часть числа отделяется точкой. Текущее значение ans можно использовать в дальнейших выражениях.

Для сохранения результатов промежуточных вычислений их следует записывать в переменные. При использовании переменных необходимо придерживаться правил:

- имя переменной может состоять из букв латинского алфавита, знака подчёркивания и цифр, но начинается обязательно с буквы (всего запоминается не более 19 символов);

- прописные и строчные буквы различаются;

- пробел не входит в имя переменной.

В качестве знака присваивания используется =, например:

>> a=3.25*(0.7-3.3/5.1)+2.3^3

a =

12.3391

Если пoслeдний симвoл выpaжeния - знак ";", то вывод результата на экран дисплея не происходит, нo вычисления пpoдoлжaются.

Когда сложное выpaжeниe нe пoмeщaeтся нa oднoй стpoкe, то нaбop трех или бoлee тoчeк (...) с пoслeдующим вoзвpaтoм кapeтки мoжeт быть испoльзoвaн для пpoдoлжения записи нa слeдующeй стpoкe. Haпpимep:

>> S = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 ...

-1/8+1/9-1/10+1/11-1/12

S =

0.6532

Пробелы вокруг знаков =, + и - необязательны, но обычно ставятся для удобства чтения.

Переменным в MATLAB могут присваиваться символьные значения.

Например:

y='Прощай'

Подключение к символьному значению переменной y нового слова иллюстрирует следующее

>> y=[y,', Америка!']

y =

Прощай, Америка!

Для записи чисел используется десятичный либо экспоненциальный формат. Например, оба эти представления эквивалентны:

0.0225 и 2.25e–2

Система MATLAB работает как с действительными, так и с комплексными числами. Комплексные числа вводятся при помощи буквы i или j, например:

>> 2+5i

ans =

2.0000 + 5.0000i

MATLAB пpинципиaльнo paбoтaeт с eдинствeнным poдoм oбъeктoв – пpямoугoльными мaтpицaми (с вoзмoжнo кoмплeксными члeнaми).

Скаляры и вектора MATLAB воспринимает как матрицы соответствующих размерностей.

Операторы системы MATLAB делятся на 3 категории:

- арифметические операторы; 􀀔

- операторы отношения;

- логические операторы (имеют самый низкий приоритет относительно операторов отношения и арифметических операторов).

Арифметические операции описаны в табл. 1.

 

Таблица 1 Арифметические операции

Оператор Функция Название
+ plus сложение
- minus вычитание
* mtimes матричное умножение
.* times поэлементное умножение массивов
^ mpower возведение матрицы в степень
.^ power поэлементное возведение массива в степень
/ mrdivide деление матриц справа налево
./ rdivide поэлементное деление массивов справа налево
\ mldivide деление матриц слева направо
.\ ldivide поэлементное деление массивов слева направо

 

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

>> A=[1 2 3];

>> B=[4 5 6];

>> B-A

ans =

3 3 3

>> minus(B,A)

ans =

3 3 3

>> A/B

ans =

0.4156

>> times(A,B)

ans =

4 10 18

>> ldivide(B,A)

ans =

0.2500 0.4000 0.5000

>> rdivide(B,A)

ans =

4.0000 2.5000 2.0000

>> mrdivide(B,A)

ans =

2.2857

 

В MATLAB используются следующие операции отношения (табл. 2):

 

Таблица 2 Операции отношения

Оператор Функция Название
= = eq логическая эквивалентность
~ = ne логическое неравенство
< lt меньше
>= gt больше или равно
<= le меньше или равно
> gt больше

 

Данные операторы выполняют поэлементное сравнение векторов или матриц одинакового размера и возвращают значение 1 (True), если элементы идентичны, и значение 0 (False) в противном случае. Например:

>> eq(2,2)

ans =

1

>> 2==2

ans =

1

>> ne(l,2)

ans =

1

>> 2 ~= 2

ans =

0

>> le(5,3)

ans =

0

Логические операции MATLAB показаны в табл. 3.

 

Таблица 3 Логические операции

Оператор Функция Название
& and Логическое И
| or Логическое ИЛИ
~ not Логическое НЕ
  xor Исключающее ИЛИ
  any Верно, если хотя бы один элемент не равен нулю
  all Верно, если все элементы вектора не равны нулю

 

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

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

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

Работа логических функций поясняется приведенными ниже примерами:

>> А=[1 2 3];

>> B=[1 0 0];

>> and(A,B)

ans =

1 0 0

>> any(A)

ans =

1

 

При составлении выражений следует помнить, что в MATLAB строчные и прописные буквы воспринимаются по-разному.

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

 

В систему MATLAB встроено большое количество элементарных функций.

В табл. 4 пpивeден списoк основных элeмeнтapных функций.

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

>> help sin

Количество функций может быть легко расширено с использованием определений пользователя системы (так называемых внешних фaйлов, или файлов с расширением .m).

В любой момент можно вывести значение переменной в командное окно, для чего следует набрать имя переменной в командной строке и нажать <Enter>, либо вызвать функцию disp:

>> disp(c)

2.0451


 

Таблица 4 Элементарные функции

Название Обозначение
мoдуль abs(X)
квaдpaтный кopeнь sqrt(X)
дeйствитeльнaя чaсть real(X)
кoмплeкснaя чaсть imag(X)
oкpуглeниe дo ближaйшeгo цeлoгo round(X)
oкpуглeниe в стopoну нуля fix(X)
oкpуглeниe пo нeдoстaтку floor(X)
oкpуглeниe пo избытку ссel(X)
функция «знак» (1, x>0; 0, x=0; -1, x<0) sign(X)
остaтoк rem(X,Y)
синус sin(X)
кoсинус сos(X)
тaнгeнс tan(X)
аpксинус asin(X)
аpккoсинус aсos(X)
аpктaнгeнс atan(X)
чeтыpехквaдpaнтный apктaнгeнс atan2(X)
гипepбoличeский синус sinh(X)
гипepбoличeский кoсинус сosh(X)
гипepбoличeский тaнгeнс tanh(X)
экспoнeнтa пo oснoвaнию e exp(X)
нaтуpaльный лoгapифм log(X)
дeсятичный лoгapифм log10(X)
лoгapифм по основанию 2 Log2(X)
два в степени x pow(x)

 


1.2. Работа с векторами

 

При вводе вектора его элементы отделяются друг от друга пробелами или запятыми:

x = [1 2 3 4] или x = [1,2,3,4].

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

x = nz : h : kz

где nz – начальное значение, kz – конечное значение, h – шаг.

Если шаг не указан, то он полагается равным 1. Например, выpaжeниe:

>> x=1 : 5

сoздaет вeктop-стpoку, сoдepжaщую числa oт 1 дo 5:

x=

1 2 3 4 5

При создании вектора может быть использован произвольный шаг, заданный выражением:

>> y = 0 : pi / 4 : pi

что дает:

>> y =

0 0.7854 1.5708 2.3562 3.1416

Вoзмoжно oтpицaтeльное значение шага:

>> z = 6:-1:1

что дает:

>> z =

6 5 4 3 2 1

Для получения размера вектора (количества его компонентов) предназначена функция length, вектор указывается в качестве ее входного аргумента:

>> L=length(z)

L =

Под длиной вектора размером n понимается эвклидова норма:

>> z=[6 5 4 3 2 1];

>> norm(z)

ans =

9.5394

Тот же результат можно, очевидно, получить с помощью команды:

>> sqrt(sum(z.^2))

ans =

9.5394

Векторы с одинаковым числом элементов можно складывать и вычитать:

>> a=[1 3 5 6];

>> b=[5 7 8 3];

>> c=a+b

c =

6 10 13 9

>> c=a-b

c =

-4 -4 -3 3

Сложение и вычитание вектор-строки и вектор-столбца или векторов разных размеров приводит к ошибке.

Можно транспонировать вектор (т.е. сделать строку столбцом или столбец строкой):

>> b'

ans =

Операция * означает матричное умножение:

>> b'*a

ans =

5 15 25 30

7 21 35 42

8 24 40 48

3 9 15 18

>> a*b'

ans =

Скалярное произведение векторов A и B одинаковой длины n вычисляется по формуле:

Скалярное произведение векторов имеет специальное обозначение:

>> c=dot(a,b)

c =

Очевидно, что dot(a,b) = dot(b,a).

Скалярное произведение может быть вычислено, как произведение длин векторов на косинус угла между ними:

Эта формула позволяет вычислить угол межу векторами:

Например:

>> a=[1 3 5 6];

>> b=[5 7 8 3];

>> alfa=acos(a*b'/(norm(a)*norm(b)))

alfa =

0.6055

Операция .* предназначена для покомпонентного умножения векторов:

>> c=a.*b

c =

5 21 40 18

Векторное произведение двух векторов возвращает функция cross. Для ее использования два вектора должны иметь длиной в три компонента:

>> a=[1 3 5]

a =

1 3 5

>> b=[5 7 8]

b =

5 7 8

>> c=cross(a,b)

c =

-11 17 -8

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

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

>> b=[0 0.5 1];

>> sin(b)

ans =

0 0.4794 0.8415

Для обработки элемента вектора необходимо указать его индекс в круглых скобках. Например:

>> b(1)+b(2)+b(3)

ans =

1.5000

Обращение к последнему элементу вектора можно произвести с использованием end, т.е. обращения b(end) и b(length(v)) приводят к одинаковым результатам.

Указание номеров элементов вектора можно использовать и при вводе векторов, последовательно добавляя новые элементы (не обязательно в порядке возрастания их номеров). Команды:

>> s=2;

>> s(2)=3;

>> s(4)=7;

приводят к образованию вектора:

>> s

s =

2 3 0 7

Для ввода первого элемента не обязательно указывать его индекс. Следующие операторы присваивания приводят к автоматическому увеличению длины вектора, а пропущенные элементы получают значение ноль.

Индексация двоеточием служит для указания диапазона подряд идущих индексов. Например:

>> s=[2 2 3 4 4 7 7 7];

>> s1=s(3:6)

s1 =

3 4 4 7

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

>> s1=sin(s(3:6))

s1 =

0.1411 -0.7568 -0.7568 0.6570

Для выбора элементов вектора, не идущих подряд, можно использовать индексный вектор:

>> ind=[1 2 6];

s1=s(ind)

>> s1 =

2 2 7

Можно конструировать вектора из элементов имеющихся векторов. Например:

>> a=[1 2 3 4];

>> b=[6 7 8 9];

>> c=[a(1:3) b(3:4)]

c =

1 2 3 8 9

Основные функции обработки векторов представлены в табл. 5


Таблица 5 Основные функции обработки векторов

Функция Назначение
s=sum(A) Сумма всех элементов вектора A
p=prod(A) Произведение всех элементов вектора A
m=max(A) Нахождение максимального элемента вектора A
[m,k]=max(A) Второй выходной аргумент k содержит номер максимального элемента в векторе A
m=min(A) Нахождение минимального элемента вектора A
[m,k]=min(A) k содержит номер минимального элемента A
m=mean(A) Вычисление среднего арифметического вектора A
A1=sort(A) Упорядочение элементов вектора по возрастанию
[A1,ind]=sort(A) ind является вектором из целых чисел от 1 до length(A), который соответствует проделанным перестановкам

 

Примеры использования функций обработки векторов:

>> A=[2 4 6 3];

>> sum(A)

ans =

>> prod(A)

ans =

>> max(A)

ans =

>> [n,m]=max(A);

>> [n,m]

ans =

6 3

>> B=sort(A)

B =

2 3 4 6


1.3. Работа с матрицами

 

Строки матрицы отделяются при вводе друг от друга точкой с запятой. Например:

>> x = [4 6 8; 1 45 23]

x =

4 6 8

1 45 23.

Размеры матрицы возвращает функция size:

>> s=size(x)

s =

2 3

Сложение и вычитание матриц одинаковых размеров производится с использованием знаков +, -. Например:

>> A = [4 6 8; 1 45 23];

>> B = [1 2 3; 4 5 6];

>> A+B

ans =

5 8 11

5 50 29

Звездочка * служит для вычисления матричного произведения, причем соответствующие размеры матриц должны совпадать, например:

>> C=A*B'

C =

40 94

160 367

(Апостроф ' обозначает транспонирование матрицы).

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

>> C(2,2)

ans =

Индексация двоеточием позволяет получить часть матрицы — строку, столбец или блок, например:

>> C(2,1:2)

ans =

160 367

Выделение блока, состоящего из нескольких строк и столбцов, требует индексации по строке и столбцу. Например:

>> A=[1 2 3 4; 2 3 4 4; 5 5 6 6; 1 1 1 1]

A =

1 2 3 4

2 3 4 4

5 5 6 6

1 1 1 1

>> B=A(2:3,2:3)

B =

3 4

5 6

Всю строку или весь столбец можно выделять просто с помощью двоеточия:

>> C=A(:,2)

C =

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

>> K=A(:,2);

>> A(:,2)=A(:,4);

>> A(:,4)=K;

>> A

A =

1 4 3 2

2 4 4 3

5 6 6 5

1 1 1 1

MATLAB поддерживает операцию вычеркивания строк и столбцов из матрицы. Для этого надо удаляемому блоку присвоить пустой массив, задаваемый квадратными скобками. Например:

>> A

A =

1 4 3 2

2 4 4 3

5 6 6 5

1 1 1 1

>> A(1:2,:)=[]

A =

5 6 6 5

1 1 1 1

Индексация двоеточием позволяет легко строить матрицы, имеющие определенную структуру. Например, чтобы создать нулевую матрицу, заполненную единицами «крестом», можно выполнить команды:

>> A(1:5,1:5)=0;

>> A(3,1:5)=1;

>> A(1:5,3)=1

A =

0 0 1 0 0

0 0 1 0 0

1 1 1 1 1

0 0 1 0 0

0 0 1 0 0

В табл. 6 указаны стандартные функции для создания матриц. Во всех функциях (кроме diag) допустимо указывать размеры матрицы следующими способами:

- двумя числами через запятую;

- одним числом, результат — квадратная матрица;

- вектором из двух элементов, равных числу строк и столбцов.

 


Таблица 6 Функции для создания матриц

Функция Назначение Пример использования
zeros Нулевая матрица F=zeros(4,5) F=zeros(3) F=zeros([3 4])
eye Единичная прямоугольная матрица (единицы расположены на главной диагонали) I=eye(5,8) I=eye(5) I=eye([5 8])
ones Матрица, целиком состоящая из единиц E=ones(3,5) E=ones(6) E=ones([2 5])
rand Матрица, элементы которой — случайные числа, равномерно распределенные на интервале (0,1) R=rand(5,7) R=rand(6) R=rand([3 5])
randn Матрица, элементы которой — случайные числа, распределенные по нормальному закону с нулевым средним и дисперсией равной единице N=randn(5,3) N=randn(9) N=randn([2 4])
diag 1) диагональная матрица, элементы которой задаются во входном аргументе — векторе 2) диагональная матрица со смещенной на k позиций диагональю (положительные k — смещение вверх, отрицательные — вниз), результатом является квадратная матрица размера length(v)+abs(k) 3) выделение главной диагонали из матрицы в вектор 4) выделение k-ой диагонали из матрицы в вектор D=diag(v)     D=diag(v,k)   d=diag(A)   d=diag(A,k)

 


Например, пусть требуется создать матрицу:

>> x=[36 72 45 78];

>> A=diag(x)

A =

36 0 0 0

0 72 0 0

0 0 45 0

0 0 0 78

>> y=[1 1 1];

>> B=diag(y,1)

B =

0 1 0 0

0 0 1 0

0 0 0 1

0 0 0 0

>> z=[5 5 5];

>> C=diag(z,-1)

C =

0 0 0 0

5 0 0 0

0 5 0 0

0 0 5 0

>> A+B+C

ans =

36 1 0 0

5 72 1 0

0 5 45 1

0 0 5 78

С матрицами могут производиться поэлементные вычисления, при этом необходимо следить за совпадением размеров матриц. Поэлементные операции указаны в табл. 7.


Таблица 7 Поэлементные операции над матрицами

Обозначение Операция
A.*B поэлементное умножение матриц
A./B поэлементное деление матриц
A.^n поэлементное возведение в степень (n — число)
A.^B возведение элементов матрицы A в степени, равные соответствующим элементам матрицы B
A.' транспонирование матрицы (для вещественных матриц A' и A.' приводят к одинаковым результатам)

 

Разворот матрицы на 90o против часовой стрелки осуществляет функция rot90. Например:

>> C

C =

0 0 0 0

5 0 0 0

0 5 0 0

0 0 5 0

>> rot90(C)

ans =

0 0 0 0

0 0 0 5

0 0 5 0

0 5 0 0

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

В MATLAB определены многие матричные функции, например, sqrtm предназначена для вычисления квадратного корня. Например:

>> A=[2 3; 4 5]

A =

2 3

4 5

>> B=sqrtm(A)

B =

0.8127 + 0.3663i 1.0718 - 0.2083i

1.4290 - 0.2778i 1.8845 + 0.1580i

>> B*B

ans =

2.0000 - 0.0000i 3.0000 - 0.0000i

4.0000 - 0.0000i 5.0000 - 0.0000i

Все функции обработки векторов, приведенные в табл. 5, могут быть применены и к матрицам. Основное отличие состоит в том, что эти функции работают с двумерными массивами по столбцам, например, функция sum суммирует элементы каждого из столбцов и возвращает вектор-строку, длина которой равна числу столбцов исходной матрицы:

>> A

A =

2 3

4 5

>> sum(A)

ans =

6 8

Если в качестве второго входного аргумента sum указать 2, то суммирование произойдет по строкам:

>> A

A =

2 3

4 5

>> sum(A,2)

ans =

Для вычисления суммы всех элементов матрицы требуется дважды применить sum:

>> sum(sum(A))

ans =

Аналогично можно найти максимальный элемент матрицы:

>> A=[1 2 3 6; 3 7 2 8; 5 89 54 2];

>> max(A)

ans =

5 89 54 8

>> max(max(A))

ans =

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

>> A=[1 0 5;4 0 3;4 9 3];

>> B=[0 0 99;0 0 1;43 1 1];

>> X=[A B]

X =

1 0 5 0 0 99

4 0 3 0 0 1

4 9 3 43 1 1

 

 


1.4. Функции обработки множеств

 

Множество — фундаментальное понятие математики, не имеющее четкого определения. Под множеством подразумевается совокупность некоторых объектов, например - элементов вектора.

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

Основные операции над множествами представлены в табл.8.

 

Таблица 8 Операции над множествами

Обозначение Операция
intersect(A,B) Возвращает пересечение множеств для двух векторов A и B (общие элементы A и B). Результирующий вектор отсортирован по возрастанию. Если входные массивы не являются векторами, то они рассматриваются как совокупность векторов-столбцов A=A(:) или A=A(:);
intersect(A,B, 'rows') Возвращает строки, общие для A и B , когда A и B - матрицы с одинаковым числом столбцов
[C,iA,iB] = intersect(A,B) Возвращает вектор-столбец индексов iA и iB. но так, что C = A(iA) и C = B(iB) (или C = A(iA.:) и C = B(iB.:)).
ismember(A,S) Возвращает вектор той же длины, что и исходный A, содержащий логические единицы на месте тех элементов A, которые принадлежат множеству S, и логические нули на месте тех элементов A, которые не принадлежат множеству S;
ismember (А, S,'rows') Возвращает вектор, содержащий логические единицы там, где строки матрицы А являются также строками матрицы S, и логические нули в остальных позициях. А и S должны быть матрицами с одним числом столбцов.
setdiff(A,B) Возвращает разность множеств (элементы A, которые не содержатся в B). Результирующий вектор сортируется по возрастанию

Продолжение табл. 8

setdiff(A,B, 'rows') Возвращает те строки из A, которые не содержатся в B. Матрицы A и B должны иметь одинаковое число столбцов;
[С,i] = setdiff(...) Возвращает также вектор индексов 1, такой что C = A(i) или C = A(i,;).
setxor(A,B) Исключающее ИЛИ для векторов A и B. Результирующий вектор отсортирован;
setxor(A,B, 'rows') Возвращает строки, которые не являются пересечениями матриц A и B. Матрицы A и B должны иметь одинаковое число столбцов
[C,iA,iB] = setxor(...) Возвращает также векторы индексов iA и iB. C является отсортированной комбинацией элементов C = A(iA) и C = B(iB) или для комбинаций строк C = A(iA,:) и C = B(iB.;)
union(A,B) Возвращает вектор объединенных значений из A и B без повторяющихся элементов. Результирующий вектор сортируется в порядке возрастания.
union(A,B, 'rows') Возвращает объединенные строки из A и B, не содержащие повторений (A и B — это матрицы с одинаковым числом столбцов)
unique(A) Возвращает значения из A, не содержащие повторений. Результат сортируется в порядке возрастания. Не векторный массив считается вектор - столбцом а=а(: )
unique(A, 'rows') возвращает уникальные строки A

 

Рассмотрим примеры использования операций над множествами.

Пересечение векторов:

>> A=[2 4 6 3 5];

>> B=[8 4 2 5 3];

>> intersect(A,B)

ans =

2 3 4 5

Поиск общих строк двух матриц:

 

>> X=[1 2 3 4; 3 12 34 3; 11 22 6 7; 98 20 3 1]

X =

1 2 3 4

3 12 34 3

11 22 6 7

98 20 3 1

>> Y=[11 12 13 4; 3 12 34 3; 11 22 6 7];

>> Y=[11 12 13 4; 3 12 34 3; 11 22 6 7]

Y =

11 12 13 4

3 12 34 3

11 22 6 7

>> intersect(X,Y, 'rows')

ans =

3 12 34 3

11 22 6 7

Поиск общих элементов и соответствующих им индексов в двух векторах:

>> A=[2 4 6 3 5];

>> B=[8 4 2 5 3];

>> [C,iA,iB] = intersect(A,B)

C =

2 3 4 5

iA =

1 4 2 5

iB =

3 5 2 4

Проверка вхождения элементов одного множества (вектора) в другое множество (вектор):

>> ismember(A,B)

ans =

1 1 0 1 1

>> ismember(B,A)

ans =

0 1 1 1 1

Разность множеств:

>> setdiff(A,B)

ans =

>> setdiff(B,A)

ans =

Объединение векторов:

>> union(A,B)

ans =

2 3 4 5 6 8

Поиск строк, содержащихся только в одной из двух матриц:

>> X=[1 2 3 4; 3 12 34 3; 11 22 6 7];

>> Y=[11 12 13 4; 3 12 34 3; 11 22 6 7];

>> setdiff(X,Y,'rows')

ans =

1 2 3 4

>> setdiff(Y,X,'rows')

ans =

11 12 13 4

Поиск строк, которые не являются пересечением двух матриц:

>> setxor(X,Y, 'rows')

ans =

1 2 3 4

11 12 13 4

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

>> union(X,Y, 'rows')

ans =

1 2 3 4

3 12 34 3

11 12 13 4

11 22 6 7


1.5. Задания для самостоятельной работы

 

1.5.1. В соответствии с заданным преподавателем номером варианта (табл.8), рассчитать в командной строке MATLAB значение выражения при x=0.1 y=0.5. Проверить результат в среде MATHCAD.

 

Таблица 8

Функция Функция
1. 9.
2. 10.
3. 11.
4. 12.
5. 13.
6. 14.
7. 15.
8. 16.

1.5.2. В соответствии с номером варианта, заданным преподавателем, для векторов А и В (см. табл. 9) выполнить следующие операции:

- найти длину векторов А и В;

- найти угол между векторами А и В;

- вычислить сумму, разность и скалярное произведение А и В;

- образовать вектор С, являющийся сцеплением (конкатенацией) векторов А и В, определить его максимальный и минимальный элементы и поменять их местами;

- упорядочить вектор Спо возрастанию и убыванию;

- переставить элементы вектора Св обратном порядке и записать результат в новый вектор;

- найти векторное произведение векторов X=[a1, a3, a8] и Y=[b3, b5, b6]

Таблица 9

А В
1. [-0.3 2.7 6.4 1.3 -1.2 3.5 2.3 -5.2] [-6 7.1 2.0 3.7 1.6 -1.7 -6.6 6.3]
2. [-4.8 -1.6 -1.0 0.7 4.0 5.8 4.6 -8.0] [-1.1 -1.9 7.1 -7.1 6.8 7.8 0.6 1.6]
3. [1.0 -6.9 -5.6 -6.6 1.7 3.7 0.6 1.8] [7.1 -7.2 3.7 4.4 0.4 -6.0 -6.4 -5.7]
4. [-2.4 3.3 -0.1 3.6 7.4 -2.8 0.3 2.2] [6.3 0.6 4.3 -3.7 -7.0 3.7 3.7 8.0]
5. [2.4 -5.9 -6.5 -0.9 6.9 -1.8 1.8 0.2] [-0.0 2.0 -1.5 8.5 -4.0 -3.0 -6.2 0.0]
6. [5.3 6.2 -8.1 6.2 -4.0 -2.3 -4.4 -0.2] [8.5 -1.5 -4.9 -4.6 -2.3 -5.3 5.5 2.3]
7. [1.2 -4.1 -0.2 -0.8 -2.2 1.8 3.3 -6.1] [-1.5 2.2 1.0 -4.3 -0.0 -1.2 -1.5 2.4]
8. [6.6 -5.0 2.8 -2.3 3.2 1.9 -1.1 2.8] [-1.0 3.2 4.2 -6.4 1.9 -6.5 -6.2 -2.1]
9. [-1.9 0.4 -1.2 -4.2 3.2 -4.8 -4.0 -2.1] [-2.8 -4.2 -1.4 2.2 -2.2 8.2 0.0 -0.1]
10. [0.9 1.8 -3.2 -3.2 8.3 6.0 -0.2 2.6] [0.6 -0.4 -6.9 -2.2 1.6 3.2 -3.2 0.4]
11. [-9.0 2.7 6.4 1.0 -1.2 0.5 2.0 -5.2] [6.7 -6.2 3.6 4.4 0.4 -6.0 -6.4 -5.6]
12. [-4.8 -1.6 -1.9 9.7 4.9 5.8 4.6 -8.9] [6.3 0.6 4.3 -3.6 -6.0 3.6 3.6 8.0]
13. [1.9 -6.9 -5.6 -6.1 1.7 0.7 9.6 1.8] [-0.0 2.0 -7.5 8.5 -4.0 -3.0 -6.2 0.0]
14. [-2.4 1.0 -9.1 0.6 7.4 -2.8 9.0 2.2] [8.5 -7.5 4.9 -4.6 2.3 -5.3 5.5 2.3]
15. [2.4 -5.9 -6.5 -9.9 6.9 -1.8 1.8 9.2] [-7.5 -2.2 7.0 -4.3 -0.0 7.2 -7.5 2.4]

 


1.5.3. В соответствии с номером варианта, заданным преподавателем (см. табл. 10), вычислить значения функции на отрезке [-2,2] в 8 точках, равномерно отстоящих друг от друга.

 

Таблица 10

Функция Функция
1. 9.
2. 10.
3. 11.
4. 12.
5. 13.
6. 14.
7. 15.
8. 16.

1.5.4. Заданы матрицы:

В соответствии с номером варианта, заданным преподавателем, вычислить значения выражения из табл. 11. Проверить результат с помощью MathCad.

 

Таблица 11

Выражение

 


 

1.5.5. Используя функции создания стандартных матриц, а также функции транспонирования, поворота или вычеркивания, в соответствии с номером варианта, заданным преподавателем, построить матрицу (см. табл. 12). Вычислить для построенной матрицы заданное выражение.

 

Таблица 12

Матрица Выражение
1.
2.
3.
4.
5.
6.

Продолжение табл. 12

7.
8.
9.
10.
11.
12.
13.
14.
15.

1.5.6. В соответствии с вариантом, заданным преподавателем (см. табл. 13), выполнить для двух векторов допустимые операции обработки множеств.

 

Таблица 13

А В
1. [-3 7 6 3 -1 5 2 -5] [3 9 6 -3 -1 5 6 -5]
2. [-8 -6 -1 7 4 8 4 -8] [-2 -6 -4 7 1 8 4 2]
3. [ 1 -6 -5 -6 7 7 6 1] [ 2 6 -3 -6 7 7 -6 1]
4. [-4 3 1 6 4 -2 3 2] [-4 2 6 1 4 -7 3 1]
5. [ 4 9 5 9 6 -1 1 0] [ 4 6 5 6 -9 -1 1 2]
6. [5 -6 -1 2 -4 -3 4 2] [15 -3 -1 2 -4 -6 1 12]
7. [2 -4 -2 8 2 1 3 -6] [22 -1 -1 7 2 1 3 -2]
8. [6 -5 2 3 2 1 -1 2] [1 -5 2 -3 2 11 -1 3]
9. [-9 4 -1 -4 3 -4 -4 -2] [8 -2 7 -4 3 -4 -1 -2]
10. [9 8 2 -3 8 6 -2 6] [6 2 -2 3 1 6 -2 6]
11. [-9 2 6 1 -1 5 2 -5] [-3 1 6 1 -4 5 7 -5]
12. [-4 -1 9 7 9 8 6 9] [-4 2 9 3 9 4 6 1]
13. [9 -6 -5 1 1 7 6 -8] [9 -3 -5 1 3 7 8 -8]
14. [-2 1 -9 6 7 -2 9 2] [-1 1 -1 6 8 -2 9 2]
15. [2 -5 5 9 9 -1 1 9] [2 -2 -5 1 9 -1 1 1]

 


2. Визуализация данных в MATLAB

2.1. График функции одной переменной

 

MATLAB обладает высокоуровневой графикой, позволяющей пользователю с минимальными затратами на программирование выполнять визуализацию функций от двух или трех переменных. В MATLAB имеется также возможность использования низкоуровневой графики (дескрипторного метода), дающего пользователю максимально широкий набор возможностей. Ниже рассмотрена высокоуровневая графика.

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

Каждая функция строится путем интерполяции между набором точек, в которых вычислено ее значение, поэтому качества графика зависит от количества точек области определения.

Рассмотрим простой пример – построение графика функции синус. Для этого требуется задать набор точек по оси абсцисс:

>> x=[-pi:0.05:pi];

Затем нужно поэлементно вычислить значение функции sin для каждого элемента вектора x и записать результат в вектор y:

>> y=sin(x);

И, наконец, для построения графика нужно использовать какую-либо из графических функций MATLAB, например - функцию plot:

>> plot(x,y)

На экране будет получен график функции y=sin(x) (рис. 1).

При построении графика масштаб выбирается автоматически – в зависимости от диапазона значений переменных. Пользователь имеет возможность самостоятельно выбрать масштаб по любой из осей с помощью команды:

>> axis( [ xmin, xmax, ymin, ymax ] )

Заметим, что график появился в графическом окне Figure 1. Если, не убирая с экрана дисплея первое графическое окно, ввести и исполнить две команды:

>> z=cos(x);

>> plot(x,z)

То получим новый график функции в том же графическом окне (а старый график пропадет).


Рис. 1 - График функции y=sin(x)

 

Рис. 2 - Изображение двух функций в одном графическом окне


Если же нужно, чтобы в окне были оба графика, то нужно перед командой plot(x,z) выполнить команду:

>>hold on

В результате будет получено изображение, показанное на рис. 2.

Такого же эффекта можно добиться при использовании команды:

>>plot(x, y, x, z)

Однако в этом случае графики рисуются разными цветами.

 

 

2.2. Выбор атрибутов графика

 

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

>>plot( x , y , s)

Всего в дополнительном аргументе может быть заполнено три позиции, соответствующие цвету, типу маркеров и стилю линии. При этом порядок позиций может быть произвольный, допустимо указывать только один или два параметра.

Варианты обозначений параметров приведены в табл. 2.1.

Например, команда:

>> plot(x,y,'ro--')

приведет к построению графика красной штриховой линией, размеченной круглыми маркерами. Другая команда:

>> plot( x, y, 'r-', x, y, 'k*' )

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

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

>> plot( x1, y1, s1, x2, y2, s2, … )


 

 

Таблица 2.1 - Сокращения для цвета, маркеров и стиля линий

 

Выбор типа линии
- непрерывная
-- штриховая
: пунктирная
-. штрих-пунктирная
Выбор цвета линии
c голубой
m фиолетовый
y жёлтый
r красный
g зелёный
b синий
w белый
k чёрный
Выбор типа точки
. точка
+ плюс
* звёздочка
o кружок
x крестик

 

Области определения каждой из функций не обязательно должны совпадать. Например, пусть требуется построить график кусочно-заданной функции:

(1)

Для этого нужно выполнить команды:

>> x1=[-pi : pi/50 : 0];

>> y1=sin(x1);

>> x2=[0 : pi/50 : pi];

>> y2=sin(2*x2);

>> x3=[pi : pi/50: 2*pi];

>> y3=sin(4*x3)

>> plot(x1,y1,'-m',x2,y2,'+r',x3,y3,'--ok')

Результат выполнения команды показан на рис. 3.

 

Рис. 3 - График кусочно-заданной функции

 

Различные участки кусочно-заданной функции отображаются здесь различными цветами.

Можно было бы построить график функции (1) и по-другому, если после определения x1, y1, x2, y2, x3,y3 собрать общий вектор x для значений аргумента и общий вектор y для значений функции y(x), а затем построить график:

>> x=[x1 x2 x3];

>> y=[y1 y2 y3];

>> plot(x,y)


2.3. Использование нескольких графических окон

 

Часто возникает необходимость строить графики в разных графических окнах, поскольку графики могут иметь сильно отличающиеся масштабы. Решить эту проблему можно двумя способами:

- С помощью использования несколько подокон в одном графическом окне;

- С использованием разных графических окон.

Рассмотрим первый вариант. Он реализуется с помощью функции subplot, которая имеет три числовых аргумента, первый из которых равен числу рядов подобластей, второе число равно числу колонок подобластей, а третье число - номеру подобласти (номер отсчитывается вдоль рядов с переходом на новый ряд по исчерпанию).

Например, для ранее выполненных вычислений с функциями sin(x), sin(2x) и sin(4x) можно построить три отдельные графические подобласти, расположенные горизонтально, с помощью команд (рис. 4):

>> subplot(1,3,1);

>> plot(x1,y1)

>> subplot(1,3,2);

>> plot(x2,y2)

>> subplot(1,3,3);

>> plot(x3,y3)

Для вертикального расположения окон необходимо выполнить команды (рис. 5):

>> subplot(3,1,1);

>> plot(x1,y1)

>> subplot(3,1,2);

>> plot(x2,y2)

>> subplot(3,1,3);

>> plot(x3,y3)

Для вызова нового графического окна надо использовать команду figure. Например, чтобы построить график функции tan(x) в новом графическом окне, надо выполнить команды:

>> w = tan( x );

>> figure;

>> plot( x , w )


Рис.4 - Горизонтальное расположение трех графических окон

 

 

Рис.5 - Вертикальное расположение трех графических окон

 


 

С помощью команды plot легко строить графики параметрически заданных функций. Например, пусть требуется получить график кардиоиды:

Для решения этой задачи нужно задать вектор t, затем в векторы x, y занести значения x(t), y(t) и построить график:

>> t=[0 : pi/50: 2*pi];

>> x=4*cos(t)-2*cos(2*t);

>> y=4*sin(t)-2*sin(2*t);

>> plot(x,y)

График показан на рис. 6.

Рис. 6 - Построение графика функции, заданной параметрически

 

Построение графиков в полярных координатах также не вызывает проблем. Например, если нужно построить график функции y = |sin(x)| в полярных координатах, то можно использовать команды:

>> x = -pi : 0.01 : pi;

>> y = sin(x);

>> polar(x , abs(y) )

Соответствующий график показана рис. 7.

Рис. 7 - Построение графика функции в радиальных координатах

 

Для оформления графиков применяют функции xlabel, ylabel, title, text, grid и legend.

Функция xlabel предназначена для проставления названия горизонтальной оси, функция ylabel - то же для вертикальной оси (надписи ориентированы вдоль осей координат).

Разместить надпись в произвольном месте рисунка можно с помощью функции text.

Общий заголовок для графика проставляется функцией title.

С помощью функции grid можно нанести на график сетку.

Рассмотрим пример оформления графика функции sin(x).

>> x=[-pi:0.05:pi];

>> y=sin(x);

>> plot(x,y)

>> title( 'Function sin(x) graph' );

>> xlabel( 'x coordinate' ); ylabel( 'sin(x)' );

>> text( 0.1, 0.1, '\leftarrowsin(x)' ); grid on;

В последней команде специальные символы вводятся внутри текста после символа \ (обратная косая черта).

Результат представлен на рис. 8.

Убрать сетку с поля графика можно с помощью команды grid off.

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

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

 

Таблица 2.2 Выбор расположения легенды графика

Значение параметра Положение легенды
–1 вне графика в правом верхнем углу окна
выбирается оптимальное положение
в верхнем правом углу графика (по умолчанию)
в верхнем левом углу графика
в нижнем левом углу графика
в нижнем правом углу графика

 

Рассмотрим пример использования функции legend.

>> x=[-pi:0.05:pi];

>> y=sin(x);

>> z=cos(x);

>> plot(x,y, '-',x,z,'--')

>> legend('sin(x)','cos(x)',0)

Результат представлен на рис. 9.

 

Рис.8 - Пример оформления графика.

 

Рис.9 - Пример использования функции legend.


В MATLAB имеются графические функции, предназначенные для отображения графиков в логарифмическом и полулогарифмическом масштабах:

· loglog (логарифмический масштаб по обеим осям);

· semilogx (логарифмический масштаб только по оси абсцисс);

· semilogy (логарифмический масштаб только по оси ординат).

Входные аргументы этих функций задаются так же, как и при использовании plot. Например:

>> x=[1: 1000];

>> y=x;

>> semilogx(x,y)

Результат показан на рис. 10.

Для сравнения поведения двух функций со значениями разных порядков может быть использована функция plotyy. Например:

>> x=[-pi:0.05:pi];

>> y=sin(x);

>> z=20*cos(x)



<== предыдущая лекция | следующая лекция ==>
Блок-схеми алгоритмів | Otherwise


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.197 сек.