Автор работы: Пользователь скрыл имя, 07 Мая 2013 в 00:28, лабораторная работа
1.Исходная постановка оптимизационной задачи:
Расходы на топливо для самолета пропорциональны кубу его скорости. Известно, что при скорости 700 км/ч расходы на топливо составляют 30 000 руб/ч, остальные же расходы (не зависящие от скорости) составляют 480 000 руб/ ч. При какой скорости самолета общая сумма расходов на 1 км пути будет наименьшей? Чему равна эта наименьшая общая сумма расходов?
Московский Авиационный Институт
(Государственный Технический Университет)
______________________________
Кафедра 609: Прикладная информатика
Отчёт по Лабораторной Работе номер 1
Выполнил студент группы 06-321
Волков Р.А.
____________________
Принял
Доцент Махорин А.О.
____________________
Москва 2012
Вариант № 2
Расходы на топливо для самолета пропорциональны кубу его скорости. Известно, что при скорости 700 км/ч расходы на топливо составляют 30 000 руб/ч, остальные же расходы (не зависящие от скорости) составляют 480 000 руб/ ч. При какой скорости самолета общая сумма расходов на 1 км пути будет наименьшей? Чему равна эта наименьшая общая сумма расходов?
30000/x^3 = расход при скорости 700 км/ч
Скорость x = 700 км/ч
30000/700^3 = 0.000087 р/км
Постоянный расход = 480000 руб/ч
480000*t(время) = 480000/x (т.к. t=1/x)
Непостоянный расход
0.000087*t*x^3 = 0.000087/x*x^3 = 0.000087*x^2
Общий расход на 1км пути
480000/x + 0.000087*x^2
Скорость самолета не может быть меньше 500, верхний предел возьмем равным 2000. Интервал [500...2000].
SUBROUTINE znach(F,A,B,Z)
*
* вычисление значений функции F
*
REAL F,A,B,C,Z(11),i
EXTERNAL F
INTEGER k
C=abs(A-B)/10
k=0
do i=A,B,C
k=k+1
Z(k)=F(i)
enddo
Z(11)=F(B)
END
Основная программа построения таблицы значений целевой функции и нахождения чувствительности интервала:
// job main2
// exec fortran
PROGRAM MAIN2
* Вычисление значений функции в
*
REAL S,A,B,P(11),k,l,optimum,x1,x2,
integer i
EXTERNAL S
A=100.0
B=1500.0
k=abs(B-A)/10
CALL znach(S,A,B,P)
10 FORMAT (1X,F12.6,1x,1PG12.5)
l=1
print *,(' F(x) x')
do i=1,11
PRINT 10,P(i),l
l=l+k
enddo
optimum=1402.3
print '(1x,a,1PG12.5)','Оптимум: ',S(optimum)
print '(1x,a,1PG12.5)','1% от оптимума: ',0.01*S(optimum)
x1 = optimum
do while (abs((S(optimum)-S(x1))/S(
x1 = x1 - 0.0001
enddo
x1 = x1 + 0.0001
print*,'Левая граница:',x1
x2 = optimum
do while (abs((S(x2)-S(optimum))/S(
x2 = x2 + 0.0001
enddo
x2 = x2 - 0.0001
print*,'Правая граница:',x2
print '(1x,a,1PG12.5)','S(x1): ',S(x1)
print '(1x,a,1PG12.5)','S(x2): ',S(x2)
print '(1x,a,2f15.10)','Разница: ',abs(S(optimum)-S(x1))
sens = min(abs(x1-optimum),abs(x2-
print*,'Чувствительность: ',sens/optimum
print*,'Отклонение: ',sens
print*,'Допустимая точность: ', sens*2
END
REAL FUNCTION S(D)
REAL*4 D,C
C=480000/D+0.000087*D**2
S=C
RETURN
END
// exec fortran znach.f
// exec link
// exec *
// end
Результат выполнения программы:
RPSCP: RPS Control Program, v1.8 (for 32-bit MS Windows)
Wed Nov 28 19:14:15 2012
0001 // job main2
0002 // exec fortran
0049 // exec fortran znach.f
0050 // exec link
0051 // exec *
F(x) x
4800.870117 1.0000
2005.011230 141.00
1275.720703 281.00
946.601746 421.00
765.169922 561.00
655.679993 701.00
587.511475 841.00
545.921265 981.00
522.933411 1121.0
513.856384 1261.0
515.750000 1401.0
Оптимум: 513.38
1% от оптимума: 5.1338
Левая граница: 1266.98108
Правая граница: 1547.32275
S(x1): 518.51
S(x2): 518.51
Разница: 5.1337280273
Чувствительность: 0.096497871
Отклонение: 135.31897
Допустимая точность: 270.637939
0055 // end
Из таблицы видно, что
минимум локализирован и
График функции:
Код программы:
// job bisec
// exec fortran
PROGRAM MAIN
*
* Оптимальное проектирование цил
* интервала пополам.
*
REAL S,A,B,EPS
EXTERNAL S
A=500.0
B=2000.0
EPS=0.01
CALL BISEC(S,A,B,EPS)
PRINT 10,A,B
10 FORMAT (//' Окончательный интервал: A=',1PG12.5,' B=',1PG12.5)
STOP
END
REAL FUNCTION S(D)
REAL D
S=480000/D+0.000087*D**2
RETURN
END
// exec fortran bisec.f
// exec link
// exec *
// end
Результат выполнения:
RPSCP: RPS Control Program, v1.8 (for 32-bit MS Windows)
Fri Nov 23 10:50:22 2012
0001 // job bisec
0002 // exec fortran
0023 // exec fortran bisec.f
0024 // exec link
0025 // exec *
МЕТОД ДЕЛЕНИЯ ИНТЕРВАЛА ПОПОЛАМ
A= 500.00 B= 2000.0 EPS= 1.00000E-02
K A B X F(X)
0 500.00 2000.0 1250.0 519.94
1 875.00 1625.0 1250.0 519.94
2 1250.0 1625.0 1437.5 513.69
3 1343.8 1531.3 1437.5 513.69
4 1343.8 1437.5 1390.6 513.41
5 1390.6 1437.5 1414.1 513.41
6 1390.6 1414.1 1402.3 513.38
7 1396.5 1408.2 1402.3 513.38
8 1399.4 1405.3 1402.3 513.38
9 1400.9 1403.8 1402.3 513.38
10 1401.6 1403.1 1402.3 513.38
11 1402.0 1402.7 1402.3 513.38
12 1402.2 1402.5 1402.3 513.38
13 1402.3 1402.4 1402.3 513.38
14 1402.3 1402.4 1402.3 513.38
15 1402.3 1402.4 1402.3 513.38
16 1402.3 1402.4 1402.3 513.38
17 1402.3 1402.3 1402.3 513.38
18 1402.3 1402.3 1402.3 513.38
Окончательный интервал: A= 1402.3 B= 1402.3
0026 // end
Оптимальное решение: 1402.3, при такой скорости общий расход топлива будет наименьшим.
Оптимум: 513.38
1% от оптимума: 5.1338
Левая граница: 1266.98108
Правая граница: 1547.32275
S(x1): 518.51
S(x2): 518.51
Разница: 5.1337280273
Чувствительность: 0.096497871
Отклонение: 135.31897
Допустимая точность: 270.637939
Таким образом мы можем задавать скорость с точностью 270.638
Метод деления пополам е=0.01
A= 500.00 B= 2000.0 EPS= 1.00000E-02
Будет выполнено 18 шаг(а,ов)
K A B X F(X)
0 500.00 2000.0 1250.0 519.94
1 875.00 1625.0 1250.0 519.94
2 1250.0 1625.0 1437.5 513.69
3 1343.8 1531.3 1437.5 513.69
… … … … …
15 1402.3 1402.4 1402.3 513.38
16 1402.3 1402.4 1402.3 513.38
17 1402.3 1402.3 1402.3 513.38
18 1402.3 1402.3 1402.3 513.38
Окончательный интервал: A= 1402.3 B= 1402.3
Метод Фибоначчи е=0.01
A= 500.00 B= 2000.0 EPS= 1.00000E-02
Будет выполнено 25 шаг(а,ов)
K A B X F(X)
0 500.00 2000.0 1072.9 547.52
1 1072.9 2000.0 1427.1 513.53
2 1072.9 1645.9 1427.1 513.53
3 1291.8 1645.9 1427.1 513.53
… … … … …
22 1402.9 1402.9 1402.9 513.38
23 1402.9 1402.9 1402.9 513.38
24 1402.9 1402.9 1402.9 513.38
25 1402.9 1402.9 1402.9 513.38
Окончательный интервал: A= 1402.9 B= 1402.9
Метод золотого сечения е=0.01
A= 500.00 B= 2000.0 EPS= 1.00000E-02
Будет выполнено 25 шаг(а,ов)
K A B X F(X)
0 500.00 2000.0 1072.9 547.52
1 1072.9 2000.0 1427.1 513.53
2 1072.9 1645.9 1427.1 513.53
3 1291.8 1645.9 1427.1 513.53
… … … … …
22 1402.9 1402.9 1402.9 513.38
23 1402.9 1402.9 1402.9 513.38
24 1402.9 1402.9 1402.9 513.38
25 1402.9 1402.9 1402.9 513.38
Окончательный интервал: A= 1402.9 B= 1402.9
Метод деления пополам е=0.001
A= 500.00 B= 2000.0 EPS= 1.00000E-03
Будет выполнено 21 шаг(а,ов)
K A B X F(X)
0 500.00 2000.0 1250.0 519.94
1 875.00 1625.0 1250.0 519.94
2 1250.0 1625.0 1437.5 513.69
3 1343.8 1531.3 1437.5 513.69
… … … … …
18 1402.3 1402.3 1402.3 513.38
19 1402.3 1402.3 1402.3 513.38
20 1402.3 1402.3 1402.3 513.38
21 1402.3 1402.3 1402.3 513.38
Окончательный интервал: A= 1402.3 B= 1402.3
Метод Фибоначчи е=0.001
A= 500.00 B= 2000.0 EPS= 1.00000E-03
Будет выполнено 30 шаг(а,ов)
K A B X F(X)
0 500.00 2000.0 1072.9 547.52
1 1072.9 2000.0 1427.1 513.53
2 1072.9 1645.9 1427.1 513.53
3 1291.8 1645.9 1427.1 513.53
… … … … …
27 1402.9 1402.9 1402.9 513.38
28 1402.9 1402.9 1402.9 513.38
29 1402.9 1402.9 1402.9 513.38
30 1402.9 1402.9 1402.9 513.38
Окончательный интервал: A= 1402.9 B= 1402.9
Метод золотого сечения е=0.001
A= 500.00 B= 2000.0 EPS= 1.00000E-03
Будет выполнено 30 шаг(а,ов)
K A B X F(X)
0 500.00 2000.0 1072.9 547.52
1 1072.9 2000.0 1427.1 513.53
2 1072.9 1645.9 1427.1 513.53
3 1291.8 1645.9 1427.1 513.53
… … … … …
27 1402.9 1402.9 1402.9 513.38
28 1402.9 1402.9 1402.9 513.38
29 1402.9 1402.9 1402.9 513.38
30 1402.9 1402.9 1402.9 513.38
Окончательный интервал: A= 1402.9 B= 1402.9
Метод деления пополам е=0.0001
A= 500.00 B= 2000.0 EPS= 1.00000E-04
Будет выполнено 24 шаг(а,ов)
K A B X F(X)
0 500.00 2000.0 1250.0 519.94
1 875.00 1625.0 1250.0 519.94
2 1250.0 1625.0 1437.5 513.69
3 1343.8 1531.3 1437.5 513.69
4 1343.8 1437.5 1390.6 513.41
… … … … …
21 1402.3 1402.3 1402.3 513.38
22 1402.3 1402.3 1402.3 513.38
23 1402.3 1402.3 1402.3 513.38
24 1402.3 1402.3 1402.3 513.38
Окончательный интервал: A= 1402.3 B= 1402.3
Метод Фибоначчи е=0.0001
A= 500.00 B= 2000.0 EPS= 1.00000E-04
Будет выполнено 35 шаг(а,ов)
K A B X F(X)
0 500.00 2000.0 1072.9 547.52
1 1072.9 2000.0 1427.1 513.53
2 1072.9 1645.9 1427.1 513.53
3 1291.8 1645.9 1427.1 513.53
… … … … …
32 1402.9 1402.9 1402.9 513.38
33 1402.9 1402.9 1402.9 513.38
34 1402.9 1402.9 1402.9 513.38
35 1402.9 1402.9 1402.9 513.38
Окончательный интервал: A= 1402.9 B= 1402.9
Метод деления пополам е=0.00001
A= 500.00 B= 2000.0 EPS= 1.00000E-05
Будет выполнено 24 шаг(а,ов)
K A B X F(X)
0 500.00 2000.0 1250.0 519.94
1 875.00 1625.0 1250.0 519.94
2 1250.0 1625.0 1437.5 513.69
3 1343.8 1531.3 1437.5 513.69
… … … … …
21 1402.3 1402.3 1402.3 513.38
22 1402.3 1402.3 1402.3 513.38
23 1402.3 1402.3 1402.3 513.38
24 1402.3 1402.3 1402.3 513.38
Окончательный интервал: A= 1402.3 B= 1402.3
Метод Фибоначчи е=0.00001
A= 500.00 B= 2000.0 EPS= 1.00000E-05