Математические методы / Лабораторные / Лабораторная №1 Вариант №7
.docxМіністерство освіти і науки, молоді та спорту України
Національний авіаційний університет
Кафедра комп’ютерних та інформаційних технологій
Лабораторна робота №1
З дисципліни: «Математичні методи дослідження операцій»
За темою : «Лінеаризація нелінійної цільової функції »
Варіант 7
Виконав:
Студент ТП-213 ІКІТ
Дергачов Ярослав
Київ 2017
Домашнее задание №1
по дисциплине “Математические методы исследования операций”.
Разработать линейную модель двумерной функции, которая задана в виде таблицы чисел, методами линейного программирования.
В процессе выполнения домашнего задания необходимо:
- построить графики для заданного массива чисел;
- минимизировать количество кусочно-линейных участков исходной двумерной поверхности, обеспечивающих допустимую погрешность аппроксимации равную 1% от максимального значения исходной функции;
- рассчитать значение коэффициентов системы линейных уравнений, описывающих двумерную поверхность;
- свести коэффициенты линейных уравнений в таблицу;
- разработать алгоритм вычислительного процесса для определения численного значения функции по любому промежуточному значению ее аргументов;
- написать и отладить программу на любом алгоритмическом языке программирования высокого уровня;
- выполнить контрольные расчеты, подтверждающие правильность работы программы;
- оформить отчет по выполнению домашнего задания №1.
Вариант №7
Таблица R = fR (H, M)
мН, км |
0 |
0,125 |
0,25 |
0,375 |
0,5 |
0,625 |
0,75 |
0,875 |
1,0 |
1.4 |
0 |
900 |
625 |
400 |
180 |
0 |
-150 |
-270 |
-380 |
-500 |
-600 |
2 |
1120 |
830 |
600 |
390 |
200 |
60 |
-70 |
-190 |
-310 |
-400 |
4 |
1310 |
1030 |
800 |
590 |
410 |
265 |
130 |
0 |
-130 |
-200 |
6 |
1510 |
1210 |
990 |
800 |
620 |
470 |
3350 |
210 |
80 |
70 |
8 |
1720 |
1380 |
1210 |
1060 |
910 |
735 |
565 |
425 |
310 |
250 |
10 |
1840 |
1560 |
1370 |
1200 |
1060 |
930 |
810 |
660 |
490 |
400 |
12 |
2010 |
1750 |
1535 |
1335 |
1200 |
1085 |
975 |
850 |
720 |
6500 |
Завдання
Таблица R = fR (H, M)
МН, км |
0 |
0,125 |
0,25 |
0,375 |
0,5 |
0,625 |
0,75 |
0,875 |
1,0 |
1.4 |
2 |
1120 |
830 |
600 |
390 |
200 |
60 |
-70 |
-190 |
-310 |
-400 |
Встановлюємо межі для лінеаризації:
400*0.05 = 20.
Розіб’ємо функцію на щонайменше проміжків, враховуючи похибку 5%.
Отримали 5 проміжки, рівняння яких:
H1 = (x-0)/(0.125-0) *(810-1140) + 1140
H2 = (x-0.125)/(0.375-0.125)*(410-810) + 810
H3 = (x-0.375)/(0.625-0.375)*(40 - 410) + 410
H4 = (x-0.625)/(1 -0.625)*(-290-40) + 40
H5 = (x-1)/(1.4 -1)*(-420+290) - 290
Напишемо програму, яка б розраховувала значення Y(x) для нашої функції, при аргументі, що постійно змінюється.
Код програми:
Java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class lab1 { public static void main(String[] args) throws IOException { BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); String input = ""; while (!(input.equalsIgnoreCase("выход"))) { System.out.println("Введите x.\n\"Выход\" для выхода."); input = read.readLine(); try { float x = Float.parseFloat(input); /** * H1 = (x-0)/(0.125-0) *(810-1140) + 1140 * H2 = (x-0.125)/(0.375-0.125)*(410-810) + 810 * H3 = (x-0.375)/(0.625-0.375)*(40 -410) + 410 * H4 = (x-0.625)/(1 -0.625)*(-290-40) – 40 * H5 = (x-1)/(1.4 -1)*(-420+290) + 290 */ if (x >= 0 && x <= 0.125) { System.out.println("H1 для данного х равняется " + ((x - 0) / (0.125 - 0) * (810 - 1140) + 1140)); } else if (x > 0.125 && x <= 0.375) { System.out.println("H2 для данного х равняется " + ((x - 0.125) / (0.375 - 0.125) * (410 - 810) + 810)); } else if (x > 0.375 && x <= 0.625) { System.out.println("H3 для данного х равняется " + ((x - 0.375) / (0.625 - 0.375) * (40 - 410) + 410)); } else if (x > 0.625 && x <= 1) { System.out.println("H4 для данного х равняется " + ((x - 0.625) / (1 - 0.625) * (-290 - 40) + 40)); } else if (x > 1 && x <= 1.4) { System.out.println("H5 для данного х равняется " + ((x - 1) / (1.4 - 1) * (-420 + 290) - 290)); } else System.out.println("Значение х не попало в границы."); } catch (NumberFormatException e) { System.out.println("Caught NumberFormatException. More Info: " + e.getLocalizedMessage()); } } } }
Результат роботи:
Схема алгоритму
Висновки: Я розробив лінійну модель двухмірної функції, яка задана у вигляді таблиці, мотодами лінійного програмування. Збудував графіки заданого масиву чисел. Розробив алгоритм обчислювального процесу для визначення чисельного значення функції.