Скачиваний:
14
Добавлен:
01.05.2014
Размер:
2.98 Кб
Скачать
/* ЏђЋѓђЂЊЊЂ ‘ Љ‹Ђ‘‘ЂЊ€
   ‹ Ў®а в®а­ п а Ў®в  ь4.ѓа ¤ЁҐ­в­лҐ ¬Ґв®¤л.
   ЊҐв®¤ ѓ гбб -‡Ґ©¤Ґ«п
*/
#include <iostream.h>
#include <conio.h>
#include<Math.h>

double l=0.0,k=0;
double  E=1e-8, ym=0.0, gy1=0.0, gy2=0.0, gy3=0.0,ym0;

class  vector
	 {
		double x,y,z;
			 public:
		 vector (double a=0.0, double  b=0.0, double c=0.0)  { x=a; y=b; z=c;}
		 friend double  k1(vector& v) {return v.x;}
		 friend double  k2(vector& v) {return v.y;}
		 friend double  k3(vector& v) {return v.z;}
		 friend double  norm (vector v);
		 friend double  alp (vector v1, vector v2);
		 friend vector  ek (vector v);
		 friend vector grad(vector v);

		 friend double  Fx1(vector v);
		 friend double  Fx2(vector v);
		 friend double  Fx3(vector v);

		 friend vector operator +(vector v1, vector v2);
		 friend vector operator *(double n, vector v);
		 friend vector operator *(vector  v1, vector v2);

	  };

vector ek(vector v)
	   {
	    for(int i=0; i<3;i++)
	       {
		if(v.x==1) {v.x=0;v.y=1;break ;}
		 if(v.y==1) {v.y=0;v.z=1;break ;}
		if(v.z==1) {v.z=0;v.x=1; break;}
	       }
	    return v;
	   }

double  alp (vector v1, vector v2)
	   {
	   return ((-2*v1.x*v2.x+2*v2.x-2*v1.y*v2.y+6*v2.y-8*v1.z*v2.z-40*v2.z)/(2*v2.x*v2.x+2*v2.y*v2.y+8*v2.z*v2.z));
	   }
ostream& operator<<(ostream&s,vector v)
      {return s <<"["<<k1(v)<<", "<<k2(v)<<" , "<<k3(v)<<"] \n";}
vector operator+ (vector v1, vector v2)
		{ return vector((v1.x+v2.x),(v1.y+v2.y),(v1.z+v2.z));}

vector operator *(double  n, vector v)
		{ return vector(n*v.x, n*v.y, n*v.z);}
vector operator *(vector  v1, vector v2)
		{ return vector(v1.x*v2.x, v1.y*v2.y, v1.z*v2.z);}

double  Fx1(vector v)
      { return(2*v.x-2); }
double  Fx2(vector v)
     { return(2*v.y-6); }
double  Fx3(vector v)
     { return(8*v.z+40); }

double  norm (vector v)
	   {
	  //  gy1=Fx1(v);
	 //   gy2=Fx2(v);
	//    gy3=Fx3(v);
	//    return sqrt(gy1*gy1+gy2*gy2+gy3*gy3);
	return sqrt(v.x*v.x+v.y*v.y+v.z*v.z);
	    }
vector grad(vector v)
	{
	gy1=Fx1(v);
	gy2=Fx2(v);
	gy3=Fx3(v);
	v.x=gy1;
	v.y=gy2;
	v.z=gy3;
	return v;
	}

void main(void)
{
vector x(4,-1,2),e(0,0,1),p(0,0,0);

clrscr();
cout<<"\n\n  ”г­ЄжЁп F(x1,x2,x3)=(x1-1)*(x1-1)+(x2-3)*(x2-3)+4*(x3+5)*(x3+5)";
cout<<"\n  Ќ з «м­ п в®зЄ  е0="<<x;
cout<<"  ’®з­®бвм Ї®ЁбЄ  E="<<E<<endl;
do
  {
  e=ek(e);
  p=e*grad(x);
  l=alp(x,p);
  ym0=fabs(Fx1(x)*Fx1(x)+Fx2(x)*Fx2(x)+Fx3(x)+Fx3(x));
  x=x+l*p;
  ym=fabs(Fx1(x)*Fx1(x)+Fx2(x)*Fx2(x)+Fx3(x)+Fx3(x));


  k++;
  cout<<"\n\n Ђ«мд  l="<<l;
  cout<<"\n Ќ®а¬  Ја ¤ЁҐ­в  ym="<<ym;
  cout<<"\n Ќ Їа ў«пойЁ© ўҐЄв®а p="<<p;
  cout<<" ђҐ§г«мв в ­  ¤ ­­®¬ и ЈҐ x="<<x;
//  cout<<"\n Norma x="<<norm(x);
//  cout<<"\n Norma xk-1="<<norm(x+(-1)*l*p);
//  cout<<"\n                   "<<norm(x+(-1)*(x+(-1*l*p)));
  getch();
  }
while(fabs(ym/(1+ym))>E);
cout<<"\n\n\n—Ёб«® и Ј®ў  "<<k;
cout<<"\n\ Ћ’‚…’:  x="<<x;
getch();
}
Соседние файлы в папке all