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

Метод Дэвидсона / sven+bolcan+dev

.cpp
Скачиваний:
7
Добавлен:
01.05.2014
Размер:
2.35 Кб
Скачать
#include<iostream.h>
#include<conio.h>
#include<math.h>
double x10=-0.5,p1=1,x11=1,p2=0,e=0.01,x1min,x2min,x1,x2,aa,ab,ac;
double g1,g2;
int k=0;
int k1=0;
double y(double a)
 {x1=x10+a*p1;
  x2=x11+a*p2;

     return (-12*x2+4*x1*x1+4*x2*x2-4*x1*x2); }
double grad(double(alpfa1))
{
x1=x10+alpfa1*p1;
x2=x11+alpfa1*p2;
g1=8*x1+-4*x2;
g2=-12+8*x2-4*x1;
return (g1*p1+g2*p2);
}

double ah=0.1,ah1,a2,a,a1,eps=0.00001,Amin;
void Swenn()
{
//clrscr();
 a1=0;
 a2=a1+ah;
 if(y(a2) > y(a1))
  {ah=-ah;
   a2=a1+ah;
  }
 ah1=ah;
  a=a2;
     do
      {ah=2*ah;
       a=a+ah;
      }
     while(y(a)<y(a-ah));
     ab=a;
     aa=a-1.5*ah;
     if(ah1>0){ aa=aa;
	      ab=ab;}
     else ac=aa,aa=ab,ab=ac;
    
    cout<<"Nachalnii interval:"<<endl;
    cout<<"["<<aa<<","<<ab<<"]"<<endl;
    getch();
 }

double alpfaA, alpfaB, alpfaC;

void Balsano()
     {
	  alpfaA=aa;
	  alpfaB=ab;
	do
	{
	alpfaC=(alpfaA+alpfaB)/2;
	if (grad(alpfaC)>0) {
	       alpfaB=alpfaC;
	} else {
		alpfaA=alpfaC;
	}

		k++;
	}
	while(fabs(grad(alpfaC))>=eps);
	   {
	x1min=x10+alpfaC*p1;
	x2min=x11+alpfaC*p2;
	Amin=-12*x2min+4*x1min*x1min+4*x2min*x2min-4*x1min*x2min;
	   }
cout<<endl<<"Balsamo:"<<endl<<"x1min = "<<x1min<<endl<<"x2min = "<<x2min<<endl;
cout<<"Amin= "<<Amin<<endl<<"alpfaC= "<<alpfaC<<endl;
cout << "k = " << k << endl<<endl;

getch();
}
double z,w,alr,x11min,x22min,Amin1,alr1,e1=0.01;
void Dev()
{

   do
  {
    z=grad(aa)+grad(ab)+3*(y(aa)-y(ab))/(ab-aa);
    w=sqrt(pow(z,2)-grad(aa)*grad(ab));
    alr=aa+(ab-aa)*(w-grad(aa)+z)/(2*w-grad(aa)+grad(ab));
     k1++;
       if(grad(alr)>=0)
   {
   ab=alr;
   aa=aa;
	    }

   else
    {
     aa=alr;
     ab=ab;
    }
	 }
       while (fabs(grad(alr)>=e1));
    x11min=x10+alr*p1;
    x22min=x11+alr*p2;
    Amin1=-12*x22min+4*x11min*x11min+4*x22min*x22min-4*x11min*x22min;

cout<<endl<<"Dev: "<<endl<<"z = "<<z<<endl<<"w = "<<w<<endl<<"alr = "<<alr<<endl<<"Amin1 = "<<Amin1<<endl<<"k1= "<<k1<<endl;
cout<<"x11min = "<<x11min<<endl<<"x22min = "<<x22min<<endl;
cout<<"grad(alr)= "<<grad(alr)<<endl;
cout<<"grad(aa)= "<<grad(aa)<<endl<<"grad(ab)= "<<grad(ab)<<endl;
cout<<"y(aa)= "<<y(aa)<<endl<<"y(ab)= "<<y(ab)<<endl;

getch();
}

void main()
{
	Swenn();
	Balsano();
	Dev();
}



Соседние файлы в папке Метод Дэвидсона