
Добавил:
Medi
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Л / р 1-5, 2 вар.; 7 лаб. метод Полака Рибьера + Лекции МО + перевод ГА / lar_1_28_04_14
.cpp// 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 лаб. метод Полака Рибьера + Лекции МО + перевод ГА