Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



Навчально-методичний посібник до виконання лабораторних робіт з дисципліни «Основи проектування баз знань»

Навчально-методичний посібник до виконання лабораторних робіт з дисципліни «Основи проектування баз знань»




Сторінка4/4
Дата конвертації03.06.2017
Розмір0.96 Mb.
ТипНавчально-методичний посібник
1   2   3   4
, ЎЄ для переміщення в межах командного рядка. Пересування по екрану (тільки для перегляду команд, а не для редагування) виконується клавішами
,
чи вертикальної полоски скролінга. Починаючи з версії 6.0 в середовище MatLab включено вікно Command History для швидкого переходу по історії команд. В любий момент можна вивести значення змінної в командне вікно, для чого слід набрати ім’я змінної в командному рядку і натиснути , або викликати функцію disp:

>> disp(c)

2.0451

Перегляд поточний змінних робочого середовища відбувається при допомозі команди whos.

Стільни́ця (англ. desktop metaphor) - це метафора інтерфейсу, яка є таким собі набором уніфікованих понять, що використовуються в графічному інтерфейсі користувача, аби спростити взаємодію користувачів із комп'ютером.

Припустимо, що попереднім змінним a і b були присвоєнні значення:



>> a=-1.34;

>> b=2.98 3.86i;

Викличте команду whos, вказав через пропуски імена змінних

>> whos a b

У командне вікно виводиться таблиця, приведена нижче. В стовпчику Class вказаний тип змінної, в Bytes ЎЄ число байт, виділених під зберігання значення, а Size містить інформацію про розміри. Після таблиці розміщена стрічка з вказаним сумарного об’єму пам’яті в байтах.

Name Size Bytes Class

a 1x1 8 double array

b 1x1 16 double array (complex)

Grand total is 2 elements using 24 bytes
§ 2. Вектор-рядки і вектор-стовпці

Масиви є одним з найпоширеніших способів зберігання даних і використовуються у всіх мовах програмування і обчислювальних пакетах. До особливостей роботи з масивами в MatLab відноситься те, що одновимірний масив може бути вектор-рядком або вектор-стовпця. Якщо спосіб представлення масиву важливий, то ми підкреслюватимемо, про рядок або про стовпець йдеться. Якщо ж це несуттєво, то говоритимемо про вектор-рядки і вектор-стовпців просто як про вектори або одновимірні масиви (одновимірний масив в MatLab є двовимірний, у якого один з розмірів рівний одиниці).

Для введення вектора використовуються квадратні дужки, елементи вектора відокремлюються один від одного:

крапкою з комою, якщо потрібно отримати вектор-стовбець;

пропуском або комою, якщо необхідно розмістити елементи у вектор-рядку.

Занесіть вектор-стовпці і вектор-рядки

µ §µ §µ §µ §у відповідні масиви, набравши в командному рядку:

>> a=[0.2; -3.9; 4.6];

>> b=[7.6; 0.1; 2.5];

>> u=[0.1 0.5 -3.7 8.1];

>> v=[5.2 9.7 3.4 ЁC0.2];

Крапка з комою в кінці кожного рядка поставлена для придушення висновку на екран, вона ніяк не пов'язана з крапкою з комою, яка є роздільником елементів у вектор-стовпцях. Виведіть в командне вікно значення змінних а, b, u, v і побачите, як MatLab відображає вміст вектор-рядків і вектор-стовпців. Отримаєте інформацію про змінних за допомогою команди whos. У попередньому параграфі було відмічено, що числа зберігаються в двовимірних масивах, кожний з розмірів яких рівний одиниці. Вектори також представляються двовимірними масивами, один з розмірів яких рівний одиниці.

Для отримання довжини вектора призначена функція length, вектор вказується як її вхідний аргумент:

>> L=length(a)

L =

3

Вектор-стовпці з однаковим числом елементів можна складати і віднімати один з одного за допомогою знаків " " і "ЁC".

Нор́ма - це функція, що задана на лінійному просторі і є узагальненням поняття довжини вектора.

Аналогічне вірно і для вектор-рядків:



>> с=a b;

>> w=u-v;

Складання і віднімання вектор-рядка і вектор-стовпця або векторів різних розмірів приводить до помилки. Операція * призначена для множення векторів за правилом матричного множення. Оскільки MatLab розрізняє вектор-рядки і вектор стовпці, то допустимо або множення вектор-рядка на такій же по довжині вектор-стовпець (скалярний добуток), або множення вектор-стовпця на вектор-рядок (зовнішній добуток, в результаті якого виходить прямокутна матриця). Скалярний добуток двох векторів повертає функція dot, а векторне ЎЄ cross:

