Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/79: Рейтинг темы: голосов - 79, средняя оценка - 4.94
 Аватар для Basill
40 / 40 / 34
Регистрация: 16.02.2013
Сообщений: 197

Нахождение экстремума min методом половинного деления

07.05.2013, 00:04. Показов 16130. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем проблема такая, препод сказал реализовать метод половинного деления для нахождения экстремума функции с точностью 10^-4.
Сделал лабу предоставив код преподу:
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
#define _USE_MATH_DEFINES
#include <cmath>
#include <math.h>
#include <iostream> 
#include <clocale>
#include <conio.h>
using namespace std;
 
float f(float x)
{
    return  (2*x)*(2*x)+x*0.5;
}
void main()
{   setlocale (LC_ALL, "Russian");
    float a,b,d,x;
    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);
   getch();
}
Препод глянул и сказал что я нашел корень этого уравнения, а надо найти минимум и сказал про 3 отрезка каких то, типо наш заданный интервал [a,b] делится на 3 отрезка и там находится.

Добавлено через 56 секунд
мое уравнение
Цитата Сообщение от Basill Посмотреть сообщение
(2*x)*(2*x)+x*0.5;
Добавлено через 3 часа 4 минуты
upp
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2013, 00:04
Ответы с готовыми решениями:

Нахождение площади методом половинного деления
Народ подскажите как находить площадь фигуры методом половинного деления, Вот фигура напрвте как решать метод половинного деления знаю...

Нахождение минимума функции методом половинного деления
Есть программа нахождения корня методом половинного деления. Как ее переделать, чтобы она находила минимум функции и выводила график не...

Нахождение корня уравнения методом половинного деления
Вообщем дорогие друзья спасайте. Препод сказал сделать программу которая решает методом половинного деления функции, вот только загвоздка...

3
13 / 13 / 4
Регистрация: 15.04.2010
Сообщений: 61
07.05.2013, 14:28
Минимум функции находится в точке, где производная функции равна нулю.
Производную, действительно, можно искать методом половинного деления (метод конечных разностей).
f'(x)=(f(a) - f(b))/2, и так в обе стороны, пока a_i, b_i не будут бесконечно близки и f'(x) не будет равен нулю (c нужной точностью). Среди всех нулевых значений производной f'(x) выбрать минимальное значение самой функции f(x) в точке x.
Экстремумы функции

Добавлено через 1 час 31 минуту
f'(x)=(f(a)-f(b))/(¦a-b¦)
1
 Аватар для Basill
40 / 40 / 34
Регистрация: 16.02.2013
Сообщений: 197
07.05.2013, 15:52  [ТС]
Это то все понятно мне то как подправить то?
0
13 / 13 / 4
Регистрация: 15.04.2010
Сообщений: 61
08.05.2013, 19:36
Вроде должно работать проверил на интервале [-1; 50]
Теория тут:
http://webmath.exponenta.ru/s/kiselev1/node87.htm

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
#include <cmath>
#include <math.h>
#include <iostream>
#include <clocale>
using namespace std;
 
float f(float x)
{
    return  (2*x)*(2*x)+x*0.5;
}
int main()
{   setlocale (LC_ALL, "Russian");
    float a,b,d,x;
    int N=1;
    cin << a;
    cin << b;
    cin << d;
    double sigma = d/2-d/4;
 
    cout << "Метод половинного деления (метод дихотомии):" << endl;
     do
    {
        x = (a + b) / 2.;
        float l = x - sigma;
        float r = x + sigma;
 
        if (f(l) <=  f(r))
        {
            b = r;
        }
        else if (f(l) > f(r))
        {
            a = l;
        }
          cout << "N = " << N << "  x = " << x << endl;
        N++;
    }
    while (fabs(a - b) > d);
   return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.05.2013, 19:36
Помогаю со студенческими работами здесь

Решение уравнения методом половинного деления и методом итераций
Решить уравнение следующими способами: 1) Метод половинного деления 2) Метод итераций Уравнение: e^(x) - e^(-x) - 2 = 0 Отрезок,...

Поиск экстремума методом деления отрезка пополам
Выдаёт ошибку в 15 строчке. Не могу понять в чём дело, помогите) #include&lt;iostream&gt; #include&lt;math.h&gt; #include&lt;cmath&gt; ...

Поиск элемента методом половинного деления
Привет ребята. Такая проблема не могу реализовать метод половинного деления для поиска елемента,которий вводиться с клавиатуры.Помогите...

Решение уравнения методом половинного деления
Решение уравнения методом половинного деления. \sqrt{x} - x + 3 = 0 Программа работает только положительных значениях...

Решение уравнения методом половинного деления
sin(ln x) - cos(ln x) + 2ln x интервал значение корня 1.3749


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru