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

struct Vector
{
 double x1,x2;
 Vector()
 {
  x1=0;
  x2=0;
 }
 Vector(double ax1,double ax2)
 {
  x1=ax1;
  x2=ax2;
 }
 const Vector operator * (const double &vec) const
 {
  return Vector(x1*vec,x2*vec);
 }

 const void operator = (const Vector &vec)
 {
  x1=vec.x1;
  x2=vec.x2;
 }

 const double operator * (const Vector &vec) const
 {
  return (x1*vec.x1+x2*vec.x2);
 }

 const Vector operator + (const Vector &vec) const
 {
  return Vector(x1+vec.x1,x2+vec.x2);
 }

 const Vector operator - (const Vector &vec) const
 {
  return Vector(x1-vec.x1,x2-vec.x2);
 }
};

double function(Vector vec)
{
 return (4*(vec.x1-5)*(vec.x1-5)+(vec.x2-6)*(vec.x2-6));
}

double f_dx1(Vector vec)
{
 return (8*(vec.x1-5));
}

double f_dx2(Vector vec)
{
 return (2*(vec.x2-6));
}

Vector Angrad(Vector vec)
{
 Vector grad;
 grad=Vector(f_dx1(vec),f_dx2(vec));
 return (grad*(-1));
}

double Alfa(Vector vec,Vector p)
{
 double a;
 a=(40*p.x1+12*p.x2-8*vec.x1*p.x1-2*vec.x2*p.x2)/(8*p.x1*p.x1+2*p.x2*p.x2);
 return(a);
}

void Partan(Vector &x1)
{
 Vector x2,x3,x4,d,p;
 double e=0.00001,a,n;
 do
 {
  p=Angrad(x1);
  a=Alfa(x1,p);
  x2=x1+p*a;
  p=Angrad(x2);
  a=Alfa(x2,p);
  x3=x2+p*a;
  d=x3-x1;
  a=Alfa(x3,d);
  x4=x3+d*a;
  x1=x2;
  n=sqrt(d.x1*d.x1+d.x2*d.x2);
 }while(n>e);
 cout<<x4.x1<<endl<<x4.x2;
}

void main()
{
 clrscr();
 Vector x1;
 x1=Vector(8,9);
 Partan(x1);
 getch();
}
Соседние файлы в папке all