Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик отчет на сдачу.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
514.79 Кб
Скачать

Часть 4. Целевая функция.

Создадим математическую модель процесса с коэффициентами a1=8 и T=1 и подберем их таким образом, чтобы при данных значениях целевая функция была минимальна.

Выберем шаг h = 0.2. Точность EPSILON = 0.0001. Количество итераций ITERATION_AMOUNT = 1000.

Результаты пошагового приближения показаны в таблице 3 “Зависимость CF от значений a1 и T”, график CF представлен на рис.7

CF1min = 8,901453

CF2min = 44,05068

CF3min = 132,7882

Таблица 3

«Зависимость CF от значений параметров a1 и T»

шага

A1

T

CF1 (m=0,005)

CF2 (m=0,01)

CF 3(m=0,02)

1

8

1

1,884E+12

1,884E+12

1,884E+12

2

8

1

1,884E+12

1,884E+12

1,884E+12

3

7,8

1

1,784E+12

1,784E+12

1,784E+12

4

7,6

1

1,686E+12

1,686E+12

1,686E+12

5

7,4

1

1,591E+12

1,591E+12

1,591E+12

6

7,2

1

1,499E+12

1,499E+12

1,499E+12

7

7

1

1,409E+12

1,409E+12

1,409E+12

8

6,8

1

1,323E+12

1,323E+12

1,323E+12

9

6,6

1

1,239E+12

1,239E+12

1,239E+12

10

6,4

1

1,158E+12

1,158E+12

1,158E+12

11

6,2

1

1,079E+12

1,079E+12

1,079E+12

12

6

1

1,004E+12

1,004E+12

1,004E+12

13

5,8

1

9,309E+11

9,309E+11

9,309E+11

14

5,6

1

8,609E+11

8,609E+11

8,609E+11

15

5,4

1

7,936E+11

7,936E+11

7,936E+11

16

5,2

1

7,291E+11

7,291E+11

7,291E+11

17

5

1

6,673E+11

6,673E+11

6,673E+11

18

4,8

1

6,083E+11

6,083E+11

6,083E+11

19

4,6

1

5,521E+11

5,521E+11

5,521E+11

20

4,4

1

4,987E+11

4,987E+11

4,987E+11

21

4,2

1

4,48E+11

4,48E+11

4,48E+11

22

4

1

4,001E+11

4,001E+11

4,001E+11

23

3,8

1

3,55E+11

3,55E+11

3,55E+11

24

3,6

1

3,126E+11

3,126E+11

3,126E+11

25

3,4

1

2,73E+11

2,73E+11

2,73E+11

26

3,2

1

2,362E+11

2,362E+11

2,362E+11

27

3

1

2,021E+11

2,021E+11

2,021E+11

28

2,8

1

1,708E+11

1,708E+11

1,708E+11

29

2,6

1

1,423E+11

1,423E+11

1,423E+11

30

2,4

1

1,166E+11

1,166E+11

1,166E+11

31

2,2

1

9,359E+10

9,359E+10

9,359E+10

32

2

1

7,337E+10

7,337E+10

7,337E+10

33

1,8

1

5,592E+10

5,592E+10

5,592E+10

34

1,6

1

4,124E+10

4,124E+10

4,124E+10

35

1,4

1

2,933E+10

2,933E+10

2,933E+10

36

1,2

1

2,019E+10

2,019E+10

2,019E+10

37

1

1

1,381E+10

1,381E+10

1,381E+10

38

0,8

1

1,021E+10

1,021E+10

1,021E+10

39

0,6

1

9,37E+09

9,37E+09

9,371E+09

40

0,6

1,2

586850,911

585505,007

588790,108

41

0,6

1,4

124642,353

124498,296

125774,153

42

0,6

1,6

105470,917

105284,132

105939,099

43

0,6

1,8

98001,114

98219,831

98781,217

44

0,8

1,8

94310,316

94510,650

95055,002

45

1

1,8

90793,658

90975,608

91502,927

46

1,2

1,8

87451,139

87614,705

88124,991

47

1,4

1,8

84282,760

84427,942

84921,195

48

1,6

1,8

81288,521

81415,318

81891,538

49

