Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Различные алгоритмы минимизации, реализованные в С++ / all / CHMO3_2
.CPP#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream.h>
#include <graphics.h>
float f(float x1,float x2)
{ return (-12*x2+4*x1*x1+4*x2*x2-4*x1*x2);
}
float df(float x1,float x2,float p1,float p2)
{
return ((8*x1-4*x2)*p1+(-12+8*x2-4*x1)*p2);
}
void main()
{ clrscr();
float al;
float al1;
float al2;
float p[2];
float x[2];
float eps;
cout<<" ‚е®¤лҐ ¤ лҐ: "<<endl;
cout<<"‚ўҐ¤ЁвҐ x: ";
cin>>x[1];
cin>>x[2];
cout<<"‚ўҐ¤ЁвҐ Їа ў«ҐЁҐ p:";
cin>>p[1];
cin>>p[2];
cout<<"‚ўҐ¤ЁвҐ в®з®бвм eps = ";
cin>>eps;
// cout<<"‡ ¤ ©вҐ з «мл© и Ј al = ";
// cin>>al;
float n=fabs((f(x[1],x[2])-df(x[1],x[2],p[1],p[2]))/df(x[1],x[2],p[1],p[2]));
if(n>1) {al=1;}
else {al=n;}
cout<<"Ќ з «мл© и Ј al = "<<al<<endl;
cout<<endl<<endl<<" ‚ле®¤лҐ ¤ лҐ:"<<endl;
float x10=x[1];
float x20=x[2];
float p10=p[1];
float p20=p[2];
int t;
if (df(x10,x20,p[1],p[2])>0)
{
p10=-p10;
p20=-p20;
}
float ddf=df(x10,x20,p10,p20);
while(ddf*df(x[1],x[2],p10,p20)>=0)
{
if (df(x[1],x[2],p[1],p[2])!=0)
{
x[1]=x[1]+al*p10;
x[2]=x[2]+al*p20;
al=2*al;
p[1]=p10;
p[2]=p20;
}
else
{
cout<<"ЂЇЇа®ЄбЁ¬ЁагойЁ© ¬ЁЁ¬г¬ е = ("<<x[1]<<","<<x[2]<<")'"<<endl;
while(!kbhit());
exit(1);
}
t++;
}
if (t==1) {al1=0; al2=al/2;}
else { al1=al/4; al2=al/2;}
cout<<"Ќ з «мл© ЁвҐаў « Ї® е: ®в ["<<x[1]-al2*p10<<";"<<x[2]-al2*p20<<"]' ¤® ["<<x[1]<<";"<<x[2]<<"]'"<<endl;
int k=0;
x10=x[1]-al2*p10;
x20=x[2]-al2*p20;
float x11=x[1];
float x21=x[2];
float z;
float w;
while (fabs(df(x[1],x[2],p10,p20))>=eps)
{
z=df(x10,x20,p10,p20)+df(x11,x21,p10,p20)+3*(f(x10,x20)-f(x11,x21))/sqrt(x11*x11+x21*x21);
w=sqrt(z*z-df(x10,x20,p10,p20)*df(x11,x21,p10,p20));
al=al2*((w+z-df(x10,x20,p10,p20))/(w-df(x10,x20,p10,p20)+df(x11,x21,p10,p20)));
x[1]=x10+al*p10;
x[2]=x20+al*p20;
if (df(x[1],x[2],p10,p20)<0)
{x10=x10+al*p10;x20=x20+al*p20;}
else
{x11=x10+al*p10;x21=x20+al*p20;al2=al;}
k++;
}
cout<<"ЂЇЇа®ЄбЁ¬ЁагойЁ© ¬ЁЁ¬г¬ е = ("<<x[1]<<","<<x[2]<<")'"<<endl;
cout<<"Љ®«ЁзҐбвў® ЁвҐа жЁ© = "<<k<<endl;
cout<<"Њ®¤г«м Їа®Ё§ў®¤®© ў Ї®«г祮© в®зЄҐ а ўҐ = "<<fabs(df(x[1],x[2],p10,p20))<<endl;
while(!kbhit());
}
Соседние файлы в папке all