Намирането на най-малко предварително определена целева функция

Намирането на най-малко предварително определена целева функция

Намирането на най-малко предварително определена целева функция

Поради факта, че методът на нулев ред на спускане, това е доста точна. Поради факта, че функцията за Rosenbrock има клисура помощ да достигне минималната точка не успя. спиране точка в този случай е доста далеч от минимум точка. В случай на минималната точка функция елипса се постига в 21 итерация, при стъпка з = 0.2. Въпреки това минимално точка предварително определена цел функция беше постигнато точно 91 на повторение, със стъпка з = 0.2, и с точност от 0.0001.

библиография

основния файл на проекта.

4. ITERATION_AMOUNT = 1000;

5. ЕПСИЛОН = 0.001; % точност

7. POINT_AMOUNT = 50; % Брой на точки

9% отправна точка

11. x_point_Ellipse (1) = 2;

12. x_point_Ellipse (2) = -2;

14. x_point_Rosenbrock (1) = 4;

15. x_point_Rosenbrock (2) = 3;

17. a1_T_point_CF (1) = 2;

18. a1_T_point_CF (2) = 4;

20.% А и В - стойностите за радиуси F-II. Ellipse.

24% първоначалните настройки функция W (и).

28. ELLIPSE = 'ELLIPSE;

29. ROSENBROCK = 'ROSENBROCK;

32. Част 1% Ойлер.

33. y_teor = FirstPart_EulerMethod (a1, Т, POINT_AMOUNT);

35% Част 2 coordinatewise оптимизация.

36.% функция [value_of_funct, X] = SecondPart_OptimizationCoordinate (function_name, Н, ЕПСИЛОН, ITERATION_AMOUNT, а, Ь, y_exp, number_y_exp, POINT_AMOUNT)

37. [y_Ellipse, x_Ellipse] = SecondPart_OptimizationCoordinate (елипса, Н, ЕПСИЛОН, ITERATION_AMOUNT, x_point_Ellipse, а, Ь, 1, 1, POINT_AMOUNT);

38. [y_Rosenbrock, x_Rosenbrock] = SecondPart_OptimizationCoordinate (ROSENBROCK, Н, ЕПСИЛОН, ITERATION_AMOUNT, x_point_Rosenbrock, а, Ь, 1, 1, POINT_AMOUNT);

40% част 3. RNG. CF

41. [CF, a1_T_1, a1_T_2, a1_T_3] = ThirdPart (CF_text, Н, ЕПСИЛОН, ITERATION_AMOUNT, a1_T_point_CF, а, Ь, y_teor, POINT_AMOUNT);

Функцията на метода на Ойлер.

1. функция y_Euler_50point = FirstPart_EulerMethod (a1, Т, POINT_AMOUNT)

3. глобалната y_Euler;

5. ITERATION_AMOUNT = 300; % Броят на точките за първи график.

6. x_t = 5; % От постоянна връзка х (т)

11. coeff_z1 = 120 * а1 / T. ^ 2 + 6;

12. coeff_z2 = 6 * a1-120 + 48 * а1 / Т;

13. coeff_x_t = 120 * а1 / T. ^ 2;

14.% free_term - без план.

15. free_term = coeff_x_t * x_t;

17. за I = 1: ITERATION_AMOUNT

18. z1 (I + 1) = Z1 (I) + Н * z2 (I);

19. z2 (I + 1) = z2 (I) + Н * (x_t-z1 (I) -0,4 * T * z2 (I)) / T. ^ 2;

20. y_Euler (I) = coeff_z1 * z1 (I) + coeff_z2 * z2 (I) - free_term;

24.% I = 1: ITERATION_AMOUNT;

