Скачиваний:
13
Добавлен:
01.05.2014
Размер:
3.26 Кб
Скачать
#include <iostream.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>

double Y(double alfa)
{
  double x1, x2, x01=1, x02=1, p1=2, p2=-4;
  x1=x01+alfa*p1;
  x2=x02+alfa*p2;
  return x1*x1+x2*x2-x1*x2+x2;
}
double y(double alfa)
{
  double g1, g2, x1, x2, x01=1, x02=1, p1=2, p2=-4;
  x1=x01+alfa*p1;
  x2=x02+alfa*p2;
  g1=2*x1-x2;
  g2=2*x2-x1+1;
  return g1*p1+g2*p2;
}

void sven (double &alfa_x, double &alfa, double &alfa_a, double &alfa_b)
{
  if (y(alfa_x)>0)
    alfa=-alfa;
//  cout<<"alfa="<<alfa<<endl;
  while ( y(alfa_x)*y(alfa_x+alfa)>0 )
  {
    alfa_x=alfa_x+alfa;
    alfa=2*alfa;
  }
//  cout<<"alfa="<<alfa<<endl;
  if (alfa>0)
  {
    alfa_a=alfa_x-alfa;
    alfa_b=alfa_x;
  }
  else
  {
    alfa_b=alfa_x-alfa;
    alfa_a=alfa_x;
  }

}
void zs2 (double &alfa_a, double &alfa_b)
{
  double l ,alfa_x1 ,alfa_x2;
  l=fabs(alfa_b-alfa_a);
  alfa_x1=alfa_a+0.382*l;
  alfa_x2=alfa_a+alfa_b-alfa_x1;
  while (fabs(alfa_b-alfa_a)>0.002)
  {
    if ((Y(alfa_x1)<Y(alfa_x2))&&(alfa_x1<alfa_x2))
    {
      alfa_b=alfa_x2;
      alfa_x2=alfa_a+alfa_b-alfa_x1;
    }
    else
    {
      if ((Y(alfa_x1)>=Y(alfa_x2))&&(alfa_x1<alfa_x2))
      {
	alfa_a=alfa_x1;
	alfa_x1=alfa_a+alfa_b-alfa_x2;
      }
      else
      {
	if ((Y(alfa_x1)<Y(alfa_x2))&&(alfa_x1>alfa_x2))
	{
	  alfa_a=alfa_x2;
	  alfa_x2=alfa_x1;
	  alfa_x1=alfa_a+alfa_b-alfa_x2;
	}
	else
	{
	  alfa_b=alfa_x1;
	  alfa_x1=alfa_x2;
	  alfa_x2=alfa_a+alfa_b-alfa_x1;
	}
      }
    }
  }
}
void dev(double &alfa_a, double &alfa_b)
{
  double alfa_r=0, w, z, alfa0;
  z=y(alfa_a)+y(alfa_b)+3*((Y(alfa_a)-Y(alfa_b))/(alfa_b-alfa_a));
  w=exp(0.5*log(z*z-y(alfa_a)*y(alfa_b)));
  alfa_r=(alfa_b-alfa_a)*((w-y(alfa_a)+z)/(2*w-y(alfa_a)+y(alfa_b)));
  cout<<"alfa_r"<<alfa_r<<endl;
  while(y(alfa_r+alfa_a)>0.001)
  {
    z=y(alfa_a)+y(alfa_b)+(3*(Y(alfa_a)-Y(alfa_b)))/(alfa_b-alfa_a);
    w=sqrt(z*z-y(alfa_a)*y(alfa_b));
    alfa_r=((alfa_b-alfa_a)*(w-y(alfa_a)+z))/(2*w-y(alfa_a)+y(alfa_b));
    if (y(alfa_r+alfa_a)<0)
      alfa_a=alfa_a+alfa_r;
    else
      alfa_b=alfa_a+alfa_r;
  }
  cout<<"alfa_a="<<alfa_a<<endl;
  cout<<"a="<<Y(alfa_a)<<endl;
  cout<<"y(a)="<<y(alfa_a)<<endl;
  cout<<"alfa_b="<<alfa_b<<endl;
  cout<<"b="<<Y(alfa_b)<<endl;
  cout<<"y(b)="<<y(alfa_a)<<endl;
  cout<<"alfa_r="<<alfa_r<<endl;
  cout<<"alfa_r+alfa_a="<<alfa_r+alfa_a<<endl;
  cout<<"Y(alfa_r+alfa_a)=x="<<Y(alfa_r+alfa_a);
}

void main()
{
  clrscr();
  double alfa_x=0, alfa, alfa_a, alfa_b;
  if ((fabs((Y(0)-y(0))/y(0))<1)&&(fabs((Y(0)-y(0))/y(0))>0))
   { alfa=fabs((Y(0)-y(0))/y(0));
     cout<<"Y(0)"<<Y(0);
     cout<<"y(0)"<<y(0);
    }
  else
    alfa=1;
  sven(alfa_x,alfa,alfa_a,alfa_b);
  cout<<"alfa_a="<<alfa_a<<endl;
  cout<<"a="<<Y(alfa_a)<<endl;
  cout<<"y(a)="<<y(alfa_a)<<endl;
  cout<<"alfa_b="<<alfa_b<<endl;
  cout<<"b="<<Y(alfa_b)<<endl;
  cout<<"y(b)="<<y(alfa_b)<<endl;
  zs2(alfa_a,alfa_b);
  cout<<"alfa_a="<<alfa_a<<endl;
  cout<<"a="<<Y(alfa_a)<<endl;
  cout<<"y(a)="<<y(alfa_a)<<endl;
  cout<<"alfa_b="<<alfa_b<<endl;
  cout<<"b="<<Y(alfa_b)<<endl;
  cout<<"y(b)="<<y(alfa_b)<<endl;
  dev(alfa_a,alfa_b);
  getch();
}
Соседние файлы в папке all