Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 17.03.2021
Сообщений: 26

Порядок сходимости метода дихотомии

19.04.2021, 18:31. Показов 3123. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый день!
Задали задание по вычислительной математике.

Написать программу отделения корней и уточнения методом дихотомии:
Входные данные:
  • функция f (x);
  • интервал [a,b];
  • точность по аргументу и по функции ε1, ε2.
  • f(x) 〖=2〗^x-2*cos⁡(x); x > -10.
Выходные данные:
  • корни ξi, точность;
  • значения функции f (ξi);
  • количество итераций n;
  • количество вычислений функции f (x);
  • время счета;
  • параметр сходимости. α=|xn+1 - xn| / |xn - xn-1| , где n – порядок сходимости.


Мое решение ниже. Я получил ответ от преподавателя: "Параметр сходимости вычисляется неверно. При таком подходе всегда будет получаться 1. Используйте формулу из задания".

Подскажите, пожалуйста, почему моя формула α = fabs(ξ-b)/fabs(ξ-a), которую я использую в коде, неверна? Разве xn+1 не есть ξ, т.е. корень, а xn-1 и xn - a и b соответственно?

Code
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include<stdio.h>
#include<math.h>
#include<time.h>
 
double f(double x); //Заданная функция
int res(int i, double a, double b, double ξ, double ε1, double ε2); //Печать результата расчетов
double Bisection(double a, double b, double ε1, double ε2); //Метод дихотомии
 
int main()
{
    double a=-10, b=0, ξ, h=0.5, α, x1, x2, ε1, ε2;
    int i=0;
 
    printf("\nИСХОДНЫЕ ДАННЫЕ:\n");
    printf("\nФункция: f(x) = 2^x - 2 * cos(x)");
    printf("\nНачало интервала: a=-10");
    printf("\nКонец интервала: b=0");
    printf("\nВведите точность вычисления по функции: ");
    scanf("%lf", &ε1);
    printf("Введите точность вычисления по аргументу: ");
    scanf("%lf", &ε2);
    printf("\n\nРЕШЕНИЕ:");
 
    clock_t t; //Время выполнения программы
    t=clock(); //Время выполнения программы
 
    //Отделение корней
    x1=a;
    x2=x1+h;
    while (x2<=b)
    {
        if ((f(x1)*f(x2))<0) 
        {
            i++;
            printf("\n\n%d) %dй корень уравнения содержится на отрезке [%.1f, %.1f]\n",i, i, x1, x2);
            printf("\nn\t     a\t\t   b\t\t ξ\t     f(ξ)\t     ε1\t\t    ε2\n");
            Bisection(x1,x2,ε12); //Уточнение корней методом дихотомии
        }
        x1=x2;
        x2=x1+h;
    }
 
    t = clock()-t; //Время выполнения программы
    float time_taken=((float)t)/CLOCKS_PER_SEC; //Время выполнения программы
    printf("Время выполнения программы: %f сек \n\n", time_taken);
    return 0;
}
 
//Заданная функция
double f(double x) 
{
   double y;
   y=pow(2,x)-2*cos(x);
   return y;
}
 
//Печать результата расчетов
int res(int i, double a, double b, double ξ, double ε1, double ε2) 
{
   printf("%d\t%10.7f    %10.7f    %10.7f    %10.7f    %e    %e\n", i, a, b, ξ, f(ξ), ε1, ε2);
   return 0;
}
 
//Метод дихотомии
double Bisection(double a, double b, double ε1, double ε2)
{
    double ξ=(a+b)/2; //Середина отрезка
    double α;
    int i=0;
    if (f(ξ)==0) 
    {
        printf("Корень уравнения: %f \n\n", ξ);
    }
    else 
    {
        while ((fabs(f(ξ))1) && ((fabs(b-a)/2)2)) //Точность определения корня
        {
            if ((f(a)*f(ξ))<0) 
            {
                b=ξ;
            }
            else 
            {
                a=ξ;
            }
            ξ=(a+b)/2;
            res(i+1, a, b, ξ, ε1, ε2); //Печать результа расчетов
            i++;
        }
        α = fabs(ξ-b)/fabs(ξ-a);
        printf("\nПараметр сходимости: α=%.1f\n", α);
        printf("Корень уравнения ξ=%.7f найден после %d итераций\n", ξ, i);
        printf("Значение функции f(ξ)=%.10f найдено после %d вычислений\n", f(ξ), i);
    }
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2021, 18:31
Ответы с готовыми решениями:

В чём суть метода дихотомии и метода золотого сечения?
Исследовать функцию на экстремумы методом дихотомии и методом золотого сечения: F(x)=sin(x+1.4)-2.1*x*cos(2*x^2+0.5). Очень надо. Спасибо. ...

Программа метода дихотомии
Мне надо решить уравнение методом дихотомии x^4+3*x^3+4*x^2+5*x+1=0 Дан пример программы, надо сделать по нему. Но я что то понять не...

Пользовательская функция метода дихотомии
Здравствуйте! У меня возникла проблема с написанием пользовательской функции для метода дихотомии (деления отрезка пополам). Помогите,...

5
0 / 0 / 0
Регистрация: 17.03.2021
Сообщений: 26
20.04.2021, 00:34  [ТС]
Возможно следует решать так:

|Xn - Xn-1| = fabs(b - a)
|Xn+1 - Xn| = fabs(ξ - a) = fabs(b - ξ)

В этом случае Параметр сходимости α=|xn+1 - xn| / |xn - xn-1| будет 0.5. Что скажете?
0
0 / 0 / 0
Регистрация: 15.09.2021
Сообщений: 1
27.01.2022, 21:59
Смогли разобраться? Облазил весь интернет - не могу найти как сделать параметр сходимости...
0
3 / 3 / 0
Регистрация: 23.08.2021
Сообщений: 71
23.08.2022, 15:51
Цитата Сообщение от RLSP Посмотреть сообщение
Разве xn+1 не есть ξ, т.е. корень,
если я правильно понял свою методичку, то корень равен

и

соответственно параметр сходимости
должен быть
Название: сходимсоть 3.jpg
Просмотров: 118

Размер: 4.0 Кб
Разве не так?
0
3 / 3 / 0
Регистрация: 23.08.2021
Сообщений: 71
23.08.2022, 16:08
не, это туфта какая-то получается
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
23.08.2022, 16:12
То есть, МПД сходится со скоростью геометрической прогрессии со знаменателем ½ (для добавления одного верного десятичного знака – 3 шага).
https://studfile.net/preview/2943325/page:5/
МПД это ж вроде и есть метод дихотомии?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.08.2022, 16:12
Помогаю со студенческими работами здесь

Ошибки в коде с функцией Метода Дихотомии
День добрый. Имеется функция Метода Дихотомии, но работает не очень корректно. Выдает неправильные данные по функциям, которые задаются в...

Написать программу для метода дихотомии
Здравствуйте! Помогите пожалуйста написать программу в Матлабе методом дихотомии x^2+cos(x+y)- y =0

С помощью метода дихотомии найти максимум для функции
С помощью метода дихотомии найти точку максимума для функции F(x)=4sin(3x-1)-(x в степени корень квадратный из 2)+1 на интервале . ...

Условия сходимости метода итераций
нелинейное уравнение в MS Exel. Метод итераций. Условия сходимости метода итераций ctg1.06x-x2=0

Обоснование сходимости метода простых итераций
День добрый.Имеется итерационный процесс(метод простых итераций): {x}_{n+1}=\varphi({x}_{n}) Сжимающее отображение имеет вид: \phi...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru