Форум программистов, компьютерный форум CyberForum.ru

Какой из методов не верен? - C++

Восстановить пароль Регистрация
 
Kill100
 Аватар для Kill100
359 / 248 / 33
Регистрация: 11.12.2010
Сообщений: 1,068
Завершенные тесты: 1
24.02.2013, 03:07     Какой из методов не верен? #1
Было задание написать метод Дихотомии и Золотого сечения.
Написал проги но на одних и тех же функциях с одинаковой погрешностью и интервалом, выдаётся разный ответ.
Какой метод я неверно написал не могу понять...
Дихотомия
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// Дихотомия.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"//все включения здесь
using namespace std;
 
//Функция
double f(double x)
{
    return x*sin(x);
}
 
//метод дихотомии, возвращает max значение на отрезке [a;b] 
double dichotomia(double a, double b, double e)
{
    double ak=a, bk=b,tau=(e/3);
    do 
    {
        //шаг 1 вычисление альфа и бета на текущей итерации
        double alpha_k=(ak + bk)/2-tau;
        double beta_k=(ak + bk)/2+tau;
        //шаг 2
        if(f(alpha_k) < f(beta_k))
        {
            bk = beta_k;
        }
        else
        {
            ak = alpha_k;
        }
    } 
    while (!(ak-bk<=e));//условие выхода из цикла с заданной погрешностью
    return (ak+bk)/2;//Возвращаем ответ
}
 
//точка входа в приложение
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");//русская локаль
    printf("Метод \"Дихотомии\"\nВведите интервал отрезка [a;b]\n");
    double a=0,b=0,e=0;
    cin>>a>>b;
    printf("Введите погрешность e\n");
    cin>>e;
    printf("Ответ: %f\n",dichotomia(a,b,e));
    system("pause");//ждём реакции юзера
    return 0;
}

Золотое сечение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Золотое_Сечение.cpp: определяет точку входа для консольного приложения.
//Реализует метод золотого сечения
 
#include "stdafx.h"//Все включения для этого проекта тут
using namespace std;
 
//Функция
double f(double x)
{
    return x*sin(x);
}
 
//метод золотого сечения, возвращает max значение на отрезке [a;b] 
double golden_ratio(double a, double b, double e)
{
    double ak=a, bk=b,lambda=sqrt((5)-1)/2;     
    //задаём начальные значения альфы и беты
    double alpha_k = a + (1 - lambda)*(b - a);
    double beta_k = a + lambda*(b - a);
    do //Начало цикла
    {
        if(f(ak)>f(bk))//если f(ak)>f(bk)
        {
            //шаг 2
            ak = alpha_k;
            alpha_k=beta_k;
            beta_k = ak + lambda*(bk - ak);
        }
        else
        {
            //шаг 3
            bk = beta_k;
            beta_k = alpha_k;
            alpha_k=ak + (1 - lambda)*(bk - ak);;
        }
    }
    while (!((bk-ak)<e));
    return f((ak+bk)/2);//результат выполнения функции
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    printf("Метод \"Золотого сечения\"\nВведите интервал отрезка [a;b]\n");
    double a=0,b=0,e=0;
    cin>>a>>b;
    printf("Введите погрешность e\n");
    cin>>e;
    printf("Ответ: %f\n",golden_ratio(a,b,e));
    system("pause");//ждём реакции юзера
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2013, 03:07     Какой из методов не верен?
Посмотрите здесь:

Как записать правильно? Программа работает но код наверно не верен. C++
C++ Как определять какой метод должен быть статическим, а какой нет?
C++ Делаю лабораторную работу, написал код программы, принцип думаю верен, а вот с синтаксисом проблемы. Помогите исправить ошибки
Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов C++
C++ Методы вызываются через указатель на объект класса; Как компилятор определяет, какой из методов надо вызвать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
24.02.2013, 12:19     Какой из методов не верен? #2
Kill100, такое возможно, если погрешность велика. И, кстати, метод золотого сечения, на самом деле, является частным случаем дихотомии. Так что вам достаточно только одной правильной реализации.
iifat
2179 / 1332 / 96
Регистрация: 05.06.2011
Сообщений: 3,690
24.02.2013, 14:21     Какой из методов не верен? #3
Собственно, что за вопрос? Возьми результат для функи с известным корнем, сравни -- по крайней мере, какой неверен (стесняюсь спросить, а вдруг оба?) станет ясно.
Kill100
 Аватар для Kill100
359 / 248 / 33
Регистрация: 11.12.2010
Сообщений: 1,068
Завершенные тесты: 1
24.02.2013, 15:51  [ТС]     Какой из методов не верен? #4
Цитата Сообщение от iama Посмотреть сообщение
Kill100, такое возможно, если погрешность велика. И, кстати, метод золотого сечения, на самом деле, является частным случаем дихотомии. Так что вам достаточно только одной правильной реализации.
Ну так отличаться на 1 при погрешность в 0.001 не может же...
PS я да же не знаю что ищу максимум или минимум.
Kill100
 Аватар для Kill100
359 / 248 / 33
Регистрация: 11.12.2010
Сообщений: 1,068
Завершенные тесты: 1
26.02.2013, 12:27  [ТС]     Какой из методов не верен? #5
Дихотомия верна Щас в маткаде проверял. А ошибку в сечении найти не могу (
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
26.02.2013, 12:45     Какой из методов не верен? #6
Цитата Сообщение от Kill100 Посмотреть сообщение
C++
1
lambda=sqrt((5)-1)/2;
а чего какой странный короень из числа? 5-1 О_О зачем?, или имелась ввиду запись ?
C++
1
(sqrt(5.)-1)/2.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 13:01     Какой из методов не верен?
Еще ссылки по теме:

C++ Найти с какой стороны цикл будет находить 0 скорее и на какой позиции он стоит
C++ Создание методов в С++
непонятность в условии и верен ли алгоритм C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kill100
 Аватар для Kill100
359 / 248 / 33
Регистрация: 11.12.2010
Сообщений: 1,068
Завершенные тесты: 1
26.02.2013, 13:01  [ТС]     Какой из методов не верен? #7
Цитата Сообщение от aLarman Посмотреть сообщение
а чего какой странный короень из числа? 5-1 О_О зачем?, или имелась ввиду запись ?
C++
1
(sqrt(5)-1)/2
Ого спасибо чел. Не заметил такой фигни.
Должно было быть
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{sqrt(5)-1}{2}
Yandex
Объявления
26.02.2013, 13:01     Какой из методов не верен?
Ответ Создать тему
Опции темы

Текущее время: 13:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru