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

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

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

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

06.10.2012, 13:23. Просмотров 1459. Ответов 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++
Методом половинного деления найти решение следующих нелинейных уравнений с точностью e=0.01 e=0.001; e=0.0001;e=0.00001; e=0.00001; ...

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

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

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

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

Метод половинного деления - C++
Добрый вечер! значит так господа, помогите реализовать этакий метод вот в таком случае: вводится число и надо вычислить его корень...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
Эксперт C
15663 / 9990 / 1499
Регистрация: 24.12.2010
Сообщений: 18,763
06.10.2012, 13:49     Метод половинного деления #2
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
if ((A*A+3*sin(A))*(x*x+3*sin(x))<0)
При первой же иттерации (x=0) твое условие не выполняется (выражение = 0)
Надо отдельно рассмотреть случаи ==0 и будет тебе счастье...
yuliyayuliya28
3 / 3 / 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
15663 / 9990 / 1499
Регистрация: 24.12.2010
Сообщений: 18,763
06.10.2012, 14:19     Метод половинного деления #4
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
Т.е. если ((A*A+3*sin(A))*(x*x+3*sin(x))=0) то сразу корень x=0?
Корень или x или A (мб и оба)
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
06.10.2012, 14:29  [ТС]     Метод половинного деления #5
Цитата Сообщение от Байт Посмотреть сообщение
Корень или x или A (мб и оба)
а как это проверить?
BumerangSP
4285 / 1407 / 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;
}
Ведь проще вынести свою функцию в отдельный блок?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2012, 21:28     Метод половинного деления
Еще ссылки по теме:

Метод половинного деления - C++
Уравнение: sin x − 2.3x = 2.8 на интервале от (-π до π)

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

Метод половинного деления. - C++
Программа в 3-х файлах с «заглушками». Спецификация функций (заголовочный файл): 1. Печать сообщения о назначении программы и ее...

Метод половинного деления - C++
Нужно решить код методом половинного деления. ответ неправильный выдается. Может кто-то подсказать, в чем ошибка? #include &lt;iomanip&gt; ...

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


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

Или воспользуйтесь поиском по форуму:
yuliyayuliya28
3 / 3 / 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;
}
Ведь проще вынести свою функцию в отдельный блок?)
Спасибо я и не подумала)
Yandex
Объявления
06.10.2012, 21:28     Метод половинного деления
Ответ Создать тему
Опции темы

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