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

Градиентные методы / davidon(nesk_permen)

.txt
Скачиваний:
4
Добавлен:
01.05.2014
Размер:
859 б
Скачать
complex Davidon(complex x0,complex p,double e)
{
double da=real(a-x0)/real(p),db=real(b-x0)/real(p),z,w;
if (da>db)
{
r=db;
db=da;
da=r;
}
a=x0+da*p;
b=x0+db*p;
z=dy(a,p)+dy(b,p)+3*(f(a)-f(b))/(db-da);
w=sqrt(z*z-dy(a,p)*dy(b,p));
r=da+(db-da)*(z-dy(a,p)+w)/(dy(b,p)-dy(a,p)+2*w);
while (dy((x0+r*p),p)>=e)
{
if (dy((x0+r*p),p)<0)
da=r;
else
db=r;
a=x0+da*p;
b=x0+db*p;
z=dy(a,p)+dy(b,p)+3*(f(a)-f(b))/(db-da);
w=sqrt(z*z-dy(a,p)+dy(b,p) );
r=da+(db-da)*(z-dy(a,p)+w)/(dy(b,p)-dy(a,p)+2*w);
}
return x0+r*p;
}
////////call
while (1)
{
complex p = -grad(x0);
Svenn4(x0,p);
x0=Davidon(x0,p,e);
x1=x0+r*p;
k++;
if(abs(grad(x0))<=e && fabs(f(x1)-f(x0))<=e && abs(x1-x0)<=e && abs(x1-x0)/(1+abs(x1-x0))<=e && abs(grad(x0))/(1+abs(grad(x0)))<=e)
break;
}
Соседние файлы в папке Градиентные методы