Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 курс / Численные методы / Задание 6 / Легкий спуск по координатам

.pas
Скачиваний:
20
Добавлен:
29.03.2016
Размер:
1.55 Кб
Скачать
function f(x1,x2:real):real;
begin
f:= (x1*x1+x2*x2)-10*(sin(x1*x2))*(sin(x1*x2));
end;
var
k,i,j:integer;
x10,x20,x1,x2,h,eps:real;
grad1,grad2,modgrd:real;
proizv1,proizv2,a,b,shag:real;
begin
writeln;
writeln('Введите начальные данные:');
writeln;
writeln('Введите шаг h=');
readln(h);
writeln('Введите точность eps=');
readln(eps);
write('Введите число итераций k=');
readln(k);
writeln;
writeln('Введите Начальное приближение (x10,x20)');
write('x10=');
readln(x10);
write('x20=');
readln(x20);
write(' Начальное приближение и значение в этой точке функции:');
write(' x10=',x10:9:5,' x20=',x20:9:5);
writeln('f(x10,x20)=',f(x10,x20):15:8);
writeln;
writeln('Результаты:');
writeln;
writeln('f(x1k,x2k) :');
writeln('---------------------------------------------------------------------------');
j:=1;
i:=1;
x1:=x10;
x2:=x20;
repeat
proizv1:=(f(x1,x2)-f(x1-h,x2))/h;
proizv2:=(f(x1,x2)-f(x1,x2-h))/h;
modgrd:=sqrt(proizv1*proizv1+proizv2*proizv2);
grad1:=-proizv1/modgrd;
grad2:=-proizv2/modgrd;
shag:=0;
a:=f(x1+shag*grad1,x2+shag*grad2);
repeat
repeat
b:=a;
shag:=shag+h;
a:=f(x1+shag*grad1,x2+shag*grad2);
until b<a;
shag:=shag-h;
h:=h/2;
until abs(a-b)<=eps;
x1:=x1+shag*grad1;
x2:=x2+shag*grad2;
writeln(b:5:7);
readln;
if (modgrd<=eps) then
begin
i:=k+1;
writeln('найден минимум функции в точке:',b:5:7,' (',x1:4:3,',',x2:4:3,')')
end
else
begin
i:=i+1;
j:=j+1;
end;
until i>k;
if (j>k) then
writeln('Точность не достигнута за к=',k:3,' итераций');
readln;
end.
Соседние файлы в папке Задание 6