1,8

1,8

78468,421

78576,834

79036,021

50

2

1,8

75822,460

75912,490

76354,643

51

2,2

1,8

73350,640

73422,285

73847,405

52

2,4

1,8

71052,958

71106,220

71514,306

53

2,6

1,8

68929,416

68964,294

69355,347

54

2,8

1,8

66980,014

66996,507

67370,527

55

3

1,8

65204,751

65202,860

65559,847

56

3,2

1,8

63603,628

63583,353

63923,306

57

3,4

1,8

62176,644

62137,985

62460,905

58

3,6

1,8

60923,800

60866,757

61172,644

59

3,8

1,8

59845,095

59769,668

60058,522

60

4

1,8

58940,529

58846,719

59118,539

61

4,2

1,8

58210,104

58097,909

58352,696

62

4,4

1,8

57653,818

57523,239

57760,992

63

4,6

1,8

57271,671

57122,708

57343,429

64

4,8

1,8

57063,664

56896,317

57100,004

65

5

1,8

57029,796

56844,065

57030,719

66

5

2

32987,463

33084,055

33539,979

67

5,2

2

30410,132

30504,267

30945,503

68

5,4

2

27937,650

28029,328

28455,877

69

5,6

2

25570,018

25659,237

26071,099

70

5,8

2

23307,234

23393,996

23791,170

71

6

2

21149,300

21233,604

21616,090

72

6,2

2

19096,214

19178,060

19545,860

73

6,4

2

17147,978

17227,366

17580,478

74

6,6

2

15304,590

15381,521

15719,945

75

6,8

2

13566,052

13640,525

13964,261

76

7

2

11932,362

12004,378

12313,427

77

7,2

2

10403,522

10473,079

10767,441

78

7,4

2

8979,530

9046,630

9326,304

79

7,6

2

7660,388

7725,030

7990,017

80

7,8

2

6446,094

6508,279

6758,578

81

8

2

5336,650

5396,377

5631,989

82

8,2

2

4332,055

4389,323

4610,248

83

8,4

2

3432,308

3487,119

3693,356

84

8,6

2

2637,411

2689,764

2881,314

85

8,8

2

1947,362

1997,258

2174,120

86

9

2

1362,163

1409,601

1571,776

87

9,2

2

881,813

926,793

1074,280

88

9,4

2

506,311

548,834

681,634

89

9,6

2

235,659

275,724

393,836

90

9,8

2

69,856

107,463

210,888

91

10

2

8,901

44,051

132,788

N = 91

(рис.7)

