program mfgs16; {градиентный,пошаговый,для ф.2-х переменных} uses crt; var E,x1,x2,xk1,xk2,dy1,dy2,d2y1,d2y2,d2y12,h,Hh,Norma,Yk,Yx: real; k,k1: integer; {---Вычисление значения функции---} function Y(x1,x2:real): real; begin Y:=4*x1*x1+x2*x2+2*x1*x2-x2-2; { y:=2*x1*x1+3*x1*x2+x2*x2-3;} end; {---Вычисление первых частных производных---} procedure dy(x1,x2: real; var dy1, dy2: real); begin dy1:=8*x1+2*x2; dy2:=2*x2+2*x1-1; { dy1:=4*x1+3*x2; dy2:=3*x1+2*x2;} end; {---Вычисление К-нормы вектора---} function N(dy1,dy2: real): real; begin N:= sqrt(sqr(dy1)+sqr(dy2)); end; {===Основная программа===} begin ClrScr; writeln('e -' + 'na4alnie pribl:'); write('E= '); readln(E); write('X0 = (x0;y0) = '); readln(x1,x2); write('shag h = '); readln(Hh); writeln('to4nost Е = ',E:7:6); writeln('pribl x=(',x1:5:3,',',x2:5:3,').'); writeln('*********rezyltati*********'); writeln(''); k:=0; yx:=y(x1,x2); dy(x1,x2,dy1,dy2); NORMA:=N(dy1,dy2); writeln('dy/dx=[ ',dy1:5:3,',',dy2:5:3,' ].'); writeln(' NORMA = ', NORMA:8:6); writeln('y(x) = ',yx:5:3); if NORMA>E then begin repeat h:=Hh; k1:=0; writeln(k:4,'-ya iteraziya:'); repeat if k1>0 then h:=h/2; writeln(' ',k1:4,'-i shag ',k:4,'-i iteraziya:'); xk1:=x1-h*dy1; xk2:=x2-h*dy2; x1:=xk1; x2:=xk2; writeln('h = ',h:5:3,', x',k-1:4,' = [',xk1:5:3,+'; ',xk2:5:3,'].'); yk:=y(xk1,xk2); writeln('y',k-1:4,' = ',yk:5:3,'.'); inc(k1); until yk<=yx; yx:=yk; dy(x1,x2,dy1,dy2); writeln('dy/dx=[ ',dy1:5:3,',',dy2:5:3,' ].'); writeln(' NORMA = ', NORMA:8:6); NORMA:=N(dy1,dy2); inc(k); until NORMA<=E; end {IF} else writeln('reshenie.'); writeln('reshenie zada4i: minF(x) = ',yx:8:5,','); writeln('X = [',x1:5:3,';',x2:5:3,'].'); writeln('to4nost dostignyta na',k:4,'-i '+'iterazii.'); repeat until keypressed; end.