Скачиваний:
14
Добавлен:
01.05.2014
Размер:
1.92 Кб
Скачать
# include <iostream.h>
# include <math.h>
# include <stdlib.h>
# include <conio.h>

double d,min1,min2,p1,p2,al,x2=3,x22,x1=0,x12,a1,a2,b1,b2,l1,l2,m1,m2,e=0.01;

double f (double x1, double x2)
{ return (x1-2)*(x1-2)*(x1-2)*(x1-2) + (x1-2*x2)*(x1-2*x2);}

double proiz (double x1, double x2, double p1, double p2)
{ return (4*(x1-2)*(x1-2)*(x1-2) + 2*(x1-2*x2))*p1 - 4*(x1-2*x2)*p2;}

double norma (double p1, double p2)
{
 double z = sqrt(p1*p1+p2*p2);
 p1n = p1/z;
 p2n = p2/z;
 return (p1n,p2n);
}
double grad1(double x1, double x2)
{ return (4*(x1-2)*(x1-2)*(x1-2) + 2*(x1-2*x2));}

double grad2(double x1, double x2)
{ return (-4*(x1-2*x2));}

double poisk (double x1,double x2,double p1,double p2)
{
//swann4
 if (fabs((f(x1,x2)-proiz(x1,x2,p1,p2))/proiz(x1,x2,p1,p2)) > 1) {al = 1;}

 else {al = fabs((f(x1,x2)-proiz(x1,x2,p1,p2))/proiz(x1,x2,p1,p2));}

 if (proiz(x1,x2,p1,p2) > 0)
 { p1=-p1;p2=-p2;}

 while (proiz(x12,x22,p1,p2) < 0)
 {
	x12 = x1 + al*p1;
	x22 = x2 + al*p2;
	x1 = x12;
	x2 = x22;
	al = 2*al;
 }

 a1 = x1 - 0.5*al*p1; b1 = x1;
 a2 = x2 - 0.5*al*p2; b2 = x2;
//Dihotomija
 d = 0.00001*e;
 l1 = (a1+b1)/2 - d*p1;
 m1 = (a1+b1)/2 + d*p1;
 l2 = (a2+b2)/2 - d*p2;
 m2 = (a2+b2)/2 + d*p2;

 while (fabs(b1-a1) >= e)
 {
	l1 = (a1+b1)/2 - 0.5*d*p1;
	m1 = (a1+b1)/2 + 0.5*d*p1;
	l2 = (a2+b2)/2 - 0.5*d*p2;
	m2 = (a2+b2)/2 + 0.5*d*p2;

	if (f(l1,l2) < f(m1,m2))
	{
	 b1 = m1;
	 b2 = m2;
	}
	else
	{
	 a1 = l1;
	 a2 = l2;
	}
 }

 min1 = (a1+b1)/2;
 min2 = (a2+b2)/2;
 return (min1,min2);
}

void main()
{
 clrscr();
 p1 = -grad1(x1,x2);
 p2 = -grad2(x1,x2);
 norma(p1,p2);
 poisk(x1,x2,p1n,p2n);

 while ((fabs(grad1(min1,min2)) >=e)&(fabs(grad2(min1,min2)) >=e))
 {
	p1 = -grad1(min1,min2);
	p2 = -grad2(min1,min2);
	norma(p1,p2);
	poisk(min1,min2,p1,p2);
 }

 cout<<min1<<"  "<<min2<<'\n';

 getch();
}
Соседние файлы в папке all