Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2010, 04:38   #1
Виктори
Новичок
Джуниор
 
Регистрация: 08.11.2010
Сообщений: 2
Вопрос Нахождение экстремума функции

Здрасте! Помогите, пожалуйста, разобраться с ошибками. Задание следующее: Найти экстремумы функции методом золотого сечения (это когда мы постепенно сужаем отрезок. на котором рассматриваем функцию). Язык программирования - Си++.
Вот что я нашла:
Код:
#include <iostream>
#define eps 1e-3
#define tay 1.618
 
void Gold(double a, double b)
{
        std::cout<<"\n\n\n\tМетод золотого сечения:\n";
        double x1, x2, _x, xf1, xf2;
        int iter(0);
        x1 = a + (b - a) / (tay * tay);
        x2 = a + (b - a) / tay;
        xf1 = Fun(x1);
        xf2 = Fun(x2);
  P:
        iter++;
        if(xf1 >= xf2)
        {
                a = x1;
                x1 = x2;
                xf1 = Fun(x2);
                x2 = a + (b - a) / tay;
                xf2 = Fun(x2);
        }
        else
        {
                b = x2;
                x2 = x1;
                xf2 = xf1;
                x1 = a + (b - a) / (tay * tay);
                xf1 = Fun(x1);
        }
        if(fabs(b - a) < eps) 
        {
                _x = (a + b) / 2;
                std::cout<<"Результат:\nx = "<<_x<<"\t\tF(x) = "<<Fun(_x)<<
                        "\nКоличество итераций: "<<iter;
        }
        else
                goto P;
}
Вопрос 1: это вообще верно? (сама проверить не могу)
Вопрос 2: Если нет...то что мне вообще надо делать?????
Заранее всем спасибо) А если поможете - будет вообще супер!

Последний раз редактировалось Stilet; 08.11.2010 в 09:53.
Виктори вне форума Ответить с цитированием
Старый 08.11.2010, 10:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

По-моему у тебя дюже сложно написанно. Типичные закидоны методичек.
Я бы написал проще:
Код:
#include <math.h>

double func(double x) {return sin(x);}

int _tmain(int argc, _TCHAR* argv[])
{
	double a=0,b=90,eps=0.1,fi=0.1;
	double xa=b-(b-a)/fi,xb=a+(b-a)/fi;
	double ya=func(xa),yb=func(xb);

	for(;(a-b)<eps;){
		if(ya<=yb){
			b=xb;xb=xa;xa=b-(b-a)/fi;
			yb=ya;ya=func(xa);
		} else {
			a=xa;xa=xb;xb=a+(b-a)/fi;
			ya=yb;yb=func(xb);
		}
	}
	printf("%f",(ya<yb)?ya:yb);
	getchar();
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.11.2010, 15:53   #3
Виктори
Новичок
Джуниор
 
Регистрация: 08.11.2010
Сообщений: 2
По умолчанию

Я наверное тормоз...но можешь объяснить что тут написано???
Виктори вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение экстремумов функции в delphi Tatusya Помощь студентам 5 18.06.2010 17:55
Нахождение экстремума функции от двух переменных dekameron Помощь студентам 3 26.05.2010 08:16
Поиск экстремума методом Ньютона hohotuha16 Помощь студентам 1 23.12.2009 17:32
Нахождение функции F(a) Forro Помощь студентам 2 25.05.2008 12:24