>> s=dot(а,b)

>> c=cross(а,b)

Зрозуміло, векторний добуток визначений тільки для векторів з трьох елементів.

Ве́кторний до́буток - білінійна, антисиметрична операція на векторах у тривимірному просторі. На відміну від скалярного добутку векторів евклідового простору, результатом векторного добутку є вектор, а не скаляр.

Скалярний добуток (англ. dot product, англ. scalar product, нім. Skalarprodukt, рос. скалярное произведение) - бінарна операція над векторами, результатом якої є скаляр.

Для операції транспонування зарезервований апостроф '. Якщо вектор містить комплексні числа, то операція ' призводить до комплексно-зв'язаного вектора. При обчисленні скалярного і векторного добутків функціями cross і dot не обов'язково стежити за тим, щоб обидва вектори були або стовпцями, або рядками. Результат виходить вірний, наприклад, при зверненні c=cross(а,b'), лише із стає вектор-рядком.

MatLab підтримує по-елементні операції з векторами. Разом з множенням за правилом матричного множення, існує операція по-елементного множення .* (крапка із зірочкою). Дана операція застосовується до векторів однакової довжини і приводить до вектора тієї ж довжини, що вихідний, елементи якого рівні добутку відповідних елементів початкових векторів. Наприклад, для векторів а і b, введених вище, по-елементне множення дає слідуючий результат:

>> c=a.*b

c =


1.5200

-0.3900


11.5000

MatLab володіє великим набором вбудованих функцій для обробки векторних даних, частина з них приведена в табл. 2.1. Повний список наявних функцій виводиться в командне вікно за допомогою help datafun, а для отримання докладною інформацію про кожну функцію потрібно вказати її ім'я як аргумент команди help. Звернете увагу на те, що ряд функцій допускає звернення до них як з одним, так і з двома вихідними аргументами. У разі декількох вихідних аргументів вони полягають в квадратні дужки і відділяються один від одного коми.

Дуже часто потрібно обробити тільки частину вектора, або звернутися до деяких його елементам. Розберемо правила MatLab, по яких проводиться індексація векторних даних. Для доступу до елементу вектора необхідно вказати його номер в круглих дужках відразу після імені змінної, в якій міститься вектор. Наприклад, сума першого і третього елементів вектора v знаходиться за допомогою виразу

>> s=v(1) v(3);

Звернення до останнього елементу вектора можна провести з використанням end, тобто v(end) і v(length(v)) приводять до однакових результатів.

Таблиця. 2.1

Функції обробки даних

Функції Призначенняs=sum(a)Сума всіх елементів вектора аp=prod(a)Добуток всіх елементів вектора аm=max(a)Знаходження максимального значення серед елементів вектора а[m,k]=max(a)Другий вихідний аргумент k містить номер максимального елементу у векторі аm=min(a)Знаходження мінімального значення серед елементів вектора а[m,k]=min(a)Другий вихідний аргумент k містить номер мінімального елементу у векторі аm=mean(a)Обчислення середнього арифметичного елементів вектора аa1=sort(a)Впорядкування елементів вектора за збільшенням[a1,ind]=sort(a)Другий вихідний аргумент ind є вектором з цілих чисел від 1 до length(a), який відповідає виконаним перестановкамВказівку номерів елементів вектора можна використовувати і при введенні векторів, послідовно додаючи нові елементи (не обов'язково в порядку зростання їх номерів).

Арифмети́чне сере́днє (в математиці і статистиці) - сума всіх зафіксованих значень набору, поділена на кількість елементів набору. Якщо з контексту зрозуміло, про яке значення йде мова, тоді просто кажуть середнє.

Команди:

>> h=10;

>> h(2)=20;

>> h(4)=40;

приводять до утворення вектора:

>> h

h =


10 20 0 40

Зауважте, що для введення першого елементу h не обов'язково вказувати його індекс, оскільки при виконанні оператора h=1 створюється вектор (масив розміру один на один). Наступні оператори привласнення приводять до автоматичного збільшення довжини вектора h, а пропущені елементи (у нашому випадку h(3)) набувають значення нуль.


§ 3. Матриці

Матриці невеликих розмірів зручно вводити з командного рядка. Існує три способи введення матриць. Наприклад, матрицю

µ §

можна ввести таким чином: набрати в командному рядку (розділяючи елементи рядка матриці пропусками): A=[0.7 2.5 9.1 і натиснути . Курсор переміщається в наступний рядок (символ запрошення командного рядка >> відсутній). Елементи кожного наступного рядка матриці набираються через пропуск, а введення рядка завершується натисненням на . При введенні останнього рядка в кінці ставиться закриваюча квадратна дужка:



>> A=[0.7 -2.5 9.1

8.4 0.3 1.7

-3.5 6.2 4.7]

Якщо після закриваючої квадратної дужки не ставити крапку з комою для придушення висновку в командне вікно, то матриця виведеться у вигляді таблиці.

Інший спосіб введення матриці заснований на тому, що матрицю можна розглядати як вектор-стовпець, кожен елемент якого є рядком матриці. Оскільки крапка з комою використовується для розділення елементів вектор-стовпця, то введення, наприклад, матриці

µ §


здійснюється оператором привласнення:

>> B=[6.1 0.3; -7.9 4.4; 2.5 -8.1];

Введіть матрицю B і відобразіть її вміст в командному вікні, набравши в командному рядку B і натиснувши .

Очевидно, що допустиме таке трактування матриці, при якій вона вважається вектор-рядком, кожен елемент якого є стовпцем матриці. Отже, для введення матриці

µ §

досить скористатися командою:



>> C=[[0.4; 0.1] [-7.2; -2.1] [5.3; -9.5]]

Звернете увагу, що внутрішні квадратні дужки дійсно потрібні. Оператор C=[0.4; 0.1 -7.2; -2.1 5.3; -9.5] є неприпустимим і приводить до повідомлення про помилку, оскільки виявляється, що в першому рядку матриці міститься тільки один елемент, в другій і третій  по два, а в четвертій ЎЄ знову один.

Функція size дозволяє встановити розміри масивів, вона повертає результат у вигляді вектора, перший елемент якого рівний числу рядків, а другою  стовпців:

>> s=size(B)

s =

3 2


Складання і віднімання матриць однакових розмірів проводиться з використанням знаків , -. Зірочка * служить для обчислення матричного добутку, причому відповідні розміри матриць повинні збігатися, наприклад:

>> P=A*B


P =

46.7700 -84.5000

53.1200 -9.9300

-58.5800 -11.8400

Допустиме множення матриці на число і числа на матрицю, при цьому відбувається множення кожного елементу матриці на число і результатом є матриця тих же розмірів, що і вихідна. Апостроф ' призначений для транспонування речовинної матриці або знаходження зв'язаною до комплексної матриці. Для піднесення квадратної матриці до ступеня застосовується знак ^.

Обчислите для тренування матричний вираз µ §, в якому, A, B і С визначені вище матриці. Нижче приведений запис в MatLab цього виразу:

>> R=(A-B*C)^3 A*B*C

R =


1.0e 006 *

-0.0454 0.1661 -0.6579

0.0812 -0.2770 1.2906

-0.0426 0.1274 -0.7871


§ 4. Графіка і візуалізація даних

Розберемо спочатку, як отримати графік функції однієї змінної, наприклад:

µ §

на відрізку [-2,2]. Перший крок полягає в завданні координат точок по осі абсцис. Заповнення вектора x елементами з постійним кроком за допомогою двокрапки дозволяє просто розв'язати це завдання. Далі необхідно по-елементно обчислити значення f(x) для кожного елементу вектора x і записати результат у вектор f. Для побудови графіка функції залишилося використовувати яку-небудь з графічних функцій MatLab. Достатньо універсальною графічною функцією є plot. У найпростішому випадку вона викликається з двома вхідними аргументами ЎЄ парою x і f (т. е. plot виводить залежність елементів одного вектора від елементів іншого). Послідовність команд, записана нижче, приводить до появи графічного вікна Figure No.1 з графіком функції (мал. 4.1).



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

>> f=exp(x).*sin(pi*x) x.^2;

>> plot(x,f)

Тип лінії, колір і маркери визначаються значенням третього додаткового аргументу функції plot. Цей аргумент вказується в апострофах, наприклад, виклик plot(x,f,'ro:') призводить до побудови графіка червоною пунктирною лінією, розміченою круглими маркерами. Звернете увагу, що абсциси маркерів визначаються значеннями елементів вектора x. Всього в додатковому аргументі може бути заповнена три позиції, відповідні квітну, типу маркерів і стилю лінії. Позначення для них приведені в табл. 4.1. Порядок позицій може бути довільний, допустимо вказувати тільки один або два параметри, наприклад, колір і тип маркерів. Подивіться на результат виконання наступних команд: plot(x,f,'g'), plot(x,f,'ko'), plot(x,f,':').

Функція plot має достатньо універсальний інтерфейс, вона, зокрема, дозволяє відображати графіки декількох функцій на одних осях. Нехай потрібно вивести графік не тільки f(x), але і на відрізку [-2, 2]. Спочатку необхідно обчислити значення g(x):

>> g=exp(-х.^2).*sin(5*pi*x);

а потім викликати plot, вказавши через кому пари x, f і x, g і, при бажанні, властивості кожній з ліній:

>> plot(x,f,'ko-', x,g,'k:')

Таблиця 4.1

Скорочення для кольору, типу маркерів і стилю ліній

КолірТип маркераYЖовтий.точкаmРожевийоКружокЗБлакитноюxХрестикrЧервоний Знак плюсGЗелений*ЗірочкаBСинійsКвадратWБілийdРомбдоЧорнийvТрикутник вершиною внизТип лінії^Трикутник вершиною вгору-Суцільна<Трикутник вершиною вліво:Пунктирна>Трикутник вершиною вправо-.Штріх-пунктірнаяpП'ятикутна зірка--ШтриховаhШестикінечна зіркаДопускається побудова довільного числа графіків функцій, властивості всіх ліній можуть бути різними. Крім того, області побудови кожною з функцій не обов'язково повинні збігатися, але тоді слід використовувати різних вектора для значень аргументів і обчислювати значення функцій від відповідних векторів. Для отримання графіка шматково-заданої функції:

µ §


досить виконати послідовність команд:

>> x1=[-4*pi:pi/10:-pi];

>> y1=sin(x1);

>> x2=[-pi:pi/30:0];

>> y2=3*(x2/pi 1).^2;

>> x3=[0:0.02:5];

>> y3=3*exp(-x3)

>> plot(x1,y1,x2,y2,x3,y3)

Зауважте, що графіки гілок функції відображаються різними кольорами.

Графіки оформляються в MatLab спеціальними командами і функціями. Сітка наноситься на осі командою grid on, а забирається за допомогою grid off. Заголовок розміщується в графічному вікні за допомогою функції title, вхідним аргументом якої являється рядок, ув’язнена в апострофи:

>> title('Результати експерименту')

Звернемося тепер до візуалізації векторних і матричних даних. Найпростіший спосіб відображення векторних даних полягає у використанні функції plot з вектором як вхідний аргумент. При цьому графік, що виходить у вигляді ламаної лінії, символізує залежність значень елементів вектора від їх індексів.

Найпростіший спосіб (англ. The Easiest Way) - американська мелодрама режисера Джека Конуея 1931 року.

Ламана (ламана лінія) - зв'язна послідовність відрізків. Більш формально ламана P це крива визначена послідовністю точок ( A 1 , A 2 , … , A n ) ,A_,\dots ,A_)} , які звуться її вершинами, таким чином крива містить відрізки, що поєднуюють впорядковані вершини, які називаються ланками ламаної.

Другий додатковий аргумент може визначати колір, стиль лінії і тип маркерів, наприклад: plot(x,'ko'). Виклик функції plot від матриці приводить до декількох графіків, їх число співпадає з числом стовпців матриці, а кожний з них є залежністю елементів стовпця від їх рядкових індексів. Колір і стиль ліній і тип маркерів відразу для всіх ліній так само визначається другим додатковим аргументом.

Наглядним способом представлення матричних і векторних даних є різноманітні діаграми. Проста стовпцева діаграма будується за допомогою функції bar:

>> x=[0.7 2.1 2.5 1.9 0.8 1.3];

>> bar(x)

Додатковий числовий аргумент bar указує на ширину стовпців (за умовчанням він рівний 0.8), а значення великі одиниці, наприклад bar(x,1.2), приводять до часткового перекриття стовпців. Вказівка матриці у вхідному аргументі bar приводить до побудови групової діаграми, число груп співпадає з числом рядків матриці, а усередині кожної групи стовпчиками відображаються значення елементів рядків.

Кругові діаграми векторних даних виходять за допомогою функції pie, яка має деякі особливості в порівнянні з bar. Розрізняються два випадки:

якщо сума елементів вектора більше або рівна одиниці, то виводиться повна кругова діаграма, площа кожного її сектора пропорційна величині елементу вектора;

якщо сума елементів вектора менше одиниці, то результатом є неповна кругова діаграма, в якій площа кожного сектора пропорційна величині елементів вектора, в припущенні що площа всього круга рівна одиниці.

Порівняєте, наприклад pie([0.1 0.2 0.3]) і pie([1 2 3]). Можна відокремити деякі сектори від всього круга діаграми, для чого слід викликати pie з другим аргументом ЎЄ вектором тієї ж довжини, що і вихідний. Ненульові елементи другого вектора відповідають відокремлюваним секторам. Наступний приклад показує, як відокремити від діаграми сектор, відповідний найбільшому елементу вектора x:

>> x=[0.3 2 1.4 0.5 0.9];

>> [m,k]=max(x);

>> v=zeros(size(x));

>> v(k)=1;

>> pie(x,v)

Підписи до секторів діаграми указуються в другому додатковому вхідному аргументі, який полягає у фігурні дужки:

>> pie([2400 3450 1800 5100],{'Март','Апрель','Май','Июнь'})

Функції bar і pie мають аналоги:

barh ЎЄ побудова стовпцевої діаграми з горизонтальним розташуванням стовпців;

bar3, pie3 ЎЄ побудова об'ємних діаграм.

При обробці великих масивів векторних даних часто потрібно отримати інформацію про те, яка частина даних знаходиться в тому або іншому інтервалі. Функція hist призначена для відображення гістограми даних і знаходження числа даних в інтервалах. Вхідним аргументом hist являється вектор з даними, а вихідним ЎЄ вектор, що містить кількість елементів, що потрапили в кожний з інтервалів. За умовчанням береться десять рівних інтервалів. Наприклад, виклик hist(randn(1,5000)) наводить до появи на екрані гістограми даних, розподілених по нормальному закону, а n=hist(randn(1,5000)) до заповнення вектора n довжини десять (при цьому гістограма не будується). Число інтервалів указується в другому додатковому аргументі hist. Можна задати інтервали, використавши як другий аргумент не число, а вектор, що містить центри інтервалів. Зручніше задавати інтервали не центрами, а межами. В цьому випадку потрібно спочатку визначити кількість елементів в інтервалах за допомогою функції histc, а потім застосувати bar із спеціальним аргументом 'histc', наприклад:

>> x=randn(1,10000);

>> int=[-2:0.5:2];

>> n=histc(x,int);

>> bar(int,n,'histc')

Візуалізація функцій двох змінних в MatLab може бути здійснена декількома способами, але всі вони припускають однотипні попередні дії. Розглянемо тут тільки побудову графіків функцій два змінних на прямокутній області визначення. Припустимо, що потрібно отримати поверхню функції µ § на прямокутнику µ §µ §. Перший крок полягає в завданні сітки на прямокутнику, т. е. крапок, які використовуватимуться для обчислення значень функції. Для генерації сітки передбачена функція meshgrid, що викликається від двох вхідних аргументів ЎЄ векторів, задаючи розбиття по осях x і y. Функція meshgrid повертає два вихідних аргументу, що є матрицями.

>> [X,Y]=meshgrid(-1:0.1:1,0:0.1:2);

Матриця X складається з однакових рядків, рівних першому вхідному аргументу вектору в meshgrid, а матриця Y ЎЄ з однакових стовпців, співпадаючих з другим вектором в meshgrid. Такі матриці виявляються необхідними на другому кроці при заповненні матриці Z, кожен елемент якої є значенням функції z(x,y) в точках сітки. Нескладно зрозуміти, що використання по-елементних операцій при обчисленні функції z(x,y) приводить до необхідної матриці:

>> Z=exp(-X).*sin(pi*Y);

Для побудови графіка z(x,y) залишилося викликати відповідну графічну функцію, наприклад:

>> mesh(X,Y,Z)

На екрані з'являється графічне вікно, що містить каркасну поверхню досліджуваної функції (рис. 4.1). Звернете увагу, що колір поверхні відповідає значенню функції.

Рис. Д.1.

Команда colorbar приводить до відображення в графічному вікні стовпчика, що показує співвідношення між кольором і значенням z(x,y). Колірні палітри графіка можна змінювати, користуючись функцією colormap, наприклад colormap(gray) відображає графік у відтінках сірого кольору. Деякі колірні палітри приведені нижче:

bone ЎЄ схожа на палітру gray, але з легким відтінком синього кольору;

colorcube ЎЄ кожен колір змінюється від темного до яскравого;

cool ЎЄ відтінки блакитного і пурпурного кольорів;

copper ЎЄ відтінки мідного кольору;

hot плавна зміна: чорний ЁCчервоний ЁCоранжевий ЁCжовтий ЁCбілий;

hsv ЎЄ плавна зміна (як барви веселки);

jet плавна зміна: синій ЁCголубий ЁCзелений ЁCжовтий ЁC червоний;

spring ЎЄ відтінки пурпурного і жовтого;

summer ЎЄ відтінки зеленого і жовтого;

winter ЎЄ відтінки синього і зеленого;

MatLab надає цілий набір графічних функцій для візуалізації функцій два змінних, серед них:

surf ЎЄ залита кольором каркасна поверхня;

meshc, surfc ЎЄ поверхні з лініями рівня на площині xy;

contour ЎЄ плоский графік з лініями рівня;

contourf ЎЄ залитий кольором плоский графік з лініями рівня;

contour3 ЎЄ поверхня, складена з ліній рівня;

surfl ЎЄ освітлена поверхня
§ 5. Файл-функції і файл-програми

Вбудована мова програмування MatLab достатньо проста, вона містить необхідний мінімум конструкцій, які описані в наступному параграфі. Перш ніж програмувати в MatLab, необхідно зрозуміти, що всі програми можуть бути або файл-функціями, або файл-програмами. Файл-програма являється текстовим файлом із розширенням m (M-файлом), у якому записані команди і оператори MatLab. Розберемо, як створити просту файл-програму.

У MatLab наявний редактор M-файлів, для запуску якого слід натиснути кнопку New M-file на панелі інструментів робочого середовища, або вибрати в меню File в пункті New підпункт M-file.

Пане́ль інструме́нтів (англ. toolbar) - елемент графічного інтерфейсу користувача, призначений для розміщення на ньому кількох інших елементів.

На екрані появиться вікно редактора. Наберіть у ньому які-небудь команди, наприклад для побудови графіка (див. лістинг 5.1):

Лістинг 5.1. Проста файл-програма

x=[-1:0.01:1];

y=exp(x);

plot(x,y)

grid on


title('Експоненціальна функція')

Для запуску програми або її частини є декілька способів. Перший, найпростіший ЎЄ виділити оператори з допомогою мишки, утримуючи ліву кнопку, або за допомогою клавіші із стрілками,


,
і вибрати в меню View (у версії 5.3), або в меню Text (у версії 6.x) пункт Evaluate Selection (або натиснути ). Виділені оператори виконуються послідовно, точно так, як і якби вони були набрані в командному рядку. Очевидно, що працювати в M-файлі зручніше, ніж з командного рядка, оскільки можна зберегти програму, добавити оператори, виконувати окремі команди не пробігаючись по історії команд, як у випадку із командного рядка.

Після того, як програма збережена в M-файлі, приміром в myprog.m, для її запуску можна використовувати пункт Run меню Tools (у версії 5.3), або меню Debug (у версії 6.x), або набрати в командному рядку ім'я M-файлу (без розширення) і натиснути , тобто виконати, як команду MatLab. При таких способах запуску програми слід врахувати важливу обставину шлях до каталогу із M-файлом повинен бути відомий MatLab. Зробіть каталог з файлом myprog поточним.

У MatLab 5.3 в меню File робочого середовища перейдіть до пункту Set Path... Появитися діалогове вікно Path Browser (навігатор шляхів). У рядку введення Current Directory встановите необхідний каталог. Скористайтеся кнопкою, розташованою праворуч від рядка введення, для вибору каталогу.

У MatLab 6.x установки поточного каталогу проводиться із вікна Current Directory робочого середовища. Якщо це вікно відсутнє, то слід вибрати пункт Current Directory меню View робочого середовища. Для вибору бажаного каталогу на диску натисніть кнопку, розташовану праворуч від списку, що розкривається.

Коли поточний каталог встановлений, то всі M-файли, що перебувають в ньому, можуть бути запущені із командного рядка, або з редактора M-файлів. Всі змінні файл-програми після її запуску доступні в робочому середовищі, т. е. являються глобальними. Переконаєтеся в цьому, виконавши команду whos. Більше того, файл-програма може використовувати змінні робочого середовища.

Файл-функції відрізняються від файл-програм тим, що вони можуть мати вхідні і вихідні аргументи, а всі змінні, визначені усередині файл-функції, є локальними і не показані в робочому середовищі. M-файл, утримуючий файл-функцію, повинен починатися із заголовка, потім у нього записуються оператори MatLab. Заголовок складається із слова function, списку вихідних аргументів, імені файл-функції і списку вхідних аргументів. Аргументи в списках розділяються комою. Лістинг 5.2 містить зразок простої файл-функції із двома вхідними і одним вихідним аргументами.


Лістинг 5.2. Файл-функція mysum

function c=mysum(а,b)

c=a b;

Наберіть цей зразок в новому файлі в редакторові і збережіть його. Звернете увагу, що MatLab пропонує як ім'я M-файлу назву файл-функції, тобто mysum.m. Завжди зберігайте файл-функцію в M-файлі, ім'я якого збігатися із ім'ям файл-функції! Переконаєтеся, що каталог із файлом mysum.m є поточним і викличте файл-функцію mysum з командного рядка:



>> s=mysum(2,3)

s =


5

При виклику файл-функції mysum відбулися наступні події:

вхідний аргумент а набув значення 2;

вхідний аргумент b став рівний 3;

сума а і b записалася у вихідний аргумент С;

значення вихідного аргументу С отримала змінна s робочого середовища і результат вивівся в командне вікно.

Лістинг 5.3. Файл-функція для вирішення квадратного рівняння

function [x1,x2]=quadeq(а,b,c)

D=b^2-4*a*c;

x1=(-b sqrt(D))/(2*a);

x2=(-b-sqrt(D))/(2*a);

При виклику quadeq з командного рядка використовуйте квадратні дужки для вказівки змінних, в які будуть занесені значення коріння:

>> [r1,r2]=quadeq(1,3,2)

r1 =


-1

r2 =


-2

Зауважте, що файл-функцію quadeq можна викликати без вихідних аргументів, або лише із одним вихідним аргументом. В цьому випадку повернеться тільки перший корінь.

§ 6. Програмування

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

Цикл for використовується для повторення операторів у разі, коли число повторень заздалегідь відоме. У циклі for використовується лічильник циклу, його початкове значення, крок і кінцеве значення указуються через двокрапку. Блок операторів, розміщений усередині циклу, повинен закінчуватися словом end. Лістинг 6.1 містить файл-програму для виведення графіків функції µ § на відрізку, для значень параметра µ §.

Лістинг 6.1. Графіки функції при різних значеннях параметра

x=[-2:0.01:2];

for beta=-0.5:0.1:0.5

y=exp(beta*x).*sin(x);

plot(x,y)

hold on

end


hold off

Якщо крок рівний одиниці, то його вказувати не обов'язково. Наприклад, для підрахунку суми

µ §

при різних значеннях x буде потрібно файл-функцію, текст якої приведений на лістингу 6.2. Зверніть увагу, що sum10 може бути викликана як від числа, так і від масиву значень, завдяки застосуванню по-елементних операцій.



Лістинг 6.2. Файл-функція для підрахунок суми

function s=sum10(x)

s=0;

for k=1:10



s=s x.^k/factorial(k);

end


Цикл for підходить для повторення заданого числа певних дій. У тому випадку, коли число повторів заздалегідь невідоме і визначається в ході виконання блоку операторів слід організувати цикл while. Цикл while працює, поки(доки) виконана умова циклу. Файл-функція negsum (див. лістинг 6.3) знаходить суму всіх перших негативних елементів вектора.

Лістинг 6.3. Файл-функція negsum

function s=negsum(x)

s=0;


k=1;

while x(k) <0

s=s x(k);

k=k 1;


end

Крім перевірки значення x(k) слід потурбуватися про те, щоб значення k не перевершувало довжини вектора x. Вхід в цикл повинен здійснюватися лише при одночасному виконанні умов k<=length(x) і x(k)<0, тобто необхідно застосувати логічного оператора "и", що позначається в MatLab символом &. Замінити умову циклу на складене: k<=length(x) & x(k) <0. Якщо перше з умов не виконується, то друга умова перевірятися не буде, саме тому вибраний такий порядок операндів. Тепер файл-функція negsum працює вірно для будь-яких векторів.


Завдання для самостійної роботи

ЗД1). У всіх завданнях потрібно занести в деяку змінну значення виразів при заданих і, відобразити результат в різних форматах і вивчити інформацію змінних за допомогою команди whos.

1.µ §2.µ §3.µ §

ЗД2) Для заданих векторів а і b довжини n:

обчислити їх суму, різницю і скалярний добуток;

утворити вектор µ §, визначити його максимальний і мінімальний елементи і поміняти їх місцями;

упорядкувати вектор за збільшенням і убуванню;

переставити елементи вектора в зворотному порядку і записати результат в новий вектор;

знайти векторний добуток µ § і µ §.

Варіанти


 a = [0.5 3.7 6.0 -4.3 1.2 -2.7 2.4 2.2];b = [3.6 7.0 7.0 5.4 2.6 -2.7 -6.4 0.3]. а = [-4.8 -1.3 -1.0 0.7 4.0 5.8 4.3 -8.0];b = [-1.1 -1.9 7.1 -2.1 6.8 2.8 0.3 1.6]. а = [1.0 -3.9 -2.3 -3.3 -1.7 2.2 -0.6 1.8];b = [2.7 -2.7 -2.2 4.4 0.4 -6.0 -3.4 -5.2].

ЗД3) Обчислити значення функції на відрізку в заданому числі N, рівномірно віддалених один від одного точок.

