Скачиваний:
6
Добавлен:
03.06.2014
Размер:
1.56 Кб
Скачать
// lar_1_28_04_14.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <math.h>

using namespace std;

double function( double x ) {
	return 2*x*x-exp(x); 
}


void Svenn( double (*f)(double), double x, double& a, double& b, double h, int& k ) {
	k = 0;
 
	if( f(x) < f(x+h) )
		h *= -1;
 
	for( k=0; f(x+h) < f(x); k++ ) {
		h *= 2;
		x += h;
	}
 	if(h > 0){
		a = x-h;
		b = x+h;
	} else {
		a = x+h;
		b = x-h;
	}


}


double GoldenSection2( double (*f)(double), double a, double b, int &k, double eps = 0.001 ) {
	double x1 = a + 0.38196 * ( b - a );
	k = 0;
	while( abs(b-a) > eps ) {
		double x2 = a + b - x1;

		if( x1 < x2 )
			if( f(x1) < f(x2) )
				b = x2;
			else {
				a = x1;
				x1 = x2;
			}
		if( x1 > x2 )
			if( f(x1) < f(x2) )
				a = x2;
			else {
				b = x1;
				x1 = x2;
			}
		k++;
	}
	return (a + b)/2;
}



int main( void ) {

	int k0, k1;    
	double a, b,     
		x_m,      
		h   = 0.01,    
		eps = 0.0001, 
		x0  =1;    

	system( "cls" );

	Svenn( function, x0, a, b, 0.001, k0 );
	x_m = GoldenSection2( function, a, b, k1, eps );
	cout << "Epsilon: " << eps << endl;
	cout << "Swenn: " <<"[" << a <<";"  << b <<"]" << endl;
	cout << "GS-2:    " << x_m << " / Iterations: " << k0 << endl;
	cout << "x0:      " << x0  << endl;
	cout << "------------------------" << endl;
	cout << "GS-2:    " << x_m << " / Iterations: " << k1 << endl;
	cout << endl;
	system( "pause" );
	return 0;
}
Соседние файлы в папке р 1-5, 2 вар.; 7 лаб. метод Полака Рибьера + Лекции МО + перевод ГА