Скачиваний:
15
Добавлен:
01.05.2014
Размер:
1.79 Кб
Скачать
#include <conio.h>
#include "vector.h"

vector p,x0;
double a,b;

double f(double t)
{
	vector x = x0 + t*p;

	return 100 * pow( x.y - pow( x.x ,2 ), 2 ) + pow( 1 - x.x, 2 );
}

double df(double t)
{
	vector x = x0 + t*p;

	return ( 400*( pow( x.x, 3 ) - x.x * x.y ) - 2 + 2*x.x )*p.x + 200*( x.y - pow( x.x, 2 ) ) * p.y;
}

void napr()
{
	p.x = 1; //400 * x0.x * x0.y - 400 * pow( x0.x ,3 ) + 2 - 2*x0.x;
	p.y = 5; //-200 * x0.x + 200 * pow( x0.x, 2 );
}

double norma(vector x1)
{
	return sqrt( pow( x1.x - x0.x, 2 ) + pow( x1.y - x0.y, 2 ) );
}

void Swann4()
{
	double t = fabs( (f(0) - df(0)) / df(0) );

	if( t > 1 ) t = 1;

	if( df(0) > 0 ) p = -p;

	double s = 0;

	do
	{
		s = s + t;
		t = 2*t;
	}
	while( df(0) * df(s) > 0 );

	a = s - t/2;
	b = s;
}
																																					 //
double gam()
{
	double z = df(a) + df(b) + 3*(f(a) - f(b)) / b;
	double w = sqrt( z*z - df(a)*df(b) );
	return a + ( ( z - df(a) + w ) / ( df(b) - df(a) + 2*w ) ) * ( b - a );
}
																														 //
double Davidon(double e)
{
	double c;

	Swann4();

	do
	{
		c = gam();

		if( df(c) < 0 )
		{
			a = c;
		}
		else
		{
			b = c;
		}
	}
	while( fabs( df(c) ) > e );

	return c;
}

void KOSHI()
{
	double al;
    vector x1 = x0;
	int g = 0;

	do
	{
		g++;

		x0 = x1;

		napr();

		al = Davidon(0.001);

		x1 = x0 + al*p;
	}
	while( fabs(f(0) - f(al)) > 0.00001 );

	x0 = x1;

	cout << "\n\t************************************";
	cout << "\n\n\tЉ®«ЁзҐбвў® ЁвҐа жЁ©   " << g;
}

void Koshi()
{
	clrscr();

	vector x01(-1,0);

	int k;

				x0 = x01;

	KOSHI();

	cout << "\n\n\tЋ’‚…’ : ";
	cout << "\t{ " << x0.x << " ; " << x0.y << " }";

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