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

Метод деления пополам - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
tesler
 Аватар для tesler
3 / 3 / 0
Регистрация: 08.04.2011
Сообщений: 197
01.03.2012, 23:49     Метод деления пополам #1
плиз!!!подскажите!!!
нам дана функция х*х-2=0,мы знаем отрезок на котором будем искать иксы[0,3], эпселон=10 в минус шестой степени,будем искать иксы методом деления пополам!получаю ответ, но не такой!точно не знаю ответ, но знаю, что он состоит из единиц и четверок(четверки там точно присутствуют)
посмотрите может, что не так?
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
# include <iostream>
# include <windows.h>
# include <conio.h>
# include <stdlib.h>
# include <stdio.h>
# include <math.h>
# include <cmath>
 
using namespace std;
 
float f(float x)
{
    return  x*x-2;
}
 
 
 
float n(float a, float b)
{   float E;
    E=0,0000001;
    while ((b-a) > E)
    { 
      float x=(a+b)/2;
      if (f(x)*f(a) < 0)
          b=x;
      else a=x;
      return (a+b)/2;
    }
    _getch();
}
 
int main()
{
  SetConsoleOutputCP(1251);
  cout<<n(0,3);
  _getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
02.03.2012, 00:42     Метод деления пополам #2
Вроде так:
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
long double metdih()
{
    long double a(0), b(0), d(0), x(0);
    int N(1);
    cout << "Метод половинного деления (метод дихотомии):" << endl;
    cout << "a = "; cin >> a;
    cout << "b = "; cin >> b;
    cout << "Точность: "; cin >> d;
    do
    {
        x = (a + b) / 2.;
        if (f(a) * f(x) < 0)
        {
            b = x;
        }
        else if (f(x) * f(b) < 0)
        {
            a = x;
        }
        else if ((f(x) * f(b) == 0) && (f(x) * f(a) == 0))
        {
            cout << "Корень x = " << x << endl;
            break;
        }
        else
        {
            cout << "В указанном интервале корней нет, или больше одного." << endl;
            break;
        }
        cout << "N = " << N << "  x = " << x << endl;
        N++;
    }
    while (fabs(a - b) > d);
    return x;
}
tesler
 Аватар для tesler
3 / 3 / 0
Регистрация: 08.04.2011
Сообщений: 197
15.03.2012, 23:35  [ТС]     Метод деления пополам #3
а почему он до бесконечности работает...что то не так в цикле...
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
15.03.2012, 23:47     Метод деления пополам #4
Для функций вообще используют тернарный поиск, напишите нормально входные данные, из первого поста ничего не понять. (то есть напишите, какие переменные даны, что за функция (возрастающая, спадающая вообще не понятно), что надо найти)
Yandex
Объявления
15.03.2012, 23:47     Метод деления пополам
Ответ Создать тему
Опции темы

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