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

class vector
{
 public:
 double x1;
 double x2;

   vector(double x,double y)
   {x1=x; x2=y;}
   vector()
   {x1=0; x2=0;}

   friend double  k1(vector& v) {return v.x1;}
   friend double  k2(vector& v) {return v.x2;}


   friend double al(vector x,vector p);
   friend double norm(vector& v);

   friend double  f(vector v);
   friend vector gradf(vector x);

   friend vector operator+ (vector a,vector b);
   friend vector operator- (vector a,vector b);
   friend vector operator* (double k,vector a);
   friend double operator * (vector a,vector b);
   friend vector operator/ (vector a,double k);

};

// ЋЇаҐ¤Ґ«Ґ­ЁҐ дг­ЄжЁ© ЇҐаҐЈаг§ЄЁ

  vector operator+ (vector a,vector b)
  { return vector((a.x1+b.x1),(a.x2+b.x2));}

  vector operator- (vector a,vector b)
  { return vector((a.x1-b.x1),(a.x2-b.x2));}

  vector operator* (double k, vector v)
  { return vector((k*v.x1),(k*v.x2));}

  ostream& operator<<(ostream&s,vector v)
  { return s <<"["<<k1(v)<<", "<<k2(v)<<"] \n";}

  double operator * (vector a,vector b)
  {
   double c=a.x1*b.x1+a.x2*b.x2;
   return c;
  }


  vector operator/ (vector a,double k)
  {return vector((a.x1/k),(a.x2/k));}


//§ ¤ ­­ п дг­ЄжЁп
 double f(vector x)
 {
return (2*x.x1*x.x1+2*x.x2*x.x2-x.x1*x.x2+x.x1+10);
//return (x.x1*x.x1*x.x1+x.x2*x.x2-3*x.x1-2*x.x2+2);
// return (x.x1*x.x1+x.x2-1)*(x.x1*x.x1+x.x2-1)+(x.x1+x.x2*x.x2-7)*(x.x1+x.x2*x.x2-7);
 }



 void main()
 {
 clrscr();
 vector x1(0,0),x2,x3,x0,xr;
 double k=0,M=4,h=1.2,alfa=1,beta=0.5,gamma=2,eps=1e-6;
 double yy,sigma;
 vector e1(1,0), e2(0,1);

  x2=x1+h*e1;
  x3=x1+h*e2;
  do{
//rangirovanie
/*  cout<<x1<<endl;
  cout<<x2<<endl;
  cout<<x3<<endl;
  cout<<f(x1)<<endl;
  cout<<f(x2)<<endl;
  cout<<f(x3)<<endl; */
  vector xx1,xx2,xx3;
  if (f(x1)<=f(x2))
   { if (f(x2)<=f(x3)) {xx1=x1;xx2=x2;xx3=x3;}
     else
     {if (f(x1)<=f(x3)) {xx1=x1;xx2=x3;xx3=x2;}
      else {xx1=x3;xx2=x1;xx3=x2;}
     }
   }
   else
   { if (f(x2)>=f(x3)) {xx1=x3;xx2=x2;xx3=x1;}
     else
     {if (f(x1)<=f(x3)) {xx1=x2;xx2=x1;xx3=x3;}
      else {xx1=x2;xx2=x3;xx3=x1;}
     }
   }
   x1=xx1;
   x2=xx2;
   x3=xx3;
 /*  cout<<f(x1)<<endl;
  cout<<f(x2)<<endl;
  cout<<f(x3)<<endl;
     cout<<x1<<endl;
  cout<<x2<<endl;
  cout<<x3<<endl;

   while(!kbhit());
    clrscr();       */
   x0=0.5*(x1+x2);
   xr=x0+alfa*(x0-x3);
   vector p,xl,xs,xt;

   if ((f(x1)<=f(xr)) && (f(xr)<=f(x2)))
    {x3=xr;}
   if (f(xr)<=f(x1))
    { p=x0-x3;
      xl=x0+gamma*p;
      if (f(xl)<=f(xr)) {x3=xl;}
      else {x3=xr;}
    }
   if ((f(x2)<=f(xr)) && (f(xr)<=f(x3)))
    { p=x0-x3;
      xs=x0+beta*p;
      if (f(xs)<=f(xr)) {x3=xs;}
      else {x3=xr;}
    }
   if (f(xr)>=f(x3))
    { xt=x0+0.5*(x3-x0);
      if (f(xt)<=f(x3))
       {x3=xt;}
      else
      { x1=x1;
	x2=0.5*(x1+x2);
	x3=0.5*(x1+x3);
      }
    }

    yy=(f(x1)+f(x2)+f(x3))/3;
    sigma=((f(x1)-yy)*(f(x1)-yy)+(f(x2)-yy)*(f(x2)-yy)+(f(x3)-yy)*(f(x3)-yy))/3;
    k++;
    }
    while ((sigma>=eps));// && k<M);
    cout<<x1<<endl;
    cout<<k;
    while(!kbhit());
 }



Соседние файлы в папке all