IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Оптимизация функции нескольких переменных, Метод градиентного дробления шага
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Ребят, написал код по блок-схеме, вроде все правильно, НО тут мне выскакивает неизвестная мне ошибка( за год работы с паскалем впервые такую встретил) - Floating point overflov. Аналитичесое решения данного уравнения 6*x*x+3*y*y+10 дает нам координаты точки минимума (0;0). Начальную точку можно выбрать с кординатами (1;1) V- шаг дробления можно взять за 2

Очень прошу помощи, разобраться осталась малость.
Выкладываю блок-схему и код( код чуть чуть в целях личного удобства отличается от схемы, но разницы собсно значимой нету).

Код
Program MnogOptim;
Uses Crt;
var
j,k:integer;
x,y,s,V,V0,t,p,eps:real;

Function F(var x,y:real):real;
begin
f:=6*x*x+3*y*y+10;
end;

Function G1(var x:real):real; {частная производная по Х}
begin
g1:=12*x;
end;

Function G2(var y:real):real; {частная производная по Y}
begin
g2:=6*y;
end;

procedure GDH(var x,y,V:real);
var
  p,h1,h2,q,z:real;
begin
V:=V0;
j:=0;
s:=f(x,y);
while (j>=0) do begin {цикл для возведения 2 в степень j}
  j:=j*2;
   repeat
   j:=j*2;
   if j=0 then
    j:=1
   else
   h1:=g1(x);
   h2:=g2(y);
   q:=x-(V*h1)/j*2;
   z:=y-(V*h2)/j*2;
   p:=f(q,z);
   t:=((h1*h1+h2*h2)*V)/(j+1)*2;
   until (P<=(S-T));
   V:=V/j*2;
   j:=j+1
   end;
   end;
Procedure Input(var x,y,V0,eps:real);
begin
writeln('');
writeln('    Vvedite koordinati na4alnoi to4ki (x,y)');
writeln('');
write('  x=');
  read(x);
write('  y=');
  read(y);
writeln('');
writeln('zadaite na4alnii shag V0');
readln(V0);
writeln('');
writeln('    Zadaite to4nost eps');
writeln('');
write('  eps=');
read(eps);
end;

Procedure Otrezok(k: integer; var p,x,y,eps:real);
var
  h1,h2,f1:real;
begin
writeln('');
k:=0;
  Repeat
  GDH(x,y,V);
  h1:=g1(x);
  h2:=g2(y);
  x:=x-V*h1;
  y:=y-V*h2;
  f1:=f(x,y);
  k:=k+1;
  until ((abs(h1)<eps) and (abs(h2)<eps));
writeln('');
writeln(' X = ',x:5:4);
writeln(' Y = ',y:5:4);
writeln(' Zna4enie funkcii F = ',f(x,y):0:0);
readln;
end;

begin
TextBackGround(white);
TextColor(blue);
ClrScr;
Input(x,y,V0,eps);
Otrezok(k,p,x,y,eps);
readln;
end.


Сообщение отредактировано: 3 kilos -


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.09.2021 16:11
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name