Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Различные алгоритмы минимизации, реализованные в С++ / all / LAB9
.CPP#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
class Point
{
public:
double a,b;
Point(double x,double y);
Point operator+(Point ob2);
Point operator-(Point ob2);
Point operator*(Point ob2);
Point operator*(double m);
Point operator=(Point ob2);
};
Point::Point(double x,double y)
{
a=x;
b=y;
}
Point Point::operator+(Point ob2)
{
Point temp(0,0);
temp.a=a+ob2.a;
temp.b = b + ob2.b;
return temp;
}
Point Point :: operator-(Point ob2)
{ Point temp(0,0);
temp.a = a - ob2.a;
temp.b = b - ob2.b;
return temp;
}
Point Point :: operator*(Point ob2)
{ Point temp(0,0);
temp.a = a*ob2.a;
temp.b = b*ob2.b;
return temp;
}
Point Point :: operator=(Point ob2)
{ a = ob2.a;
b = ob2.b;
return *this;
}
Point Point:: operator*(double m)
{ this->a=a*m;
this->b=b*m;
return *this;
}
double fx(Point p,int func)
{
if (func==1)
return(8*p.a*p.a+4*p.a*p.b+5*p.b*p.b);
if (func==2)
return(p.a*p.a*p.a+p.b*p.b-3*p.a-2*p.b+2);
if (func==3)
return(4*(p.a-5)*(p.a-5)+(p.b-6)*(p.b-6));
if (func==4)
return((p.b-p.a*p.a)*(p.b-p.a*p.a)+100*(1-p.a*p.a)*(1-p.a*p.a));
if (func=5)
return(-12*p.b+4*p.a*p.a+4*p.b*p.b-4*p.a*p.b);
}
void main()
{
int func,i=0,m=0,n=0,M=4,beta=2,k=0,j=0;
float r=0,g=0,t_0=0,t_1=0;
float raspr[1][1];
float norma [1];
float napr[1][1];
float temp_0=0,temp_1=0;
float alpha=0,eps=0.0000001;
int kop=0;
double f1,f2;
clrscr();
cout<<"Vibirai funkciyu: (1-21 / 2-26 / 3-22 / 4-24 / 5-27): "<<endl;
cin>>func;
cout<<endl;
Point x_nach(0,0);
Point x(0,0);
cout<<"Pls,vvedite koordinati nachalnoi tochki: "<<endl;
cin>>x_nach.a;
cin>>x_nach.b;
cout<<endl;
randomize();
alpha=0.5*sqrt(x_nach.a*x_nach.a+x_nach.b*x_nach.b);
while ((kop!=1))
{
for (m=0;m<1;m++)
{
for (n=0;n<2;n++)
{
// printf("raspr: ");
r=random(100);
r=2*(r/100)-1;
raspr[m][n]=r;
// printf("%f \n",r);
// printf("%f \n",alpha);
// getch();
}
}
g=sqrt(raspr[0][0]*raspr[0][0]+raspr[0][1]*raspr[0][1]);
t_0=raspr[0][0]/g;
t_1=raspr[0][1]/g;
napr[0][0]=t_0;
napr[0][1]=t_1;
while (j<M)
{
x.a=x_nach.a+alpha*t_0;
x.b=x_nach.b+alpha*t_1;
f1=fx(x,func);
f2=fx(x_nach,func);
if (f1<f2)
{
x_nach=x;
k=k+1;
for (m=0;m<1;m++)
{
for (n=0;n<2;n++)
{
// printf("raspr: ");
r=random(100);
r=2*(r/100)-1;
raspr[m][n]=r;
// printf("%f \n",r);
// printf("%f \n",alpha);
// getch();
}
}
g=sqrt(raspr[0][0]*raspr[0][0]+raspr[0][1]*raspr[0][1]);
t_0=raspr[0][0]/g;
t_1=raspr[0][1]/g;
napr[0][0]=t_0;
napr[0][1]=t_1;
}
else
{
k=k+1;
j=j+1;
for (m=0;m<1;m++)
{
for (n=0;n<2;n++)
{
// printf("raspr: ");
r=random(100);
r=2*(r/100)-1;
raspr[m][n]=r;
// printf("%f \n",r);
// printf("%f \n",alpha);
// getch();
}
}
g=sqrt(raspr[0][0]*raspr[0][0]+raspr[0][1]*raspr[0][1]);
t_0=raspr[0][0]/g;
t_1=raspr[0][1]/g;
napr[0][0]=t_0;
napr[0][1]=t_1;
}
}
if (j=M)
{
if (alpha<eps) {kop=1;}
else
{
alpha=alpha/beta;
j=1;
}
}
cout<<"alpha: "<<alpha<<endl;
cout<<"Vot on minimum: "<<endl;
cout<<x.a<<endl;
cout<<x.b<<endl;
cout<<"Kol-vo iteracii: ";
cout<<k<<endl<<endl;
}
/* cout<<"Vot on minimum: "<<endl;
cout<<x.a<<endl;
cout<<x.b<<endl;
cout<<"Kol-vo iteracii: ";
cout<<k<<endl<<endl; */
getch();
}
Соседние файлы в папке all