Варіанти

1.µ §µ §N=102.µ §µ §N=8 

3.µ §µ §N=9

ЗД4) За допомогою вбудованих функцій для заповнення стандартних матриць, індексації двокрапкою і, можливо, повороту, транспонування або викреслювання отримаєте наступні матриці:

1.µ § 2.µ §
ЗД5) Обчислити значення функції для всіх елементів матриці і записати результат в матрицю того ж розміру, що і вихідна.
1. µ §;µ §

2.  µ §;µ §


ЗД6) Побудувати графіки функцій однієї змінної на вказаних інтервалах. Вивести графіки різними способами:

у окремі графічні вікна;

у одне вікно на одні осі;

у одне вікно на окремі осі.

Дати заголовки, розмістити підписи до осей, легенду, використовувати різні кольори, стилі ліній і типи маркерів, нанести сітку.

Варіанти


1. µ §.

µ §.


2. µ §.

µ §.


3. µ §.

µ §.
ЗД7) Побудувати графіки шматково-заданої функції, відобразити галузь різними кольорами і маркерами.


1. µ § 2. µ §
ЗД8) Побудувати графік параметрично заданої функції, використовуючи plot і comet.

Варіанти


1. µ §

2. µ §µ §

3.µ §µ §
ЗД9) Віалізувати функцію два змінних на прямокутній області визначення різними способами:

каркасною поверхнею;

залитою кольором каркасною поверхнею;

промаркованими лініями рівня (самостійно вибрати значення функції, що відображеними лініями рівня);

освітленою поверхнею.

Розташувати графіки в окремих графічних вікнах, і в одному вікні із відповідним числом пар осей. Представити вид каркасної або освітленої поверхні з декількох точок огляду.

Варіанти

1. µ §


2. µ §

3. µ §


ЗД10) Написати файл-функції і побудувати графіки на заданому відрізку за допомогою plot (з кроком 0.05) і fplot для наступних функцій:

Варіанти


1. µ §

2. µ §


3. µ §
ЗД11) Написати файл-функцію для вирішення поставленого завдання.

Варіанти


Написати файл-функцію, яка по заданому вектору визначає номер його елементу з найбільшим відхиленням від середнього арифметичного всіх елементів вектора.

Написати файл-функцію, що повертає суму всіх елементів вектора з непарними індексами.

Написати файл-функцію, що обчислює максимальне значення серед діагональних елементів заданої матриці.

Написати файл-функцію, що переводить час в секундах в години, хвилини і секунди.


СПИСОК ЛІТЕРАТУРИ
1. Гаврилова Т.А., Хорошевский В.Ф. Базы знаний интеллектуальных систем. ЁC СПб.: Питер, 2001. - 384 с.

