program MNS;
{$APPTYPE CONSOLE}
uses
SysUtils;
const dx= 0.0001 ;
var x, df: array of real ;
eps, h, grad: real ;
i, j, n: integer ;
function f( x: array of real ) : real ;
begin
f: = sqr( X[ 1 ] - 4 * X[ 2 ] ) ) + ( sqr( X[ 2 ] + 5 )
end ; //f//
procedure step ( n: integer ; var h, grad: real ) ;
var d2f: array of array of real ;
i, j: integer ;
s, s1, f0: real ;
begin
SetLength ( d2f, n+ 1 , n+ 1 ) ;
f0: = f( x) ;
for i: = 1 to n do
begin
x[ i] : = x[ i] + dx;
df[ i] : = ( f( x) - f0) / dx;
x[ i] : = x[ i] - dx;
end ;
for i: = 1 to n do
begin
s: =- 2 * f( x) ;
x[ i] : = x[ i] + dx;
s: = s+ f( x) ;
x[ i] : = x[ i] - 2 * dx;
s: = s+ f( x) ;
x[ i] : = x[ i] + dx;
d2f[ i, i] : = s/ sqr( dx) ;
end ;
for i: = 1 to n- 1 do
for j: = i+ 1 to n do
begin
s: = f( x) ;
x[ i] : = x[ i] - dx;
x[ j] : = x[ j] - dx;
s: = s+ f( x) ;
x[ j] : = x[ j] + dx;
s: = s- f( x) ;
x[ i] : = x[ i] + dx;
x[ j] : = x[ j] - dx;
s: = s- f( x) ;
x[ j] : = x[ j] + dx;
d2f[ i, j] : = s/ sqr( dx) ;
d2f[ j, i] : = d2f[ i, j] ;
end ;
s: = 0 ;
s1: = 0 ;
for i: = 1 to n do
s: = s+ sqr( df[ i] ) ;
for i: = 1 to n do
for j: = 1 to n do
s1: = s1+ d2f[ i, j] * df[ i] * df[ j] ;
h: = s/ s1;
grad: = sqrt ( s) ;
end ;
begin
writeln ( 'Metod naiskorejshego gradientnogo spuska' ) ;
writeln ;
writeln ( 'Ishodnnye dannye' ) ;
writeln ;
write ( 'Vvedite razmernost zadachi optimizacii n = ' ) ;
readln ( n) ;
write ( 'Vvedite tochnost vychislenij eps = ' ) ;
readln ( eps) ;
writeln ( 'Vvedite znacheniya nachalnyh peremennyh' ) ;
SetLength ( x, n+ 1 ) ;
SetLength ( df, n+ 1 ) ;
for i: = 1 to n do
begin
write ( 'x[' , i, ']=' ) ;
readln ( x[ i] ) ;
end ;
repeat
step( n, h, grad) ;
for i: = 1 to n do
x[ i] : = x[ i] - h* df[ i] ;
until grad<eps;
writeln ;
writeln ( 'Rezultaty optimizacii:' ) ;
writeln ;
for i: = 1 to n do
writeln ( 'x[' , i, ']=' , x[ i] : 4 : 4 ) ;
writeln ;
writeln ( 'Znachenie funccii celi = ' , f( x) : 4 : 4 ) ;
readln ;
end .
cHJvZ3JhbSBNTlM7CiAKeyRBUFBUWVBFIENPTlNPTEV9CiAKdXNlcwogIFN5c1V0aWxzOwogCmNvbnN0IGR4PTAuMDAwMTsKdmFyIHgsZGY6YXJyYXkgb2YgcmVhbDsKZXBzLGgsZ3JhZDpyZWFsOwppLGosbjppbnRlZ2VyOwogCmZ1bmN0aW9uIGYoeDphcnJheSBvZiByZWFsKTpyZWFsOwpiZWdpbgogIGY6PXNxcihYWzFdLTQqWFsyXSkpKyhzcXIoWFsyXSs1KQplbmQ7Ly9mLy8KIApwcm9jZWR1cmUgc3RlcCAobjppbnRlZ2VyO3ZhciBoLGdyYWQ6cmVhbCk7CnZhciBkMmY6IGFycmF5IG9mIGFycmF5IG9mIHJlYWw7CiAgICBpLGo6aW50ZWdlcjsKICAgIHMsczEsZjA6cmVhbDsKIApiZWdpbgpTZXRMZW5ndGggKGQyZixuKzEsbisxKTsKZjA6PWYoeCk7CmZvciBpOj0xIHRvIG4gZG8KICAgIGJlZ2luCiAgICAgIHhbaV06PXhbaV0rZHg7CiAgICAgIGRmW2ldOj0oZih4KS1mMCkvZHg7CiAgICAgIHhbaV06PXhbaV0tZHg7CiAgICBlbmQ7CiAKZm9yIGk6PTEgdG8gbiBkbwogIGJlZ2luCiAgICBzOj0tMipmKHgpOwogICAgeFtpXTo9eFtpXStkeDsKICAgIHM6PXMrZih4KTsKICAgIHhbaV06PXhbaV0tMipkeDsKICAgIHM6PXMrZih4KTsKICAgIHhbaV06PXhbaV0rZHg7CiAgICBkMmZbaSxpXTo9cy9zcXIoZHgpOwogIGVuZDsKIApmb3IgaTo9MSB0byBuLTEgZG8KICBmb3Igajo9aSsxIHRvIG4gZG8KICAgIGJlZ2luCiAgICAgIHM6PWYoeCk7CiAgICAgIHhbaV06PXhbaV0tZHg7CiAgICAgIHhbal06PXhbal0tZHg7CiAKICAgICAgICBzOj1zK2YoeCk7CiAgICAgICAgeFtqXTo9eFtqXStkeDsKIAogICAgICAgICAgczo9cy1mKHgpOwogICAgICAgICAgeFtpXTo9eFtpXStkeDsKICAgICAgICAgIHhbal06PXhbal0tZHg7CiAKICAgICAgICAgICAgczo9cy1mKHgpOwogICAgICAgICAgICB4W2pdOj14W2pdK2R4OwogICAgICAgICAgICBkMmZbaSxqXTo9cy9zcXIoZHgpOwogICAgICAgICAgICBkMmZbaixpXTo9ZDJmW2ksal07CmVuZDsKIApzOj0wOwpzMTo9MDsKICBmb3IgaTo9MSB0byBuIGRvCiAgczo9cytzcXIoZGZbaV0pOwogICAgZm9yIGk6PTEgdG8gbiBkbwogICAgZm9yIGo6PTEgdG8gbiBkbwogICAgczE6PXMxK2QyZltpLGpdKmRmW2ldKmRmW2pdOwogICAgaDo9cy9zMTsKICAgIGdyYWQ6PXNxcnQocyk7CmVuZDsKIApiZWdpbgp3cml0ZWxuKCdNZXRvZCBuYWlza29yZWpzaGVnbyBncmFkaWVudG5vZ28gc3B1c2thJyk7CndyaXRlbG47CiAgICB3cml0ZWxuKCdJc2hvZG5ueWUgZGFubnllJyk7CiAgICB3cml0ZWxuOwogICAgd3JpdGUoJ1Z2ZWRpdGUgcmF6bWVybm9zdCB6YWRhY2hpIG9wdGltaXphY2lpIG4gPSAnKTsKICAgIHJlYWRsbihuKTsKICAgIHdyaXRlICgnVnZlZGl0ZSB0b2Nobm9zdCB2eWNoaXNsZW5paiBlcHMgPSAnKTsKICAgIHJlYWRsbihlcHMpOwogICAgd3JpdGVsbignVnZlZGl0ZSB6bmFjaGVuaXlhIG5hY2hhbG55aCBwZXJlbWVubnloJyk7CiAgICAgICAgU2V0TGVuZ3RoICh4LG4rMSk7CiAgICAgICAgU2V0TGVuZ3RoIChkZixuKzEpOwogCiAgICAgICAgICBmb3IgaTo9MSB0byBuIGRvCiAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgIHdyaXRlICgneFsnLGksJ109Jyk7CiAgICAgICAgICAgIHJlYWRsbih4W2ldKTsKICAgICAgICAgICAgZW5kOwogICAgICAgICAgcmVwZWF0CiAgICAgICAgICAgIHN0ZXAobixoLGdyYWQpOwogICAgICAgICAgICBmb3IgaTo9MSB0byBuIGRvCiAgICAgICAgICAgICAgeFtpXTo9eFtpXS1oKmRmW2ldOwogICAgICAgICAgdW50aWwgZ3JhZDxlcHM7CiAgICAgICAgICAgIHdyaXRlbG47CiAgICAgICAgICAgIHdyaXRlbG4oJ1JlenVsdGF0eSBvcHRpbWl6YWNpaTonKTsKICAgICAgICAgICAgd3JpdGVsbjsKICAgICAgICAgIGZvciBpOj0xIHRvIG4gZG8KICAgICAgICAgICAgd3JpdGVsbiAoJ3hbJyxpLCddPScseFtpXTo0OjQpOwogICAgICAgICAgICB3cml0ZWxuOwogICAgICAgICAgICB3cml0ZWxuICgnWm5hY2hlbmllIGZ1bmNjaWkgY2VsaSA9ICcsZih4KTo0OjQpOwogICAgICAgICAgICByZWFkbG47CmVuZC4=