Скачиваний:
13
Добавлен:
01.05.2014
Размер:
3.7 Кб
Скачать
#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