2. Леоненков А.В. Нечёткое моделирование в среде MATLAB. - СПб : БХВ-Петербург, 2003. - 736 с.

3. Штовба С.Д. Введение в теорию нечетких множеств и нечеткую логику. - 2002. (http://www.nsu.ru/matlab/MatLab_RU/fuzzylogic/book1/index.asp.htm)

4. Бакан Г.М. Вступ до теорії експертних систем та баз знань.-К.:ВПЦ «Київський університет», 2005.-90с.

5. Р. Дорф, Р. Бишоп Современные системы управления: пер. с англ.-М.: Лаборатория Базовых Знаний, 2002.-832с.

6. Каллан Р. Основные концепции нейронных сетей. ЁC М.: Вильямс, 2001.-288с.

7. Ануфриев И.Е. Информатика. Пакет МаLab. Изд-во СПбГПУ. 2003. - 67с.

8. С.П. Иглин Математические расчеты на базе MATLAB.-СПб.: БХВ-Петербург, 2005.-640с.

Н а в ч а л ь н е в и д а н н я

АКІМЕНКО Віталій Володимирович

ЗАГОРОДНІЙ Юрій Віталійович

Проектування СППР на основі нечіткої логіки.


Редакційно-видавничий відділ

Київського національного університету імені Тараса Шевченка

Підписано до друку .

Папір офсетний Формат 60х84 1/16.

Умов. друк. арк. 6,0 Обл. вид. арк. 6,5

Наклад 200 прим. Зам. №



ІВЦ КНУ імені Тараса Шевченка


1   2   3   4



  • Скалярний добуток
  • Найпростіший спосіб