Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Здрасте! Помогите, пожалуйста, разобраться с ошибками. Задание следующее: Найти экстремумы функции методом золотого сечения (это когда мы постепенно сужаем отрезок. на котором рассматриваем функцию). Язык программирования - Си++.
Вот что я нашла:
Код:

#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 в 10:53.
Виктори вне форума   Ответить с цитированием
Старый 08.11.2010, 11:08   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

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

#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, 16:53   #3
Виктори
Новичок
 
Регистрация: 08.11.2010
Сообщений: 2
Репутация: 10
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


18:14.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru