Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
21
Добавлен:
02.05.2014
Размер:
83.97 Кб
Скачать

Федеральное агентство по образованию Российской Федерации

Уфимский государственный авиационный технический университет

Кафедра АПрИС

Лабораторная работа №3

Методы Ньютона и сопряжённых градиентов

Выполнил: студент группы САПР-327 Абдрафиков М.А.

Проверила: Колоденкова А.Е.

Уфа 2006

Методы Ньютона и сопряжённых градиентов

1. Цель работы

Знакомство с методами многомерной безусловной оптимизации второго порядка и близкого к ним по эффективности метода сопряжённых градиентов, освоение и сравнение эффективности их применения для конкретных целевых функций.

2. Условие задачи

Вариант 1:

Составить программы, реализующие следующие методы поиска:

- метод Ньютона-Рафсона с оптимальным шагом;

- модификация II метода Ньютона.

Найти точку минимума функции

f(x1,x2)= x1-1.2 x2+e^(0.01x12+1.1x22)

Начальное приближение: (0;1)

Условие останова: 0,0001.

4.1 Текст программы:

program nutrafopt;

uses crt, graph;

var k,r,s1,s2,n,m,i,dr,md:integer;

q,y,a,b,a1,a2,yk,ymin,xmin,d,e,x1,x2,p_1,p_2:real;

function realst(r:real; dig,deg:integer):string;

var Buf:string[20];

begin str(r:dig:deg,buf); realst:=Buf; end;

function f(var x1,x2:real):real;

begin f:=x1-1.2*x2+exp(0.01*x1*x1+1.1*x2*x2); end;

function p1(var x1,x2:real):real;

begin p1:=1+0.02*x1*exp(0.01*x1*x1+1.1*x2*x2); end;

function p2(var x1,x2:real):real;

begin p2:=-1.2+2.2*x2*exp(0.01*x1*x1+1.1*x2*x2); end;

function pp1(var x1,x2:real):real;

begin pp1:=0.02*exp(0.01*x1*x1+1.1*x2*x2)*(0.02*x1*x1+1); end;

function pp2(var x1,x2:real):real;

begin pp2:=2.2*exp(0.01*x1*x1+1.1*x2*x2)*(2.2*x2*x2+1); end;

function fa1(var x1,p_1,a1:real):real;

begin fa1:=x1-a1*p_1; end;

function fa2(var x2,p_2,a2:real):real;

begin fa2:=x2-a2*p_2; end;

begin

clrscr;

write('vvedite nachalnoe priblisenie Xo1 '); readln(x1);

write('vvedite nachalnoe priblisenie Xo2 '); readln(x2);

write('vvedite uslovie ostanova e '); readln(e);

k:=0; r:=0; dr:=detect;

initgraph(dr,md,''); setGraphmode(md);

line(399,0,399,470); line(0,200,640,200);

outtextxy(620,210,'x1'); outtextxy(410,455,'x2');

setcolor(black); lineto(410,250);

lineto(round(x1*20+399),round(x2*50+200));

setcolor(white);

repeat

p_1:=p1(x1,x2)/pp1(x1,x2); p_2:=p2(x1,x2)/pp2(x1,x2);

r:=r+1; a:=0; b:=1; n:=75; m:=1;

a1:=(a+b)/2; yk:=fa1(x1,p_1,a1); ymin:=999999;

repeat

m:=m-1;

for i:=1 to n do

begin

a1:=a+i*(b-a)/(n+1);

if fa1(x1,p_1,a1)<ymin then

begin ymin:=fa1(x1,p_1,a1); xmin:=a1; end;

end;

a1:=xmin; yk:=ymin; d:=b-a;

a:=a1-d/(n+1); b:=a1+d/(n+1);

until m=0;

a:=0; b:=1; n:=75; m:=1;

a2:=(a+b)/2; yk:=fa2(x2,p_2,a2); ymin:=999999;

repeat

m:=m-1;

for i:=1 to n do

begin

a2:=a+i*(b-a)/(n+1);

if fa2(x2,p_2,a2)<ymin then

begin ymin:=fa2(x2,p_2,a2); xmin:=a2; end;

end;

a2:=xmin; yk:=ymin; d:=b-a;

a:=a2-d/(n+1); b:=a2+d/(n+1);

until m=0;

x1:=x1-a1*p_1;

x2:=x2-a2*p_2;

lineto(round(x1*20+399),round(x2*50)+200);

k:=k+1;

until ((abs(p1(x1,x2))<e)or(abs(p1(x1,x2))=e))or((abs(p2(x1,x2))<e)or(abs(p2(x1,x2))=e));

y:=f(x1,x2);

outtextxy(20,20,'tochka minimuma imeet koordinati: ');

outtextxy(20,30,'x1= ' + realst(x1,10,8));

outtextxy(20,40,'x2= ' + realst(x2,10,10));

outtextxy(20,50,' y= ' + realst(f(x1,x2),10,9));

outtextxy(20,60,'chislo vichislenij koordinat x1,x2 ravno '+realst(k,5,0));