26.% заглавието ( "Y графика на теоретичните точки 300. ');

28.% SaveAs (GCF, "изход", "BMP);

29% от резерва от 300 точки само 50 (POINT_AMOUNT)

31. step_cycle = ITERATION_AMOUNT / POINT_AMOUNT;

32. за I = 1: step_cycle: ITERATION_AMOUNT

33. y_Euler_50point (J) = y_Euler (I);

38.% I = 1: POINT_AMOUNT;

40.% заглавието ( "Y теоретично графика 50 точки (всеки 6). ');

Функция coordinatewise оптимизация

1. Част 2% coordinatewise оптимизация.

2. функция [value_of_funct, X] = SecondPart_OptimizationCoordinate (function_name, Н, ЕПСИЛОН, ITERATION_AMOUNT, x_start_point, а, Ь, y_exp, number_y_exp, POINT_AMOUNT)

8. ясно (varlist);

14. Преместване%. да пропуснете условията на изпитване извън предх. value_of_funct мин на последните три или не.

15. change_coord = 1;

16%, за да излезете контура ако броят. Повече повторения ITERATION_AMOUNT.

17. number_iteration = 1;

23. х (1,1) = x_start_point (1); Първо% координира, първата стойност.

24. х (2,1) = x_start_point (2); Второ% координира, първата стойност.

25. х (1,2) = х (промяна, I-1) + Н; Първо% координира, втора стойност.

26. х (2,2) = х (константа, I-1); Второ% координира, втора стойност.

28. value_of_funct (1) = Ellipse_Rosenbrock_or_CF (function_name, х (1,1) х (2,1), а, Ь, y_exp, number_y_exp, POINT_AMOUNT);

29. new_value_of_function = Ellipse_Rosenbrock_or_CF (function_name, х (1,2) х (2,2), а, Ь, y_exp, number_y_exp, POINT_AMOUNT);

31. ако new_value_of_function> value_of_funct (1)

33. х (1,2) = х (промяна, I-1) + Н;

34. value_of_funct (2) = Ellipse_Rosenbrock_or_CF (function_name, х (промяна, I), X (константа, I), а, Ь, y_exp, number_y_exp, POINT_AMOUNT);

37. value_of_funct (2) = new_value_of_function;

40% цикъл, докато абсолютната стойност на разликата функционира по-голяма прецизност епсилон и броя на повторенията е по-малко от ITERATION_AMOUNT (10000).

41. а (ABS (value_of_funct (I) -value_of_funct (I-1))> ЕПСИЛОН (number_iteration

43. number_iteration = number_iteration + 1;

45. change_coord = change_coord + 1;

47% добавите стъпка към първата координата.

48. х (промяна, l) = х (промяна, I-1) + Н;

49% втора координатна пренаписване.

50. х (постоянни, I) = х (константа, I-1);

51% се намери стойността на функцията на новите стойности.

52. new_value_of_function = Ellipse_Rosenbrock_or_CF (function_name, х (1 I), X (2, I), а, Ь, y_exp, number_y_exp, POINT_AMOUNT);

54%, ако функцията на настоящите стойности на повече от една функция на предходната, след з = H + (-1). друго value_of_funct (I) = new_value_of_function.

55. ако new_value_of_function> value_of_funct (I-1)

57% нула, последната стойност

58. х (промяна, l) = NaN;

59. I = I - 1; % Да се ​​върнете към предишната функция на минималната стойност

% 62. Ако положението на смяна крачка направена не по-малко от 3 точки, след като направи мин value_of_funct от последните 3. стойности.

63. ако (change_coord> = 3)

65%, ако функцията на стойностите на предишната стъпка е по-малко ток и по-малко, отколкото в етап I-2, след това да промените координира движението.

66. ако value_of_funct (I-1)> = value_of_funct (I)

68. След% Промяна координира темпо - zeroize change_coord.

69. change_coord = 0;

70. ако (константа == 1)

16. value_of_funct = сума ((y_exp (number_y_exp, :) - y_model) ^ 2) / POINT_AMOUNT ;.

20. value_of_funct = 1;


  1. % Част 3. CF
  2. функция [CF, a1_T_1, a1_T_2, a1_T_3] = ThirdPart (function_name, Н, ЕПСИЛОН, ITERATION_AMOUNT, a1_T_point_CF, а, Ь, y_teor, POINT_AMOUNT)
  3. % Y_max да отнеме от 1 част.
  4. y_max = макс (ABS (y_teor));
  5. .elta_y = у макс * Mu
  6. delta_y (1) = y_max * 0.005;
  7. delta_y (2) = y_max * 0,01;
  8. delta_y (3) = y_max * 0,02;
  9. % Генератора на случайни числа. Триъгълен шум.
  10. [Y_noise (1.), X_noise (1)] = RNG_Triangle (delta_y (1), POINT_AMOUNT);
  11. [Y_noise (2.), X_noise (2)] = RNG_Triangle (delta_y (2), POINT_AMOUNT);
  12. [Y_noise (3.), X_noise (3.)] = RNG_Triangle (delta_y (3), POINT_AMOUNT);
  13. y_exp (1.) = y_teor + x_noise (1.);
  14. y_exp (2.) = y_teor + x_noise (2).
  15. y_exp (3.) = y_teor + x_noise (3).
  16. I = 1: POINT_AMOUNT;
  17. s_exp1 = 'к';
  18. s_exp2 = "G";
  19. s_exp3 = "б";
  20. s_teor = "R";
  21. % Y изобразени експериментално.
  22. % Фигура;
  23. % Парцел (y_exp (1), s_exp1.);
  24. % Дял ( "Yexp1 - Black ');
  25. % Фигура;
  26. % Парцел (y_exp (2), s_exp2.);
  27. % Дял ( "Yexp2 - зелен ');
  28. % Фигура;
  29. % Парцел (I, y_exp (3), s_exp3, I, y_teor, s_teor.);
  30. % Дял ( "Yexp3 - син Yteor - червено. ');
  31. number_y_exp_1 = 1;
  32. number_y_exp_2 = 2;
  33. number_y_exp_3 = 3;
  34. [CF1, a1_T_1] = SecondPart_OptimizationCoordinate (function_name, Н, ЕПСИЛОН, ITERATION_AMOUNT, a1_T_point_CF, а, Ь, y_exp, number_y_exp_1, POINT_AMOUNT);
  35. [CF2, a1_T_2] = SecondPart_OptimizationCoordinate (function_name, Н, ЕПСИЛОН, ITERATION_AMOUNT, a1_T_point_CF, а, Ь, y_exp, number_y_exp_2, POINT_AMOUNT);
  36. [CF3, a1_T_3] = SecondPart_OptimizationCoordinate (function_name, Н, ЕПСИЛОН, ITERATION_AMOUNT, a1_T_point_CF, а, Ь, y_exp, number_y_exp_3, POINT_AMOUNT);
  37. Хвърля масиви% CF1, CF2, CF3 в двумерен масив от CF (3 :).
  38. size_CF (1) = размер (CF1, 2);
  39. size_CF (2) = размер (CF2, 2);
  40. size_CF (3) = размер (CF3, 2);
  41. за I = 1: size_CF (1)
  42. CF (1, т) = CF1 (I);
  43. край
  44. за I = 1: size_CF (2)
  45. CF (2, l) = CF2 (I);
  46. край
  47. за I = 1: size_CF (3)
  48. CF (3, l) = CF3 (I);
  49. край
  50. край
  1. Част 3%.
  2. % Генератора на случайни числа. на Delta y_noise.
  3. % Генератор на случайни числа. Триъгълен шум.
  4. функция [y_noise, x_noise] = RNG_Triangle (delta_y, POINT_AMOUNT)
  5. J = 1;
  6. докато й <= POINT_AMOUNT
  7. % А - хоризонтална права линия - аргумента. Ние генерираме редица -delta_y да delta_y.
  8. . А = -delta_y + (delta_y - (- delta_y)) * ранд ();
  9. % В - на вертикалната линия - функция. Ние се генерира число между 0 и 1 / delta_y.
  10. . В = 0 + (1 / delta_y-0) * ранд ();
  11. % Fprintf ( "Value_of_Function (а, delta_y) = \ п., Value_of_Function (а, delta_y));
  12. % Ако В е по-малко, след това генерира точка в триъгълник.
  13. ако RNG_Value_of_Function (а, delta_y)> б
  14. y_noise (J) = В;
  15. x_noise (J) = а;
  16. J = к + 1;
  17. приключи;
  18. приключи;
  19. % Фигура;
  20. % Draw хистограма.
  21. % Ист (x_noise);
  22. край
  1. Част 3%.
  2. % Изчисляване на функцията RNG за което аргумент "+" или "-".
  3. функция y_triangle = RNG_Value_of_Function (аргумент, delta_y)
  4. X1 = 0;
  5. Y1 = 1 / delta_y;
  6. Y2 = 0;
  7. % Хоризонтална стойност (аргумент) е по-голяма или по-малка от нула
  8. ако аргумент> 0
  9. Х2 = delta_y;
  10. още
  11. Х2 = -delta_y;
  12. приключи;
  13. y_triangle = (аргумент - х1) * (y2 - y1) / (х2 - х1) + y1;
  14. % Fprintf ( "y_triangle = \ п., Y_triangle);
  15. край

  1. %, Криви ниво и мин график търсене.
  2. функция draw_way_and_lines_level (function_name, X, LAST_NUMBER, value_of_funct, number_iteration, а, Ь, y_exp, number_y_exp, POINT_AMOUNT)
  3. ако strcmp (function_name "ELLIPSE) == 1
  4. title_plot = ( "елипса Функция ');
  5. x_contour = -5: 0.1: 5;
  6. y_contour = -5: 0.1: 5;
  7. [X, Y] = meshgrid (x_contour, y_contour);
  8. . Z = (X / а) ^ 2 + (Y / б) ^ 2 .;
  9. % Точка MIN
  10. min_x = 0;
  11. min_y = 0;
  12. contour_amount = 50;
  13. % Координатна изход табелка
  14. text_x = -4.8;
  15. text_y = -3.9;
  16. ElseIf strcmp (function_name "ROSENBROCK) == 1
  17. title_plot = ( "Rosenbroke Функция ');
  18. x_contour = -5: 0.1: 5;
  19. y_contour = -5: 0.1: 5;
  20. [X, Y] = meshgrid (x_contour, y_contour);
  21. Z = 100 * (Y - Х ^ 2) ^ 2 + (1 - X) ^ 2.;.
  22. % Точка MIN
  23. min_x = 1;
  24. min_y = 1;
  25. contour_amount = 200;
  26. % Координатна изход табелка
  27. text_x = -4.8;
  28. text_y = -3.9;
  29. ElseIf strcmp (function_name "CF") == 1
  30. % Title_plot = ( "CF (обективна функция));
  31. title_plot = strcat ( "CF ', num2str (number_y_exp)," (цел функция));
  32. a1_start = -2;
  33. a1_step = 0.2;
  34. a1_end = 13;
  35. a1_contour = a1_start: a1_step: a1_end;
  36. T_start = 1.8;
  37. T_step = a1_step;
  38. T_end = 7.8;
  39. T_contour = T_start: T_step: T_end;
  40. % Създаване на матрица от стойности на неизвестните параметри за изграждане на линии на ниво.
  41. [A1_plot, T_plot] = meshgrid (a1_contour, T_contour);
  42. iter_amount_a1 = (a1_end - a1_start) / a1_step + 1;
  43. iter_amount_T = (T_end - T_start) / T_step + 1;
  44. % Fprintf ( "iter_amount_a1 = \ п., Iter_amount_a1);
  45. % Fprintf ( "iter_amount_T = \ п., Iter_amount_T);
  46. % Тук са създаване на матрица от стойности CF за изграждане линии ниво.
  47. за I = 1: iter_amount_T
  48. за к = 1: iter_amount_a1
  49. y_model = FirstPart_EulerMethod (a1_plot (I, J), T_plot (I, J), POINT_AMOUNT);
  50. Z (I, J) = сума ((y_exp (number_y_exp) -y_model) ^ 2 ..) / POINT_AMOUNT;
  51. край
  52. край
  53. X = a1_plot;
  54. Y = T_plot;
  55. min_x = 10;
  56. min_y = 2;
  57. contour_amount = 500;
  58. text_x = -1.7;
  59. text_y = 2.5;
  60. край
  61. % фигура
  62. % Mesh (X, Y, Z);
  63. фигура
  64. контур (X, Y, Z, contour_amount);
  65. % на дисплея Ниво марки
  66. задържи;
  67. парцел (х (1.) х (2.), "к<-');
  68. % Минимална точка изход.
  69. парцел (min_x, min_y "R * ');
  70. заглавието (title_plot);
  71. текст (min_x-0,2, min_y + 0.4, "MIN", "BackgroundColor ', [. 7 0,7 0,7])
  72. % Vyvodnachalnoy точка в графиката
  73. текст (х (1,1) х (2,1), "А0.
  74. "BackgroundColor") [7 0,7 0,7.];
  75. % Оттегляне решение относно графика
  76. текст (text_x, text_y.
  77. CHAR ([ "х1 = 'num2str (х (1, LAST_NUMBER))].
  78. [ 'X2 =' num2str (х (2, LAST_NUMBER))].
  79. [ 'F () =' num2str (value_of_funct (LAST_NUMBER))].
  80. [ 'повторения - "num2str (number_iteration)]).
  81. "BackgroundColor") [7 0,7 0,7.];
  82. край