Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Различные алгоритмы минимизации, реализованные в С++ / all / Gz_4_1
.cpp/* ‹ Ў®а в®а п а Ў®в ь4.ѓа ¤ЁҐвлҐ ¬Ґв®¤л.
ЊҐв®¤ ѓ гбб -‡Ґ©¤Ґ«п
Џа®Ја ¬¬ б дгЄжЁп¬Ё Їа®Ё§ў®¤ле Ё ®а¬л.
*/
#include <iostream.h>
#include<conio.h>
#include<math.h>
double p[3]={0,0,1}, x[3]={4,-1,2};
double l=1,ym=0.0,E=1e-4;
int k=0;
double Fx1(double x1)
{ return(2*x1-2); }
double Fx2(double x2)
{ return(2*x2-6); }
double Fx3(double x3)
{ return(8*x3+40); }
double norm(double a, double b,double c); //Їа®в®вЁЇ дгЄжЁЁ
void main()
{
clrscr();
cout<<"\n ”гЄжЁп F(x1,x2,x3)=(x1-1)*(x1-1)+(x2-3)*(x2-3)+4*(x3+5)*(x3+5)";
cout<<"\n Ќ з «м п в®зЄ е0=["<<x[0]<<"; "<<x[1]<<"; "<<x[2]<<"]";
cout<<"\n Ќ Їа ў«пойЁ© ўҐЄв®а p=["<<p[0]<<"; "<<p[1]<<"; "<<p[2]<<"]";
cout<<"\n ’®з®бвм Ї®ЁбЄ E="<<E<<endl;
getch();
do
{
for(int i=0; i<3;i++)
{
if(p[0]!=0) { p[0]=0; p[1]=Fx2(x[1]); break ;}
if(p[1]!=0) { p[1]=0; p[2]=Fx3(x[2]); break ;}
if(p[2]!=0) { p[2]=0; p[0]=Fx1(x[0]); break;}
}
// cout<<"\np=["<<p[0]<<"; "<<p[1]<<"; "<<p[2]<<"]";
// cout<<"\nFx1=["<<Fx1(x[0])<<"; "<<Fx2(x[1])<<"; "<<Fx3(x[2])<<"]";
l=(-2*x[0]*p[0]+2*p[0]-2*x[1]*p[1]+6*p[1]-8*x[2]*p[2]-40*p[2])/(2*p[0]*p[0]+2*p[1]*p[1]+8*p[2]*p[2]);
x[0]=x[0]+l*p[0];
x[1]=x[1]+l*p[1];
x[2]=x[2]+l*p[2];
ym=norm(x[0],x[1],x[2]);
cout<<"\n\nЂ«мд l="<<l;
cout<<"\nЌ®а¬ Ја ¤ЁҐв ym="<<ym;
cout<<"\nЌ Їа ў«пойЁ© ўҐЄв®а p=["<<p[0]<<"; "<<p[1]<<"; "<<p[2]<<"]";
cout<<"\nђҐ§г«мв в ¤ ®¬ и ЈҐ x=["<<x[0]<<"; "<<x[1]<<"; "<<x[2]<<"]";
getch();
k++;
}
while(ym>E);
cout<<"\n\n\n —Ёб«® и Ј®ў "<<k;
cout<<"\n Ћ’‚…’ x*=["<<x[0]<<"; "<<x[1]<<"; "<<x[2]<<"]";
getch();
}
double norm(double a,double b,double c) //ЋЎкпў«ҐЁҐ дгЄжЁЁ
{
double gy1=0.0,gy2=0.0,gy3=0.0;
gy1=Fx1(a);
gy2=Fx2(b);
gy3=Fx3(c);
return sqrt(gy1*gy1+gy2*gy2+gy3*gy3);
}
Соседние файлы в папке all