outtextxy(20,70,'chislo vichislenij vtorix proisvodnix ravno +realst(r,2,0));

readkey;

closegraph;

end.

4.2 Текст программы:

program nutodva;

uses crt, graph;

var r,o,k,n,m,i,dr,md:integer;

ef1,ef2,ef,g1,g2,g,p_1,p_2,q,y,a,b,a1,a2,yk,ymin,xmin,d,e,x1,x2:real;

function realst(r:real; dig,deg:integer):string;

var Buf:string[20];

begin str(r:dig:deg,buf); realst:=Buf; end;

function f(var x1,x2:real):real;

begin f:=x1-1.2*x2+exp(0.01*x1*x1+1.1*x2*x2); end;

function p1(var x1,x2:real):real;

begin p1:=1+0.02*x1*exp(0.01*x1*x1+1.1*x2*x2); end;

function p2(var x1,x2:real):real;

begin p2:=-1.2+2.2*x2*exp(0.01*x1*x1+1.1*x2*x2); end;

function pp1(var x1,x2:real):real;

begin pp1:=0.02*exp(0.01*x1*x1+1.1*x2*x2)*(0.02*x1*x1+1); end;

function pp2(var x1,x2:real):real;

begin pp2:=2.2*exp(0.01*x1*x1+1.1*x2*x2)*(2.2*x2*x2+1); end;

function fa1(var x1,p_1,a1:real):real;

begin fa1:=x1-a1*p_1; end;

function fa2(var x2,p_2,a2:real):real;

begin fa2:=x2-a2*p_2; end;

begin

clrscr;

write('vvedite nachalnoe priblisenie Xo1 '); readln(x1);

write('vvedite nachalnoe priblisenie Xo2 '); readln(x2);

write('vvedite uslovie ostanova e '); readln(e);

a:=1; k:=0; r:=1; o:=17; a1:=0; a2:=0;

dr:=detect; initgraph(dr,md,''); setGraphmode(md);

line(399,0,399,470); line(0,200,640,200);

outtextxy(620,210,'x1'); outtextxy(410,455,'x2');

setcolor(black); lineto(410,250);

lineto(round(x1*20+399),round(x2*50+200));

setcolor(white);

g1:=p1(x1,x2); g2:=p2(x1,x2); g:=sqrt(g1*g1+g2*g2);

ef1:=pp1(x1,x2); ef2:=pp2(x1,x2); ef:=sqrt(ef1*ef1+ef2*ef2);

repeat

k:=k+1;

if (o mod k)=0 then

begin

ef1:=pp1(x1,x2); ef2:=pp2(x1,x2); ef:=sqrt(ef1*ef1+ef2*ef2);

r:=r+1;

end;

p_1:=g1/ef1; p_2:=g2/ef2;

a:=0; b:=1; n:=75; m:=1;

a1:=(a+b)/2; yk:=fa1(x1,p_1,a1); ymin:=999999;

repeat

m:=m-1;

for i:=1 to n do

begin

a1:=a+i*(b-a)/(n+1);

if fa1(x1,p_1,a1)<ymin then

begin ymin:=fa1(x1,p_1,a1); xmin:=a1; end;

end;

a1:=xmin; yk:=ymin; d:=b-a;

a:=a1-d/(n+1); b:=a1+d/(n+1);

until m=0;

a:=0; b:=1; n:=75; m:=1;

a2:=(a+b)/2; yk:=fa2(x2,p_2,a2); ymin:=999999;

repeat

m:=m-1;

for i:=1 to n do

begin

a2:=a+i*(b-a)/(n+1);

if fa2(x2,p_2,a2)<ymin then

begin ymin:=fa2(x2,p_2,a2); xmin:=a2; end;

end;

a2:=xmin; yk:=ymin; d:=b-a;

a:=a2-d/(n+1); b:=a2+d/(n+1);

until m=0;

x1:=x1-a1*p_1; x2:=x2-a2*p_2;

lineto(round(x1*20+399),round(x2*50)+200);

g1:=p1(x1,x2); g2:=p2(x1,x2); g:=sqrt(g1*g1+g2*g2);

until (abs(g)<e)or(abs(g)=e); y:=f(x1,x2);

outtextxy(20,20,'tochka minimuma imeet koordinati: ');

outtextxy(20,30,'x1= ' + realst(x1,10,8));

outtextxy(20,40,'x2= ' + realst(x2,10,10));

outtextxy(20,50,' y= ' + realst(f(x1,x2),11,9));

outtextxy(20,60,'chislo vichislenij koordinat x1,x2 ravno '+realst(k,5,0));

outtextxy(20,70,'chislo vichislenij vtorix proisvodnix ravno '+realst(r,2,0));

readkey; closegraph;

end.

5.1 график траектории промежуточных приближений

метода Ньютона-Рафсона с оптимальным шагом:

5.2 график траектории промежуточных приближений

модификации II метода Ньютона(m=17):

6. Результаты сравнения рассмотренных методов поиска

Метод поиска

Полученная точка минимума

Значение f(x1,x2)

Кол-во вычислений

Координат x1,x2

Вторых произв-х

X1

Х2

1

метод Ньютона-Рафсона с оптимальным шагом

-11.90296817

0.1297842487

-7.857657736

866

866

2

модификация II метода Ньютона

-11.90261554

0.1298358030

-7.857657769

4311

3

Вывод:

В данной работе были изучены два метода Ньютона:

- метод Ньютона-Рафсона с оптимальным шагом;

- модификация II метода Ньютона.

Применив их к конкретной функции двух переменных и сравнив результаты, можно сказать, что наиболее оптимальным из них является метод Ньютона-Рафсона с оптимальным шагом, количество итераций которого меньше, чем в модификации II метода Ньютона. Однако стоит заметить, что модификация II метода Ньютона позволяет регулировать отношение числа вычислений координат к числу вычислений вторых производных. Благодаря этому можно уменьшить трудоёмкость метода.

Соседние файлы в папке №3