Találjanak minimális előre meghatározott célfüggvény

Találjanak minimális előre meghatározott célfüggvény

Találjanak minimális előre meghatározott célfüggvény

Tekintettel arra, hogy az eljárás a zéró nagyságrendű származású, ez elég pontos. Tekintettel arra, hogy a Rosenbrock funkció szakadékba enyhülést elérni a minimális pontot sikerült. megállási pont ebben az esetben elég messze a minimális pontot. Abban az esetben, a minimális pont ellipszis funkciót értünk el 21 iterációs lépésben h = 0,2. Annak ellenére, hogy ez a minimális ponton előre meghatározott célfüggvény született pontosan 91 per iterációs, a h lépés = 0,2, és a pontossága 0,0001.

bibliográfia

A projekt fő fájlt.

4. ITERATION_AMOUNT = 1000;

5. EPSILON = 0,001; % Pontosság

7. POINT_AMOUNT = 50; % Pontok száma

9% kiindulási pont

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.% a és b - az értékeket a sugarak F-II. Ellipszis.

24% kiindulási beállítások funkciót W (k).

28. ELLIPSE = 'ellipszis';

29. Rosenbrock = 'Rosenbrock';

32. rész 1% Euler.

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

35% 2. rész coordinatewise optimalizálás.

36.% funkciót [value_of_funct, X] = SecondPart_OptimizationCoordinate (függvény_neve, h, epszilon, ITERATION_AMOUNT, a, b, y_exp, number_y_exp, POINT_AMOUNT)

37. [y_Ellipse, x_Ellipse] = SecondPart_OptimizationCoordinate (ellipszis, h, epszilon, ITERATION_AMOUNT, x_point_Ellipse, a, b, -1, -1, POINT_AMOUNT);

38. [y_Rosenbrock, x_Rosenbrock] = SecondPart_OptimizationCoordinate (Rosenbrock, h, epszilon, ITERATION_AMOUNT, x_point_Rosenbrock, a, b, -1, -1, POINT_AMOUNT);

40% 3. rész RNG. CF

41. [CF, a1_T_1, a1_T_2, a1_T_3] = ThirdPart (CF_text, h, epszilon, ITERATION_AMOUNT, a1_T_point_CF, a, b, y_teor, POINT_AMOUNT);

A funkció a Euler módszer.

1. funkció y_Euler_50point = FirstPart_EulerMethod (a1, T, POINT_AMOUNT)

3. globális y_Euler;

5. ITERATION_AMOUNT = 300; % A pontok száma az első menetrend.

6. x_t = 5; % Az állandó hivatkozási x (t)

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

12. coeff_z2 = 6 * a1-120 + 48 * a1 / T;

13. coeff_x_t = 120 * a1 / T. ^ 2;

14.% free_term - szabad távon.

15. free_term = coeff_x_t * x_t;

17. i = 1: ITERATION_AMOUNT

18. z1 (i + 1) = z1 (i) + h * z2 (i);

