Скачиваний:
13
Добавлен:
01.05.2014
Размер:
3.02 Кб
Скачать
/* ЏђЋѓђЂЊЊЂ ‘ Љ‹Ђ‘‘ЂЊ€
   ‹ Ў®а в®а­ п а Ў®в  ь4.ѓа ¤ЁҐ­в­лҐ ¬Ґв®¤л.
   ЊҐв®¤ ‘ўҐ­­  4.  ЊҐв®¤ Ѓ®«мж ­®
   Ќ Їа ў«Ґ­ЁҐ а=[1,1,1]
   ѓа ¤ЁҐ­в бзЁв Ґв Ї® д®а¬г«Ґ 業ва «м­®© Є®­Ґз­®© а §­®бвЁ

   Ќ е®¤Ёв ¬Ё¬Ё­Ё¬г¬ е[-0.5, -5.5, -2.5]

*/
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<Math.h>

double l=0.0,k=0, L=0;
double  E=1e-4, gy1=0.0, gy2=0.0, gy3=0.0;

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  grad(vector v1, vector v2);
	       //	 friend vector  p(vector v);

		 friend double  F(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);

	  };




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  F(vector v)
      { return((v.x-1)*(v.x-1)+(v.y-3)*(v.y-3)+4*(v.z+5)*(v.z+5)); }
double  grad(vector v, vector v1)
	   {
	   double h=1e-4;
	vector e1(1,0,0), e2(0,1,0), e3(0,0,1);
	    gy1=(F(v+h*e1)-F(v-h*e1))/(2*h);
	    gy2=(F(v+h*e2)-F(v-h*e2))/(2*h);
	    gy3=(F(v+h*e3)-F(v-h*e3))/(2*h);
	    return (gy1*v1.x+gy2*v1.y+gy3*v1.z);
	    }



double  norm (vector v)
	    {return sqrt(v.x*v.x+v.y*v.y+v.z*v.z);}

void main(void)
{
vector p(1,1,1), x(4,-1,2),c(0,0,0), a(0,0,0), b(0,0,0), x0=(0,0,0);


double l=0.01;

 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<<"  Ќ Їа ў«пойЁ© ўҐЄв®а p="<<(p);
cout<<"  ’®з­®бвм Ї®ЁбЄ  E="<<E<<endl;

if(grad(x,p)>0)
{ p=-1*p;}
x0=x;
cout<<"\n\n       x="<<x0;
while(grad(x,p)*grad(x0,p)>0)
{
l=2*l;
x=x+l*p;
cout<<"\n\n       x="<<x;
cout<<"\n grad(x,p)="<<grad(x,p)<<"   grad(x0,p)="<<grad(x0,p);

getch();
}
a=x+(-1*l)*p;
b=x;
cout<<"\n a="<<a;
cout<<"\n b="<<b;
getch();

cout<<"\n x="<<x;

do
  {
   x=0.5*(a+b);
   cout<<"\n x="<<x;
   if(grad(x,p)>0) b=x;
   else  a=x;
   cout<<"\n a="<<a<<"   b="<<b;
   cout<<"\n                  grad(x,p)="<<grad(x,p);


   L=norm(b+(-1*a));
     cout<<"\n L="<<L;
    getch();
  }
while(fabs(grad(x,p))>E || norm(L)>E);

  cout<<"\n Ќ Їа ў«пойЁ© ўҐЄв®а p="<<p;
  cout<<" ђҐ§г«мв в ­  ¤ ­­®¬ и ЈҐ x="<<x;
  getch();


cout<<"\n\n\n Ћ’‚…’:  x="<<x;
getch();
}
Соседние файлы в папке all