Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Различные алгоритмы минимизации, реализованные в С++ / all / GZCl_4_3
.cpp/* ЏђЋѓђЂЊЊЂ ‘ Љ‹Ђ‘‘ЂЊ€
‹ Ў®а в®а п а Ў®в ь4_3.
ѓа ¤ЁҐвлҐ ¬Ґв®¤л.
ЊҐв®¤ ѓЂ“‘‘Ђ_‡…‰„…‹џ
Џа®Ё§ў®¤ п ўлзЁб«пҐвбп Ї® д-«Ґ жҐва «м®© Є®Ґз®© а §®бвЁ
*/
#include <iostream.h>
#include <conio.h>
#include<Math.h>
double l=0.0,k=0;
double E=1e-4, ym=0.0, 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 alp (vector v1, vector v2);
friend vector ek (vector v);
friend double F(vector v);
friend vector operator +(vector v1, vector v2);
friend vector operator -(vector v1, vector v2);
friend vector operator *(double n, vector v);
};
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- (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);}
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 norm (vector v, vector v1,vector v2,vector v3)
{
double h=1e-4;
gy1=(F(v+h*v1)-F(v-h*v1))/(2*h);
gy2=(F(v+h*v2)-F(v-h*v2))/(2*h);
gy3=(F(v+h*v3)-F(v-h*v3))/(2*h);
return sqrt(gy1*gy1+gy2*gy2+gy3*gy3);
}
void main(void)
{
vector p(1,0,0), x(4,-1,2), e1(1,0,0), e2(0,1,0), e3(0,0,1);
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;
do
{
l=alp(x,p);
x=x+l*p;
p=ek(p);
ym=norm(x,e1,e2,e3);
cout<<"\n\n Ђ«мд l="<<l;
cout<<"\n Ќ®а¬ Ја ¤ЁҐв ym="<<ym;
cout<<"\n Ќ Їа ў«пойЁ© ўҐЄв®а p="<<p;
cout<<" ђҐ§г«мв в ¤ ®¬ и ЈҐ x="<<x;
getch();
}
while(ym>E);
cout<<"\n\n\n Ћ’‚…’: x="<<x;
getch();
}
Соседние файлы в папке all