Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
01.05.2014
Размер:
2.86 Кб
Скачать
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>


class	Minimum {

public:

double  k,	        // зЁб«® ЁвҐа жЁ© ¬Ґв®¤  ¤«п ­ е®¦¤Ґ­Ёп ¬Ё­Ё¬г¬ 
	dx,	        // ­ з «м­®Ґ ЇаЁа йҐ­ЁҐ и Ј 
	xm,             // в®з­®бвм  ЇЇа®ЄбЁ¬ жЁЁ ¬Ё­Ё¬г¬ 
	X0[2],          // бв ав®ў п в®зЄ  Ї®ЁбЄ  ¬Ё­Ё¬г¬ 
	P[2],           // бв ав®ў®Ґ ­ Їа ў«Ґ­ЁҐ Ї®ЁбЄ 
	X_min[2];       //  ЇЇа®ЄбЁ¬Ёа®ў ­­®Ґ §­ зҐ­ЁҐ ­ ©¤Ґ­­®Ј® ¬Ё­Ё¬г¬  Ї® ­ Їа ў«Ґ­Ёо
float r1, r2;

	Minimum()       // Ё­ЁжЁ «Ё§Ёа㥬 ЇҐаҐ¬Ґ­­лҐ
	{
	 X0[0] = 1.0;
	 X0[1] = 1.0;
	 P[0] =  -10,0;
	 P[1] =  -10,0;
	 X_min[0]=0.0;
	 X_min[1]=0.0;
	 dx=0.000001;
	 xm=0.000001;
	 k=1;
	};

double  func_dual(double M[2])   //      ”г­ЄжЁп ¤ўге ЇҐаҐ¬Ґ­­ле
	{
double   x1=M[0], x2=M[1], D;
//	 D=x1*x1+3*x2*x2+2*x1*x2;    // вҐбв®ў п дг­ЄжЁп
	 D=((x1-5)*(x1-5))+((x2-5)*(x2-5));
	 return D;
	};



double  func(double l)            //      ”г­ЄжЁп ®¤­®© ЇҐаҐ¬Ґ­­®©
	{
double   M[2];
	 M[0]=0.0;
	 M[1]=0.0;

	   for (int i=0; i<2; i++)
		{
		  M[i]=X0[i]+l*P[i];
		}
	   return func_dual(M);
	};


double  SwannGold_section1(double l)
	{
double 	x2=l,
	x1=l,
	a=0, b=0;        	// Ї®ЁбЄ ­ Їа ў«Ґ­Ёп
	x2=x1+dx; 			// ўлзЁб«пҐ¬ ўв®аго в®зЄг
	if (func(x1) < func(x2)) dx*=-1;	// Ё§¬Ґ­пҐ¬ ­ Їа ў«Ґ­ЁҐ
	x2=x1+dx; 			// ўлзЁб«пҐ¬ ўв®аго в®зЄг
						// Ї®ЁбЄ Ё­вҐаў «  б «®Є «Ё§ жЁҐ© ¬Ё­Ё¬г¬ 
	 do	 {  dx *= 2;	        // ўлзЁб«Ґ­ЁҐ §­ зҐ­Ёп ­®ў®Ј® и Ј 
			x2=x2+dx;           // ўлзЁб«пҐ¬ б«Ґ¤гойго в®зЄг
		 }  while ( func(x1) > func(x2));
	if (x1<x2)
	   {
		a=x1;
		b=x2;
		}
	else
	   {
		a=x2;
		b=x1;
		};
	   return Gold_section1(a, b);
	};


double  Gold_section1(double a, double b)  //‡®«®в®Ґ бҐзҐ­ЁҐ 1 ®в 2 ЇҐаҐ¬Ґ­­ле
	{
double  min_p=0,
	l=0, m=0;

	do
	{
	 l=a+(0.382*(b-a));	           // ­ е®¤Ё¬ «п¬Ў¤г-«Ґў п в®зЄ 
	 m=a+(0.618*(b-a));             // ­ е®¤Ё¬ ¬о-Їа ў п в®зЄ 

	 if ( func(l) < func(m))
		{
		 b=m;                   // ЇҐаҐ¤ўЁЈ Ґ¬ Ја ­Ёжг бЇа ў  ­ «Ґў®
		 m=a+(0.382*(b-a));
		}
	 else   {
		 a=l;                   // ЇҐаҐ¤ўЁЈ Ґ¬ Ја ­Ёжг б«Ґў  ­ Їа ў®
		 l=a+(0.618*(b-a));
			}
	 k++;
	 min_p=fabs(b-a);
	} while ((min_p/xm-1)>1);
	return (a+b)/2;
	};


	Davidon()
	{

double  L=SwannGold_section1(0);
	for (int i=0; i<2; i++)
		{
		   X_min[i]=X0[i]+L*P[i];
		};

	   r1=X_min[0];
	   r2=X_min[1];

	cout<<
	"\n\nЊҐв®¤ „ ўЁ¤®­ .\n’®з­®бвм  Їа®ЄбЁ¬ жЁЁ = "<<xm<<
	"\n—Ёб«® ЁвҐа жЁ©: "<<k<<"\n€§ в®зЄЁ X0 ("<<X0[0]<<","<<X0[1]<<
		") Ї® ­ Їа ў«Ґ­Ёо P ("<<P[0]<<";"<<P[1]<<")"<<
	"\nЌ ©¤Ґ­ ¬Ё­Ё¬г¬ дг­ЄжЁЁ = "<<"("<<r1<<"; "<<r2<<")";
	};

};

void	main(void)
{
	clrscr();
	Minimum segment;        // ᮧ¤ Ґ¬ ®ЎкҐЄв Є« бб  Minimum
	segment.Davidon();  	// ўл§лў Ґ¬ ¬Ґв®¤ „ ўЁ¤®­ 
	getch();                // ®¦Ё¤ Ґ¬ ­ ¦ вЁп «оЎ®© Є« ўЁиЁ
}
Соседние файлы в папке LABA3