Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
6
Добавлен:
01.05.2014
Размер:
2.08 Кб
Скачать
// «Ј®аЁв¬ Љ®иЁ

#include<iostream.h>
#include<conio.h>
#include <math.h>

double p[2],x0[2],a,b;

double f(double t)
{double x[2];
 for(int k=0;k<2;k++)
 x[k]=x0[k]+t*p[k];
 return (100*pow((x[1]-x[0]*x[0]),2)+pow((1-x[0]),2));
 }

double df(double t)
{double x[2];
 for(int k=0;k<2;k++)  x[k]=x0[k]+t*p[k];
 return ((-400*(x[1]-x[0]*x[0])*x[0]-2*(1-x[0]))*p[0]+200*(x[1]-x[0]*x[0])*p[1]);
}

void napr()
{p[0]=400*(x0[1]-x0[0]*x0[0])*x0[0]+2*(1-x0[0]);
 p[1]=-200*(x0[1]-x0[0]*x0[0]);
}

double norma(double x1[])
{return(sqrt(pow((x1[0]-x0[0]),2)+pow((x1[1]-x0[1]),2)));
}

void Swann4(double t)
{double s=0;
 if(t>fabs((f(0)-df(0))/df(0))) t=fabs((f(0)-df(0))/df(0));
 if(df(0)>0) for(int k=0;k<2;k++)  p[k]=-p[k];
 do
 {s=s+t;
  t=2*t;
 }
 while((df(0)*df(s))>0);
 a=s-t/2;
 b=s;
}
																																					 //
double gam(double c)
{double z,w;
 z=df(a)+df(b)+3*(f(a)-f(b))/b;
 w=sqrt(z*z-df(a)*df(b));
 c=a+((z-df(a)+w)/(df(b)-df(a)+2*w))*(b-a);
 return c;
}
																														 //
double Davidon(double e)
{double c;
 Swann4(1);						     																	 //
 do
 {c=gam(c);
	if(df(c)<0) a=c;
	else b=c;
	}
 while(fabs(df(c))>e);
 return c;
}


void KOSHI(double e)
{double alfa,x1[2];
 int k;
 int g=0;
 for(k=0;k<2;k++) x1[k]=x0[k];
 do
 {g++;
  for(k=0;k<2;k++) x0[k]=x1[k];
  napr();  				//и Ј 1:  ­вЁЈа ¤ЁҐ­в­®Ґ ­ Їа ў«Ґ­ЁҐ
  alfa=Davidon(e);				//и Ј 2
  for(int k=0;k<2;k++) x1[k]=x0[k]+alfa*p[k];	//и Ј 3: ­®ў п в®зЄ 
  }
  while((norma(x1)>e)||(fabs(f(0)-f(alfa))>e));
  for(k=0;k<2;k++) x0[k]=x1[k];
  cout<<"\n\tЉ®«ЁзҐбвў® ЁвҐа жЁ©   "<<g;
}


void main()
{
 clrscr();
 double x01[2]={-1,0};
// double x02[2]={1.5,2};
// double x03[2]={-2,-2};
 double e;
 int k;

 cout<<"\n\t ­ з «м­ п в®зЄ      1). е0={ -1 ;0}";

// cin>>e;


 cout<<"\n\t‚ўҐ¤ЁвҐ в®з­®бвм Ї®ЁбЄ   ";
 cin>>e;
 KOSHI(e);

 cout<<"\n\n\n\t\tНННННННННННННННННННННННННННННННННН";
 cout<<"\n\t\t\t\tЋ’‚…’";
 cout<<"\n\t\t\t{ "<<x0[0]<<" ; "<<x0[1]<<" }";

 getch();
}
Соседние файлы в папке LABA3