fork download
  1. program HuDjMody;
  2.  
  3. label 0,1,2,3,4,5,6,7;
  4.  
  5. var
  6. k,h,z,ps,bs,fb,fi :real;
  7. i,j,n,fe :integer;
  8. x,y,b,p :array[1..10] of real;
  9.  
  10. procedure calculate;
  11. begin
  12. z:=3*sqr(x[1]-5) + 3*sqr(x[2]-5) + 2*x[1]*x[2];
  13. if (x[1]<0) or (x[2]<0) or ((x[1]+x[2])<4) then
  14. z:=1.7e+38;
  15. fe:=fe+1;
  16. end;
  17.  
  18. begin
  19. n := 2;
  20. x[1] := 0;
  21. x[2] := 0;
  22. h := 1;
  23.  
  24. k:=h;
  25. fe:=0;
  26.  
  27. for i:=1 to n do
  28. begin
  29. y[i]:=x[i];
  30. p[i]:=x[i];
  31. b[i]:=x[i];
  32. end;
  33.  
  34. calculate;
  35. fi:=z;
  36.  
  37. writeln('Начальное значение функции: ', z:2:3);
  38. for i:=1 to n do
  39. writeln('x[',i,'] = ', x[i]:2:3);
  40.  
  41. ps:=0;
  42. bs:=1;
  43. j:=1;
  44. fb:=fi;
  45.  
  46. 0: x[j]:=y[j]+k;
  47. calculate;
  48. if z<fi then goto 1;
  49. x[j]:=y[j]-k;
  50. calculate;
  51. if z<fi then goto 1;
  52. x[j]:=y[j];
  53. goto 2;
  54.  
  55. 1: y[j]:=x[j];
  56.  
  57. 2: calculate;
  58. fi:=z;
  59. writeln('Пробный шаг ', z:2:3);
  60. for i:=1 to n do
  61. writeln(x[i]:2:3);
  62. if j=n then goto 3;
  63. j:=j+1;
  64. goto 0;
  65.  
  66. 3: if fi<fb-1e-08 then goto 6;
  67. if (ps=1) and (bs=0) then goto 4;
  68. goto 5;
  69.  
  70. 4: for i:=1 to n do
  71. begin
  72. p[i]:=b[i];
  73. y[i]:=b[i];
  74. x[i]:=b[i];
  75. end;
  76. calculate;
  77. bs:=1;
  78. ps:=0;
  79. fi:=z;
  80. fb:=z;
  81. writeln('Замена базисной точки ', z:2:3);
  82. for i:=1 to n do
  83. writeln(x[i]:1:3);
  84. j:=1;
  85. goto 0;
  86.  
  87. 5: k:=k/10;
  88. writeln('Уменьшить длину шага');
  89. if k<1e-08 then goto 7;
  90. j:=1;
  91. goto 0;
  92.  
  93. 6: for i:=1 to n do
  94. begin
  95. p[i]:=2*y[i]-b[i];
  96. b[i]:=y[i];
  97. x[i]:=p[i];
  98. y[i]:=x[i];
  99. end;
  100. calculate;
  101. fb:=fi;
  102. ps:=1;
  103. bs:=0;
  104. fi:=z;
  105. writeln('Поиск по образцу ', z:2:3);
  106. for i:=1 to n do
  107. writeln(x[i]:2:3);
  108. j:=1;
  109. goto 0;
  110.  
  111. 7: writeln('Минимум найден');
  112. for i:=1 to n do
  113. writeln('x(',i,')=',p[i]:2:3);
  114. writeln;
  115. writeln('Минимум функции равен ', fb:2:3);
  116. writeln('Количество вычислений функции равно ', fe);
  117. end.
  118.  
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Начальное значение функции: 169999999999999998047104694063282136060.554
x[1] = 0.000
x[2] = 0.000
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Уменьшить длину шага
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Уменьшить длину шага
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Уменьшить длину шага
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Уменьшить длину шага
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Уменьшить длину шага
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Уменьшить длину шага
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Уменьшить длину шага
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Уменьшить длину шага
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Пробный шаг 169999999999999998047104694063282136060.554
0.000
0.000
Уменьшить длину шага
Минимум найден
x(1)=0.000
x(2)=0.000

Минимум функции равен 169999999999999998047104694063282136060.554
Количество вычислений функции равно 55