19. z2 (i + 1) = z2 (i) + h * (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.% cím (”. Y gráf elméleti pontok 300' );

28.% saveas (GCF, 'output', 'bmp');

29% -át a tartalék 300 pontok mindössze 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.% cím ( 'Y elméleti grafikon 50 pont (minden 6).');

Funkció optimalizálás coordinatewise

1. rész 2% coordinatewise optimalizálás.

2. funkció [value_of_funct, X] = SecondPart_OptimizationCoordinate (függvény_neve, h, epszilon, ITERATION_AMOUNT, x_start_point, a, b, y_exp, number_y_exp, POINT_AMOUNT)

8. tiszta (varlist);

14. Mozgás%. hogy kihagyja a vizsgálati feltételeket ki dok. value_of_funct perc az utolsó három, vagy sem.

15. change_coord = 1;

16%, hogy kilépjen a hurok, ha a gróf. Több ismétléseket ITERATION_AMOUNT.

17. number_iteration = 1;

23. X (1,1) = x_start_point (1); % Első koordinálja, az első érték.

24. X (2,1) = x_start_point (2); % Második koordináta, az első érték.

25. X (1,2) = x (a változás, i-1) + H; % Első koordinálja, a második érték.

26. X (2,2) = x (konstans, i-1); % Második koordináta, a második érték.

28. value_of_funct (1) = Ellipse_Rosenbrock_or_CF (function_name, x (1,1), x (2,1), a, b, y_exp, number_y_exp, POINT_AMOUNT);

29. new_value_of_function = Ellipse_Rosenbrock_or_CF (function_name, x (1,2), X (2,2), a, b, y_exp, number_y_exp, POINT_AMOUNT);

31. Ha new_value_of_function> value_of_funct (1)

33. X (1,2) = x (a változás, i-1) + H;

34. value_of_funct (2) = Ellipse_Rosenbrock_or_CF (function_name, X (változás, i), X (konstans, i), a, b, y_exp, number_y_exp, POINT_AMOUNT);

37. value_of_funct (2) = new_value_of_function;

40% a ciklust a modulusa a különbség funkciók nagyobb pontosság epszilon és az iterációk számát kevesebb, mint ITERATION_AMOUNT (10000).

41. míg (abs (value_of_funct (i) -value_of_funct (i-1))> Epsilon (number_iteration

43. number_iteration = number_iteration + 1;

45. change_coord = change_coord + 1;

47% hozzá a lépést, hogy az első koordináta.

48. X (változás, i) = x (a változás, i-1) + H;

49% második koordináta újraírása.

50. X (konstans, i) = x (konstans, i-1);

51% megtalálják a függvény értéke az új értékeket.

52. new_value_of_function = Ellipse_Rosenbrock_or_CF (function_name, X (1, ​​i), X (2, i), a, b, y_exp, number_y_exp, POINT_AMOUNT);

54%, ha a funkció a pillanatnyi értékei több mint egy funkciót a korábbi, majd h = h * (-1). egyébként value_of_funct (i) = new_value_of_function.

55. Ha new_value_of_function> value_of_funct (i-1)

57% nullára ki az utolsó érték

58. X (változás, i) = NaN;

59. i = i - 1; % Visszatérés az előző minimális érték függvény

% 62. Ha a sebességváltó pozíció tempójú készült nem kevesebb, mint 3 pontot, akkor azáltal, hogy min value_of_funct az utolsó 3. értékeket.

63. Ha (change_coord> = 3)

65%, ha a funkció az értékek az előző lépésben kevesebb a jelenlegi és a kevesebb, mint lépésben i-2, majd változtassa meg a koordináta-mozgást.

66. Ha value_of_funct (i-1)> = value_of_funct (i)

68. Miután Változás% koordináták ingerelt - zeroize change_coord.

69. change_coord = 0;

70. Ha (állandó == 1)

16. value_of_funct = sum ((y_exp (number_y_exp, :) - y_model) ^ 2) / POINT_AMOUNT ;.

20. value_of_funct = -1;


  1. % 3. rész CF
  2. funkció [CF, a1_T_1, a1_T_2, a1_T_3] = ThirdPart (függvény_neve, h, epszilon, ITERATION_AMOUNT, a1_T_point_CF, a, b, y_teor, POINT_AMOUNT)
  3. % Y_max venni 1 rész.
  4. y_max = max (abs (y_teor));
  5. .elta_y = y max * 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. % A véletlenszám-generátor. Háromszög zaj.
  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 = 'k';
  18. s_exp2 = 'g';
  19. s_exp3 = 'b';
  20. s_teor = 'R';
  21. % Y ábrázoltuk kísérleti.
  22. % Ábra;
  23. % Plot (y_exp (1), s_exp1.);
  24. % Cím (Yexp1 - fekete ');
  25. % Ábra;
  26. % Plot (y_exp (2), s_exp2.);
  27. % Cím (Yexp2 - zöld ');
  28. % Ábra;
  29. % Plot (i, y_exp (3), s_exp3, i, y_teor, s_teor.);
  30. % Cím (Yexp3 - kék Yteor - piros. ');
  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 (függvény_neve, h, epszilon, ITERATION_AMOUNT, a1_T_point_CF, a, b, y_exp, number_y_exp_1, POINT_AMOUNT);
  35. [CF2, a1_T_2] = SecondPart_OptimizationCoordinate (függvény_neve, h, epszilon, ITERATION_AMOUNT, a1_T_point_CF, a, b, y_exp, number_y_exp_2, POINT_AMOUNT);
  36. [CF3, a1_T_3] = SecondPart_OptimizationCoordinate (függvény_neve, h, epszilon, ITERATION_AMOUNT, a1_T_point_CF, a, b, y_exp, number_y_exp_3, POINT_AMOUNT);
  37. Throws tömbök% CF1, CF2, CF3 egy kétdimenziós tömb CF (3 :).
  38. size_CF (1) = mérete (CF1, 2);
  39. size_CF (2) = mérete (CF2, 2);
  40. size_CF (3) = mérete (CF3, 2);
  41. i = 1: size_CF (1)
  42. CF (1, i) = CF1 (i);
  43. vég
  44. i = 1: size_CF (2)
  45. CF (2, i) = CF2 (i);
  46. vég
  47. i = 1: size_CF (3)
  48. CF (3, i) = CF3 (i);
  49. vég
  50. vég
  1. Part 3%.
  2. % A véletlenszám-generátor. A Delta y_noise.
  3. % Véletlenszám-generátor. Háromszög zaj.
  4. funkció [y_noise, x_noise] = RNG_Triangle (delta_y, POINT_AMOUNT)
  5. j = 1;
  6. míg j <= POINT_AMOUNT
  7. % A - egy vízszintes egyenes vonal - az érvelés. Mi generál számos -delta_y a delta_y.
  8. . A = -delta_y + (delta_y - (- delta_y)) * rand ();
  9. % B - a függőleges vonal - funkciót. Mi generál egy számot 0 és 1 / delta_y.
  10. . B = 0 + (1 / delta_y-0) * rand ();
  11. % Fprintf ( 'Value_of_Function (a, delta_y) = \ n.', Value_of_Function (a, delta_y));
  12. % Ha b kisebb, akkor generált egy pont belsejében egy háromszög.
  13. ha RNG_Value_of_Function (a, delta_y)> b
  14. y_noise (j) = b;
  15. x_noise (j) = a;
  16. J = j + 1;
  17. végén;
  18. végén;
  19. % Ábra;
  20. % Rajzolj egy hisztogramot.
  21. % Hist (x_noise);
  22. vég
  1. Part 3%.
  2. % Kiszámítása a RNG funkció amelyik érv „+” vagy „-”.
  3. funkció y_triangle = RNG_Value_of_Function (argumentum, delta_y)
  4. x1 = 0;
  5. y1 = 1 / delta_y;
  6. y2 = 0;
  7. % Vízszintes érték (argumentum) nagyobb vagy kisebb, mint nulla
  8. Ha argumentum> 0
  9. x2 = delta_y;
  10. más
  11. x2 = -delta_y;
  12. végén;
  13. y_triangle = (argumentum - x1) * (y2 - y1) / (x2 - x1) + y1;
  14. % Fprintf ( 'y_triangle = \ n.', Y_triangle);
  15. vég

  1. %, Level görbék és min keresési ütemtervet.
  2. funkció draw_way_and_lines_level (függvény_neve, x, LAST_NUMBER, value_of_funct, number_iteration, a, b, y_exp, number_y_exp, POINT_AMOUNT)
  3. ha strcmp (függvény_neve, 'ellipszis') == 1
  4. title_plot = ( 'Ellipse Function');
  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 / a) ^ 2 + (Y / b) ^ 2 .;
  9. % Point MIN
  10. min_x = 0;
  11. min_y = 0;
  12. contour_amount = 50;
  13. % Koordináta adatokat kimeneti lemez
  14. text_x = -4.8;
  15. text_y = -3.9;
  16. elseif strcmp (függvény_neve, 'Rosenbrock') == 1
  17. title_plot = ( 'Rosenbroke Function');
  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 - X. ^ 2) ^ 2 + (1 - X) ^ 2.;.
  22. % Point MIN
  23. min_x = 1;
  24. min_y = 1;
  25. contour_amount = 200;
  26. % Koordináta adatokat kimeneti lemez
  27. text_x = -4.8;
  28. text_y = -3.9;
  29. elseif strcmp (függvény_neve, 'CF') == 1
  30. % Title_plot = ( 'CF (célfüggvény)');
  31. title_plot = strcat ( 'CF', num2str (number_y_exp), '(célfüggvény)');
  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. % Létrehozása a mátrix értékek az ismeretlen paramétereket az építési szintvonalakat.
  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 = \ n.', Iter_amount_a1);
  45. % Fprintf ( 'iter_amount_T = \ n.', Iter_amount_T);
  46. % Itt létrehozunk egy mátrixot CF értékek építeni a szintvonalakat.
  47. i = 1: iter_amount_T
  48. j = 1: iter_amount_a1
  49. y_model = FirstPart_EulerMethod (a1_plot (i, j), T_plot (i, j), POINT_AMOUNT);
  50. Z (i, j) = sum ((y_exp (number_y_exp) -y_model) ^ 2 ..) / POINT_AMOUNT;
  51. vég
  52. vég
  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. vég
  61. % -os érték
  62. % Mesh (X, Y, Z);
  63. ábra
  64. kontúr (X, Y, Z, contour_amount);
  65. % Szint kijelző jelek
  66. tartsa;
  67. plot (x (1), X (2), „k<-');
  68. % Minimális kimeneti ponttal.
  69. plot (min_x, min_y, 'R *');
  70. Cím (title_plot);
  71. szöveges (min_x-0,2, min_y + 0,4, 'MIN', 'BackgroundColor', [. 7 .7 .7])
  72. % Vyvodnachalnoy pontra a grafikonon
  73. szöveget (x (1,1), x (2,1), 'A0'.
  74. 'BackgroundColor',) [7 .7 .7.];
  75. % Visszavonása döntés a menetrend
  76. szövege (text_x, text_y.
  77. char ([ 'x1 =' num2str (x (1, LAST_NUMBER))].
  78. [ 'X2 =' num2str (x (2, LAST_NUMBER))].
  79. [ 'F () =' num2str (value_of_funct (LAST_NUMBER))].
  80. [ 'Ismétlések -' num2str (number_iteration)]).
  81. 'BackgroundColor',) [7 .7 .7.];
  82. vég