Листинг программы:

  1. %Часть 2. Оптимизация покоординатно.

  2. function SecondPart_OptimizationCoordinate(function_name, h, EPSILON, ITERATION_AMOUNT, a, b)

  3. global x;

  4. global y;

  5. %Перем. для пропуска проверки условия на то, предыд. y min из последних трех или нет.

  6. change_coord = 1;

  7. %Для выхода из цикла, если кол-во. итераций больше ITERATION_AMOUNT.

  8. number_iteration = 1;

  9. change = 1;

  10. constant = 2;

  11. i = 2;

  12. x(1,1) = 2; %первая координата, первое значение.

  13. x(2,1) = 2; %вторая координата, первое значение.

  14. x(1,2) = x(change,i-1) + h; %первая координата, второе значение.

  15. x(2,2) = x(constant,i-1); %вторая координата, второе значение.

  16. y(1) = EllipseFunct_or_FunctRosenbrock(function_name, x(1,1), x(2,1), a, b);

  17. new_value_of_function = EllipseFunct_or_FunctRosenbrock(function_name, x(1,2), x(2,2), a, b);

  18. if new_value_of_function > y(1)

  19. h = h* (-1);

  20. x(1,2) = x(change,i-1) + h;

  21. y(2) = EllipseFunct_or_FunctRosenbrock(function_name, x(change,i), x(constant,i), a ,b);

  22. else

  23. y(2) = new_value_of_function;

  24. end

  25. %Цикл пока модуль разности функций больше точности эпсилон и количество итераций меньше ITERATION_AMOUNT(10000).

  26. while (abs(y(i)-y(i-1)) > EPSILON && (number_iteration < ITERATION_AMOUNT))

  27. number_iteration = number_iteration + 1;

  28. i = i + 1;

  29. change_coord = change_coord + 1;

  30. %прибавляем шаг к первой координате.

  31. x(change,i) = x(change,i-1) + h;

  32. %вторую координату переписываем.

  33. x(constant,i) = x(constant,i-1);

  34. %находим значение функции от новых значений.

  35. new_value_of_function = EllipseFunct_or_FunctRosenbrock(function_name, x(1,i), x(2,i), a, b);

  36. %если функция от текущих значений больше функции от предыдущих, то h = h* (-1), ... иначе y(i) = new_value_of_function.

  37. if new_value_of_function > y(i-1)

  38. %обнуляем последнее значение

  39. x(change,i) = NaN;

  40. i = i - 1; %чтобы вернуться к предыдущему минимальному значению функции

  41. h = h* (-1);

  42. %Если после смены координаты, по которой шагаем сделали не меньше 3 точек, то делаем проверку min y из последних 3-х. значений.

  43. if (change_coord >= 3)

  44. %если функция от значений на предыдущем шаге меньше текущих и меньше чем на шаге i-2, то меняем координату перемещения.

  45. if y(i-1) >= y(i)

  46. %После перемены координаты по которой шагаем - обнуляем change_coord.

  47. change_coord = 0;

  48. if (constant == 1)

  49. constant = 2;

  50. change = 1;

  51. else

  52. constant = 1;

  53. change = 2;

  54. end

  55. end

  56. end

  57. else

  58. y(i) = new_value_of_function;

  59. end

  60. end %конец цикла while

  61. %=====================Графическая часть==========================

  62. %построение графика

  63. x_contour = -5:0.1:5;

  64. y_contour = -5:0.1:5;

  65. [X, Y] = meshgrid(x_contour, y_contour);

  66. if strcmp(function_name, 'ELLIPSE') == 1

  67. title_plot = ('Функция Эллипса');

  68. Z = (X/a).^2 + (Y/b).^2;

  69. min_x = 0;

  70. min_y = 0;

  71. contour_amount = 50;

  72. elseif strcmp(function_name, 'ROSENBROCK') == 1

  73. title_plot = ('Функция Розенброка');

  74. Z = 100 * (Y - X.^2).^2 + (1 - X).^2;

  75. min_x = 1;

  76. min_y = 1;

  77. contour_amount = 200;

  78. end

  79. %figure

  80. %mesh(X,Y,Z);

  81. figure

  82. contour(X, Y, Z, contour_amount);

  83. % отображение меток уровня

  84. hold on;

  85. plot(x(1, :), x(2, :), '<-');

  86. %вывод точки минимума.

  87. plot(min_x, min_y, 'r*');

  88. title(title_plot);

  89. text(min_x-0.2, min_y-0.4,'MIN')

  90. % выводначальной точки на график

  91. text(x(1,1), x(2,1), 'A0', ...

  92. 'BackgroundColor',[.7 .7 .7]);

  93. % вывод решения на график

  94. text(-4.9, -3.9, ...

  95. char(['x1 = ' num2str(x(1,i))], ...

  96. ['x2 = ' num2str(x(2,i))], ...

  97. ['y = ' num2str(y(i))], ...

  98. ['итераций - ' num2str(number_iteration)]), ...

  99. 'BackgroundColor',[.7 .7 .7]);

  100. end

Код функции y = EllipseFunct_or_FunctRosenbrock:

  1. %Функция для вычисления значения ф-ии. F(x1, x2) по Розенброку или по ф-ии. Эллипса.

  2. function y = EllipseFunct_or_FunctRosenbrock(function_name, x_0_i, x_1_i, a, b)

  3. if strcmp(function_name, 'ROSENBROCK') == 1

  4. y = 100 * (x_1_i - x_0_i.^2).^2 + (1 - x_0_i).^2;

  5. return

  6. elseif strcmp(function_name, 'ELLIPSE') == 1

  7. y = x_0_i.^2/a.^2 + x_1_i.^2/b.^2;

  8. return

  9. else

  10. y = -1;

  11. return

  12. end

  13. end