- •1.3. Методичні рекомендації
- •1.3.1. Знайомство із середовищем MatLab
- •1.3.2. Розрахунки в MatLab
- •1.3.3. Числові формати
- •1.3.4. Константи і змінні
- •1.3.6. Файл-програми
- •1.3.7. Файл-функції
- •1.3.8. Основні положення теорії погрішностей
- •Питання для захисту роботи
- •1.5. Варіанти для самостійної роботи
- •Лабораторна практична робота №2
- •2.3. Методичні рекомендації
- •Метод бісекції
- •Метод Ньютона (метод дотичних)
- •Метод простої ітерації (метод послідовних повторень)
- •Питання для захисту роботи
- •Лабораторна практична робота №3
- •3.3. Методичні рекомендації
- •Питання для захисту роботи
- •3.5. Варіанти для самостійної роботи
- •Практична лабораторна робота №4 Методи апроксимації та інтерполяції. Сплайн-інтерполяція
- •4.1. Мета роботи
- •4.2. Порядок виконання роботи
- •4.3. Методичні рекомендації
- •4.4. Питання для захисту роботи
- •4.5. Варіанти для самостійної роботи
- •5.3. Методичні рекомендації
- •Зміст основних функцій та надбудов Excel для розв’язання оптимізаційних задач
- •Приклад використання зазначених функцій Приклад 5.1. Задача оптимального використання ресурсів
- •Питання для захисту роботи
- •6.3. Методичні рекомендації
- •Допоміжна таблиця для пошуку розв’язку
- •Microsoft Excel 10.0. Звіт щодо стійкості розв’язку
- •6.4. Питання для захисту роботи
- •Варіанти для самостійної роботи
- •Методичні рекомендації
- •Питання для захисту роботи
- •Лабораторне практичне заняття №8 Сіткові графи. Транспортні сітки
- •8.1. Мета роботи
- •8.2. Порядок виконання роботи
- •8.3. Методичні рекомендації
- •8.3.1. Задача сіткового планування і керування
- •8.3.2. Знаходження максимального потоку на транспортній сітці і мінімального розрізу
- •8.4. Питання для захисту роботи
- •9.3. Методичні рекомендації
- •Питання для захисту роботи
- •Варіанти для самостійної роботи
- •Використана література
- •10.1. Основна
- •10.2. Додаткова
- •Лабораторний практикум з дисципліни «Прикладна математика» для студентів напряму підготовки
6.4. Питання для захисту роботи
1. Сформулюйте математичну модель транспортної задачі.
2. Які вам відомі методи побудови вихідного плану?
3. Який план називається виродженим?
4. Як перевірить план на оптимальність?
5. Крітерій оптимальності методу потенціалів.
6. У чому полягає метод перерасподілу транспортних перевезень.
Варіанти для самостійної роботи
За
заданими запасами і потребами у вантажі
і таблицею тарифів знайти опорний план
перевезень, перевірити його на
оптимальність та у випадку необхідності
здійснити перерозподіл поставок:
,
,
,
,
,
,
,
.
Проінтерпретувати отримані результати:
1.
;
2.
;
3.
;
4.
;
5.
;
6.
;
7.
;
8.
;
9.
;
10.
;
11.
;
12.
.
Лабораторне практичне заняття №7
Оптимізаційні задачі на неорієнтованих графах в середовище MatLab
Мета роботи
Ознайомлення з особливостями побудови та малювання графів у пакеті прикладних програм MatLab та вирішення деяких оптимізаційних задач на графах, а саме – побудова економічного дерева.
Порядок виконання роботи
1. Вивчити теоретичну частину (лекційний матеріал) : поняття орієнтованих та неорієнтованих графів, кратних ребер, алгоритм побудови економічного дерева, ланцюга мінімальної довжини. Виконати завдання, що відповідають номерові Вашого варіанта.
2. Оформите звіт по лабораторній роботі, що повинний містити:
Формулювання завдання (варіант завдання вибирається відповідно до особливих данних студента).
Результати виконання програми
Висновки (інтерпритація отриманих результатів).
Методичні рекомендації
Задача
1.
Постановка задачі:
на декартовій площині побудувати
зв’язний без петель ”іменний” граф з
вершинами в точках
.
Значенням 1, 2, 3 індекса
відповідають число, місяць, рік народження
студента (наприклад 22.01.1991 дає
).
Значенням
=
4, 5, 6, 7 відповідають зріст, вага, розмір
взуття, розмір одягу. Вершини
та
визначаються наступним чином:
.
Ребра вибираються довільним чином у кількості не менше дванадцяти так, щоб спільними точками будь-яких ребер були б тільки вершини графа. Довжини ребер графа покладають рівними одній із координат суміжних вершин. Потрібно зобразити цей граф графічно використовуючи середовище MatLab.
Алгоритм розв’язання:
записати особисті данні студента (тобто свої данні) та перетворити їх на координати вершин графа;
побудувати граф за допомогою відповідних функцій;
Опис необхідних програмних засобів MATLABу:
Скористаємося наробітками Сергія Ігліна (виражаю свою вдячність за дані наробітки), що реалізував засобами MatLab розділ задач теорії графів.
grPlot − функція для малювання графів і орграфів засобами MATLAB. Для цих цілей можна також використовувати вбудовану функцію GPLOT. Синтаксис виклику:
h = grPlot(V,E,kind,vkind,ekind) − створює нову фігуру і малює на ній граф або орграф.
Вхідний параметр V(n,2) або V(n,3) − координати вершин і їхні ваги; n − кількість вершин. У 1-м стовпці задаються x-ві координати вершин, у 2-м − y-ві. При необхідності можна задати 3-й стовпець з вагами вершин. Якщо задані тільки два стовпці: V(n,2), то за замовчуванням біля кожної вершини ставиться мітка у вигляді номера вершини; а якщо задані три стовпці: V(n,3), то в якості мітки вершини за замовчуванням використовується її вага. Якщо задати порожній масив: V=[], то вершини графа малюються у вершинах правильного n-кутника, а кількість вершин визначається параметром E.
Вхідний параметр E(m,2) або E(m,3) − список ребер графа (дуг орграфа); m − кількість ребер (дуг). Перший і другий елементи кожного рядка − це номера вершин, що з'єднуються. Для графа порядок вершин неважливий, для орграфа 1-й елемент − це початок дуги, а 2-й − кінець. При необхідності можна задати 3-й стовпець з довжиною ребер (дуг). Якщо задані тільки два стовпці: E(m,2), то за замовчуванням біля кожного ребра (дуги) ставиться мітка у вигляді номера ребра (дуги); а якщо задані три стовпці: E(m,3), то в якості мітки ребра (дуги) за замовчуванням використовується його довжина. Якщо задати E=[ ] або взагалі опустити цей параметр, записавши h=PlotGraph(V), то малюється граф без ребер (дуг).
У необов'язковому вхідному параметрі kind задається вид графа, що малюється. Якщо kind='g' (за замовчуванням), то малюється граф, а якщо kind='d', те орграф. Можна використовувати як рядкову, так і прописну букви.
У необов'язковому вхідному параметрі vkind задається вигляд мітки для вершин. Можна використовувати будь-який формат функції FPRINTF, наприклад, '%8.3f', '%14.10f' і т.д. За замовчуванням використовується формат '%d'. Якщо задати порожній рядок: vkind='', то мітки вершин малюватися не будуть.
У необов'язковому вхідному параметрі ekind задається вигляд мітки для ребер (дуг). Він задається так само, як і вигляд мітки для вершин vkind.
У необов'язковому вихідному параметрі h повертається дескриптор створеної фігури.
Приклад 7.1.
Треба побудувати граф по заданим вершинам та вагам ребер.
Для побудови відповідного графу необхідно виконати наступні команди:
clear all % очистили пам’ять
V=[0 0 2;1 1 3;1 0 3;1 -1 4;2 1 1;2 0 2;2 -1 3;3 1 4;...
3 0 5;3 -1 1;4 0 5]; % координати вершин та їх веса
E=[1 2 5;1 1 2;1 1 5;2 2 3;1 3 5;1 4 5;2 3 2;3 4 2;2 5 3;2 6 2;3 6 5;3 7 2;...
4 7 3;5 6 1;6 7 1;5 8 5;6 8 2;6 9 3;7 9 2;7 10 3;8 9 2;...
9 10 2;8 11 5;9 11 4;10 11 4;1 2 8;1 3 4;1 3 5;1 3 6]; % ребра (дуги) та їх довжина
grPlot(V(:,1:2),E,'d');
set(get(gcf,'CurrentAxes'),...
'FontName','Times New Roman Cyr','FontSize',10) % встановили шрифт
title('\bfОрграф зі зваженими дугами')
grPlot(V,E(:,1:2),[],'%d','');
set(get(gcf,'CurrentAxes'),...
'FontName','Times New Roman Cyr','FontSize',10) % встановили шрифт
title('\bfГраф зі зваженими вершинами без меток ребер')
grPlot(V(:,1:2));
set(get(gcf,'CurrentAxes'),...
'FontName','Times New Roman Cyr','FontSize',10) % встановили шрифт
title('\bfГраф без ребер')
grPlot([],fullfact([5 5]),'d')
set(get(gcf,'CurrentAxes'),...
'FontName','Times New Roman Cyr','FontSize',10) % встановили шрифт
title('\bfОрієнтована кліка\rm \itK\rm_5')
Після виконання цього набору команд буде отримане наступне зображення графу (дивись рис. 7.1)
Рис. 7.1. Граф з кратними вершинами
Задача 2. Постановка задачі: на графі, отриманому в задачі 1 побудувати економічне дерево.
Алгоритм розв’язання:
Даний алгоритм базується на послідовному введені в економічне дерево ребер з пріоритетом за мінімумом їх довжин:
1) вибираємо ребро найменшої довжини (якщо таких ребер декілька, то беремо будь-яке з них);
2) на кожному наступному кроці додаємо (приєднуємо) інцедентне найкоротше з ребер, при долучені якого до вже обраних ребер не утворюється ніякого циклу;
3) процес
закінчується, як тільки буде обрано
ребер.
Опис необхідних програмних засобів MATLABу:
Функція grMinSpanTree вирішує задачу про мінімальне покриваюче дерево, тобто економічне дерево. Синтаксис виклику:
nMST = grMinSpanTree(E) − для графа E знаходить мінімальне покриваюче дерево nMST.
Вхідний параметр E(m,2) або E(m,3) − список ребер графа і їхні ваги. Перший і другий елементи кожного рядка − це номера вершин ребра (у будь-якому порядку); третій (якщо він є) − це вага ребра; m − кількість ребер. Якщо ваги задані, вирішується задача про мінімальне покриваюче дерево, а якщо немає − то усі ваги вважаються одиничними, і знаходиться перше що зустрілося покриваюче дерево. Вихідний параметр nMST − список номерів ребер, включених у економычне дерево. Ребра перераховані в порядку їхнього включення в покриваюче дерево.
Приклад 7.2. Побудуємо економічне дерево за допомогою наступної програми:
clear all % очистили пам'ять
V=[-2 4 1;2 2 4;0 1 2;9 1 8;6 8 7;5 4 6;3 8 5;1 0 3;11 4 9]; % координати вершин графа та їх веса
E=[1 2 5;1 4 2;1 5 4;2 3 3;2 4 7;3 4 6;3 8 1;4 5 2;4 6 3;5 6 2;5 7 5;
6 7 2;6 8 9;6 9 1;7 9 8;8 9 5]; % ребра (дуги) та їх довжина
grPlot(V,E); % малюємо граф
set(get(gcf,'CurrentAxes'),...
'FontName','Times New Roman Cyr','FontSize',10) % встановили шрифт
title('\bfВихідний граф зі зваженими ребрами')
nMST=grMinSpanTree(E(:,1:2)); % економічне дерево
fprintf('Кількість ребер в остовному дереві = %d\n',length(nMST));
fprintf('Загальна вага = %d\n',sum(E(nMST,3)));
grPlot(V,E(nMST,:)); % покриваюче дерево
set(get(gcf,'CurrentAxes'),...
'FontName','Times New Roman Cyr','FontSize',10) % встановили шрифт
title('\bfПокриваюче дерево')
nMST=grMinSpanTree(E); % мінімальне покриваюче дерево
fprintf('Кількість ребер в економічному дереві = %d\n',length(nMST));
fprintf('Загальна вага = %d\n',sum(E(nMST,3)));
grPlot(V,E(nMST,:)); % економічне дерево
set(get(gcf,'CurrentAxes'),...
'FontName','Times New Roman Cyr','FontSize',10) % встановили шрифт
title('\bfЕкономічне дерево')
Кількість ребер в остовному дереві = 8
Загальна вага = 38
Кількість ребер в економічному дереві =8
Загальна вага = 23
Після виконання цього фрагменту програми отримуємо наступний граф (рис. 7.2 та 7.3)
Рис. 7.2. Вихідний граф зі зваженими ребрами
Рис. 7.3. Остовне дерево
Рис. 7.4. Економічне дерево
