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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
yuliyayuliya28
4 / 4 / 0
Регистрация: 06.03.2011
Сообщений: 319
#1

Метод половинного деления - C++

06.10.2012, 13:23. Просмотров 1480. Ответов 6
Метки нет (Все метки)

Метод половинного деления для функции x^2-3*sin(x)=0;
Корнями должны быть -1.7 и 0...на промежутке от -2 до -1 работает и находит -1.7.а 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
double half_div(double A,double B,double E)
{
    double x=A;
    double xx=B;
    int k=0;
    while (fabs(x-xx)>E)
    {
        xx=x;
        x=(A+B)/2;
        k++;
        if ((A*A+3*sin(A))*(x*x+3*sin(x))<0)//f(a)*f(x)<0
        {
            B=x;
        }
        else
        {
            A=x;
        }
    }
    cout<<"Корень: "<<x<<endl;
    cout<<"Количество итераций: "<<k<<endl;
    return x;
}
для нуля брала промежуток [-0.5;0,5] выводит просто непонятное число(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2012, 13:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод половинного деления (C++):

Нахождения корней уравнения: метод половинного деления (бисекции) или метод хорд - C++
Разработать программу нахождения корней уравнения f(x) =0 на интервале с точностью e = 0,001 (интервал или подобрать самостоятельно). При...

Метод половинного деления - C++
Нужно написать код для решения заданного уравнения методом половинного деления. Получилось так. В реализации метода, видимо, ошибки, но как...

Метод половинного деления - C++
Скажите почему не выводит &quot;c&quot; #include &lt;stdafx.h&gt; #define _USE_MATH_DEFINES #include &lt;cmath&gt; #include &lt;math.h&gt; #include...

метод половинного деления - C++
дана f(x). дан отрезок на котором расположены положительные корни дана точность E могу написать функцию, для нахождения одного корня...

Метод половинного деления - C++
Здравствуйте, многоуважаемая аудитория данного форума. И не сосчитать сколько раз киберфорум меня выручал. Надеюсь на вашу помощь еще раз. ...

Метод половинного деления. - C++
Нужно написать программу вводишь любые цифры она их сортирует по возрастанию и показывает использовать &quot;метод половинного...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Байт
Эксперт C
15996 / 10264 / 1537
Регистрация: 24.12.2010
Сообщений: 19,359
06.10.2012, 13:49 #2
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
if ((A*A+3*sin(A))*(x*x+3*sin(x))<0)
При первой же иттерации (x=0) твое условие не выполняется (выражение = 0)
Надо отдельно рассмотреть случаи ==0 и будет тебе счастье...
yuliyayuliya28
4 / 4 / 0
Регистрация: 06.03.2011
Сообщений: 319
06.10.2012, 14:13  [ТС] #3
Цитата Сообщение от Байт Посмотреть сообщение
При первой же иттерации (x=0) твое условие не выполняется (выражение = 0)
Надо отдельно рассмотреть случаи ==0 и будет тебе счастье...
Т.е. если ((A*A+3*sin(A))*(x*x+3*sin(x))=0) то сразу корень x=0?
Байт
Эксперт C
15996 / 10264 / 1537
Регистрация: 24.12.2010
Сообщений: 19,359
06.10.2012, 14:19 #4
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
Т.е. если ((A*A+3*sin(A))*(x*x+3*sin(x))=0) то сразу корень x=0?
Корень или x или A (мб и оба)
yuliyayuliya28
4 / 4 / 0
Регистрация: 06.03.2011
Сообщений: 319
06.10.2012, 14:29  [ТС] #5
Цитата Сообщение от Байт Посмотреть сообщение
Корень или x или A (мб и оба)
а как это проверить?
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
06.10.2012, 16:31 #6
yuliyayuliya28,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
double f(double x)
{
 return x*x+3*sin(x);
} 
 
double half_div(double A,double B,double E)
{
    double x;
    int k=0;
    while (fabs(B-A)>E)
    {
       x=(A+B)/2;  
        if ( f(A)*f(x)<0 )//f(a)*f(x)<0
           B=x;
        else
           A=x;     
        k++;
    }
    cout<<"Корень: "<<x<<endl;
    cout<<"Количество итераций: "<<k<<endl;
    return x;
}
Ведь проще вынести свою функцию в отдельный блок?)
yuliyayuliya28
4 / 4 / 0
Регистрация: 06.03.2011
Сообщений: 319
06.10.2012, 21:28  [ТС] #7
Цитата Сообщение от BumerangSP Посмотреть сообщение
yuliyayuliya28,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
double f(double x)
{
 return x*x+3*sin(x);
} 
 
double half_div(double A,double B,double E)
{
    double x;
    int k=0;
    while (fabs(B-A)>E)
    {
       x=(A+B)/2;  
        if ( f(A)*f(x)<0 )//f(a)*f(x)<0
           B=x;
        else
           A=x;     
        k++;
    }
    cout<<"Корень: "<<x<<endl;
    cout<<"Количество итераций: "<<k<<endl;
    return x;
}
Ведь проще вынести свою функцию в отдельный блок?)
Спасибо я и не подумала)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2012, 21:28
Привет! Вот еще темы с ответами:

Метод половинного деления - C++
Не пойму в чем ошибка, поскажите:wall: #include &lt;math.h&gt; #include &lt;iostream&gt; #include &lt;graphics.h&gt; using namespace std; const int...

Метод половинного деления - C++
Помогите мне! У меня не вычисляет корень вообще #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; ...

Метод половинного деления в си++ - C++
Листинг программы метода половинного деления на си++ для функции:tgx-1/3(tgx)^3+1/5(tgx)^5-1/3=0?

Метод половинного деления - C++
необходимо было написать программу, которая отделяет корни уравнения методом половинного деления с погрешностью 0,0001. первый корень...


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

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

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