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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kill100
405 / 271 / 37
Регистрация: 11.12.2010
Сообщений: 1,155
Завершенные тесты: 1
#1

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

24.02.2013, 03:07. Просмотров 346. Ответов 6
Метки нет (Все метки)

Было задание написать метод Дихотомии и Золотого сечения.
Написал проги но на одних и тех же функциях с одинаковой погрешностью и интервалом, выдаётся разный ответ.
Какой метод я неверно написал не могу понять...
Дихотомия
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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2013, 03:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Какой из методов не верен? (C++):

Методы вызываются через указатель на объект класса; Как компилятор определяет, какой из методов надо вызвать? - C++
Ребята, если вникать, то вообще ничё непонятно. Вот смотрите: пусть у нас есть абстрактный класс abstr (abstr.h) и в нём определено,...

Проверить верен ли код. CodeBlock - C++
Задача, даны три катета прямоугольного треугольника.Найти гипотенузу и углы треугольника. using namespace std; int main () { float...

непонятность в условии и верен ли алгоритм - C++
Последовательность из l целых чисел b1, b2, ..., bl (1 ≤ b1 ≤ b2 ≤ ... ≤ bl ≤ n) называется хорошей, если каждое число делит без остатка...

Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов - C++
Реализация методов класса. Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе...

Как записать правильно? Программа работает но код наверно не верен. - C++
#include &lt;iostream&gt; using namespace std; int main() { long sek; cout &lt;&lt; &quot;Enter the number of senonds: &quot;; ...

Делаю лабораторную работу, написал код программы, принцип думаю верен, а вот с синтаксисом проблемы. Помогите исправить ошибки - C++
делаю лабораторную, написал код программы (принцип думаю верен, а вот с синтаксисом проблемы). Условие отправил в ворде. #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
24.02.2013, 12:19 #2
Kill100, такое возможно, если погрешность велика. И, кстати, метод золотого сечения, на самом деле, является частным случаем дихотомии. Так что вам достаточно только одной правильной реализации.
0
iifat
2235 / 1388 / 103
Регистрация: 05.06.2011
Сообщений: 3,822
24.02.2013, 14:21 #3
Собственно, что за вопрос? Возьми результат для функи с известным корнем, сравни -- по крайней мере, какой неверен (стесняюсь спросить, а вдруг оба?) станет ясно.
0
Kill100
405 / 271 / 37
Регистрация: 11.12.2010
Сообщений: 1,155
Завершенные тесты: 1
24.02.2013, 15:51  [ТС] #4
Цитата Сообщение от iama Посмотреть сообщение
Kill100, такое возможно, если погрешность велика. И, кстати, метод золотого сечения, на самом деле, является частным случаем дихотомии. Так что вам достаточно только одной правильной реализации.
Ну так отличаться на 1 при погрешность в 0.001 не может же...
PS я да же не знаю что ищу максимум или минимум.
0
Kill100
405 / 271 / 37
Регистрация: 11.12.2010
Сообщений: 1,155
Завершенные тесты: 1
26.02.2013, 12:27  [ТС] #5
Дихотомия верна Щас в маткаде проверял. А ошибку в сечении найти не могу (
0
aLarman
642 / 563 / 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.
1
Kill100
405 / 271 / 37
Регистрация: 11.12.2010
Сообщений: 1,155
Завершенные тесты: 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}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 13:01
Привет! Вот еще темы с ответами:

Какой из следующих интерфейсов верен - C#
A) interface А {void Print() {};} B) abstract interface А {Print();} C) abstract interface A { abstract void Print() {};} ...

Если ключ не верен — вывести пустой массив, если верен — вывести этот массив - C#
Как мне здесь сделать условие? &quot;Если ключ не верен - вывести пустой массив, если верен - вывести этот массив&quot; это файл сервиса ...

Какой из методов интегрирования наиболее точный и почему - Численные методы
Метод Симпсона, прямоугольников или трапеций?

Какой класс необходим для методов мыши? - Java
одскажите пожалуйста,какой класс нужен для того, что установить положение курсора мыши в точку с координатами, скрыть мышь, установить...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.02.2013, 13:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru