Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
4 / 4 / 0
Регистрация: 28.08.2021
Сообщений: 173

Метод деления отрезка пополам

08.12.2021, 16:04. Показов 5272. Ответов 30

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужно реализовать метод деления отрезка пополам. Дано уравнение: x3-5x2+2x+8=0 и корни которые должны получиться: -1; 2; 4.
Нашёл код в интернете, но там надо вводить a, b и приращение ε (eps), а таких данных у меня нет. Помогите пожалуйста
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
#include <iostream>
#include <math.h>
 
using namespace std;
 
double f(double x)
{
    return   x*x*x-5*x*x+2*x+8;
}
 
int main()
{
    int n = 0;
    double a,b,c,eps = 0.001; 
    cout<<"a = ";
    cin>>a;
    cout<<"b = ";
    cin>>b;
    do
    {
        c=(a+b)/2;
        if (f(c)*f(a)<=0) b=c;
        else a=c;
 
        n+=1;
    }
    while (fabs(a-b)>=eps);
        cout<<"c = "<<c<<"\n";
        cout<<"n = "<<n<<"\n";
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.12.2021, 16:04
Ответы с готовыми решениями:

Метод «деления отрезка пополам»
Доброе время суток! Помогите, пожалуйста, довести программу до ума. Итерационный процесс будет продолжать до тех пор, пока для...

Метод деления отрезка пополам
Помогите!! Написать функцию,выполняющую поиск корня уравнения f(x)=0 методом деления отрезка пополам. Используя написанную...

Метод деления отрезка пополам для решения нелинейных уравнений (метод дихотомии)
Здравствуйте. Помогите пожалуйста дописать программу. Вот что вымучал, но на сдаче завалили, типо нет вывода корней, не рассмотрены...

30
4 / 4 / 0
Регистрация: 28.08.2021
Сообщений: 173
08.12.2021, 18:03  [ТС]
Студворк — интернет-сервис помощи студентам
SpBerkut, почему именно 4.1 ?
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
08.12.2021, 18:23
Ваша задача — выделить для каждого корня интервал, в котором есть только этот корень.
Миниатюры
Метод деления отрезка пополам  
1
4 / 4 / 0
Регистрация: 28.08.2021
Сообщений: 173
08.12.2021, 18:37  [ТС]
SpBerkut, спасибо, теперь понял. Можно ещё вопрос?)
Почему при нахождении корней методов Ньютона используются три уравнения вместо одного?
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 <cmath>
 
using namespace std;
 
double f(double x)
{
    return x*x-(cos(x*x));
}
 
double f1(double x)
{
    return 2*x+(1/x);
}
 
double f2(double x)
{
    return 2+(-1/(x*x));
}
 
int main()
{
    double a,b,c,eps = 1e-7;
    cout<<"a = ";
    cin>>a;
    cout<<"b = ";
    cin>>b;
    if(f(a)*f2(a)>0) c=a;
    else c=b;
    do
    {
        c=c-f(c)/f1(c);
    }
    while (fabs(f(c))>=eps);
        cout<<c;
    return 0;
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,542
Записей в блоге: 1
08.12.2021, 18:52
funmanta, это не уравнения, а функции. вторая и третья функции являются производными соответственно первого и второго порядка от f.
Такое впечатление, что вы м-дом Ньютона и не интересовались...
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
08.12.2021, 18:55
Цитата Сообщение от funmanta Посмотреть сообщение
Почему при нахождении корней методов Ньютона используются три уравнения вместо одного?
Если я всё верно помню, то там нужно уравнение функции и уравнение первой производной. В приведённом Вами примере производные посчитаны неправильно. Для чего тут вторая производная — ума не приложу.
0
4 / 4 / 0
Регистрация: 28.08.2021
Сообщений: 173
08.12.2021, 19:04  [ТС]
Kuzia domovenok, как преобразовать функцию x3-8x2+11x+20=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
#include <iostream>
#include <cmath>
 
using namespace std;
 
double f(double x)
{
    return x*x*x+64*x*x+11*x+20;
}
 
double f1(double x)
{
    return x*x-8*x+11+20;
}
 
double f2(double x)
{
    return x-8+11+20;
}
 
int main()
{
    double a,b,c,eps = 1e-7;
    cout<<"a = ";
    cin>>a;
    cout<<"b = ";
    cin>>b;
    if(f(a)*f2(a)>0) c=a;
    else c=b;
    do
    {
        c=c-f(c)/f1(c);
    }
    while (fabs(f(c))>=eps);
        cout<<c;
    return 0;
}
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
08.12.2021, 19:45
Цитата Сообщение от funmanta Посмотреть сообщение
Вот мои наработки:
Не-не-не. Это не наработки. Для начала было бы неплохо ознакомиться с теорией. Википедию, что ли, почитать. Почитать что такое производная. Вы их уже неправильно посчитали.

Добавлено через 36 минут
Взял старую наработку. Особо не проверял, но корни сходятся.
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
#include <iostream>
#include <iomanip>
#include <cmath>
 
const double eps = 1e-5;
 
// функция 
double f(const double x)
{
    return x*x*x - 8*x*x + 11*x + 20;
}
 
// производная функции
double df(const double x)
{
    return (f(x+eps)-f(x-eps))/(2*eps); // численное вычисление производной
    //return 3*x*x - 16*x + 11; // аналитическое вычисление производной
}
 
// поиск корня
double getRoot(double x) {
   double x1  = x - f(x)/df(x);
   double x0 = x;
   while(fabs(x0-x1) > eps) {
      x0 = x1;
      x1 = x1 - f(x1)/df(x1);
   }
   return x1;
}
 
int main()
{
    std::cout << std::setprecision(8) << getRoot(6) << std::endl;
    std::cout << std::setprecision(8) << getRoot(2) << std::endl;
    std::cout << std::setprecision(8) << getRoot(-4) << std::endl;
}
0
4 / 4 / 0
Регистрация: 28.08.2021
Сообщений: 173
09.12.2021, 15:16  [ТС]
SpBerkut, спасибо большое. Какие изменения необходимо внести в этот код, чтобы получился метод деления отрезка пополам? Просто мне ваш вариант больше понравился
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
09.12.2021, 16:52
Лучший ответ Сообщение было отмечено funmanta как решение

Решение

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
#include <iostream>
#include <iomanip>
#include <cmath>
 
const float eps = 1e-5;
 
float f(const float x)
{
    return x*x*x - 8*x*x + 11*x + 20;
}
 
float getRoot(const float a, const float b) {
    if ( f(a)*f(b) > 0 ) return log(-1); // на интервале либо нет корней, либо их больше 1
    
    if ( fabs(a-b) < eps ) {
        return (a + b) / 2;
    } else {
        if ( f(a) * f((a+b)/2) < 0 ) {
            return getRoot(a, (a+b) / 2);
        } else {
            return getRoot((a+b) / 2, b);
        }
    }
}
 
int main()
{
    std::cout << std::setprecision(6) << getRoot(-4, 3) << std::endl;
    std::cout << std::setprecision(6) << getRoot(3, 4.5) << std::endl;
    std::cout << std::setprecision(6) << getRoot(4.5, 8) << std::endl;
}
1
4 / 4 / 0
Регистрация: 28.08.2021
Сообщений: 173
09.12.2021, 18:50  [ТС]
SpBerkut, спасибо
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,542
Записей в блоге: 1
10.12.2021, 12:21
funmanta, у тебя с математикой хуже, чем с программированием? Для какой профессии ты там учишь метод Ньютона, не зная математики? Для сисадмина-священнослужителя?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2021, 12:21

Метод деления отрезка пополам и метод итерации
Методом деления отрезка пополам и методом итерации найти приближенное значение корня 2*x^3+3*x-1=0 абсолютная погрешность 10^-5; Люди...

Визуальное программирование. Метод деления отрезка пополам
Приближенное нахождение решения уравнения f(x)=0 методом деления отрезка пополам. Написать программу, находящую методом деления отрезка...

Минимум Функции (метод деления отрезка пополам)
Подскажите пожалуйста, Мне нужно найти методом деления отрезка пополам минимум функции одной переменной, должно получиться 3 значения на...

2 Программы. На "целые числа и системы счисления" и на "метод деления отрезка пополам"
1)Дано натурально число n. Среди чисел 1, ... ,n найти все такие, запись которых совпадает с последними цифрами их квадрата ( как,...

Ошибка в методе деления отрезка пополам
Программа выдаёт значение, которое находится далеко от точности, в чём ошибка? #include &lt;iostream&gt; #include &lt;cmath&gt; ...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru