Программа решения уравнения методом дихотомии
Составить программу на языке программирования С++ и блок-схему для решения следующей задачи: уточнить приближенное значение корня нелинейного уравнения f(x) = 0 на заданном отрезке [a,b] методом половинного деления (дихотомии) с точностью ε = 0.001.
Уравнение имеет вид: x 3 — 9x 2 + 20x – 11=0
Отрезок, на котором осуществляется поиск корня: [0; 1]
Блок-схема алгоритма поиска корня уравнения методом половинного деления (дихотомии)
Разработаем алгоритм программы поика решения уравнения на заданном отрезке в виде блок-схемы:
Текст программы решения задачи на С++
В среде программирования Borland C++ 7.0 вводим текст программы на Си ++:
#include
#include
// функция для вычисления f(х)
float f(float z)
<
return pow(z,3)+6*pow(z,2)+6*z-7;//возвращаемое значение
>
// главная функция
void main()
<
float a=-3.0, b=2.0, e=0.001, x;// объявление переменных
while (fabs(a-b)>=e) // цикл
<
// проверка на разные знаки по концам отрезка
if((f(a)>0&&f((a+b)/2) 0))
b=(a+b)/2;
else
if ((f((a+b)/2)>0&&f(b) 0))
a=(a+b)/2;
else
<
printf(«! Net kornej !»);
return;
getch();
>
>
x=(a+b)/2;// вычисление х после завершения цикла
printf(«x=%f F(x)=%f |a-b|=%f»,x,f(x),fabs(a-b)); // вывод результатов
getch();
>
Нажимаем клавиши CTRL+F9 для компиляции и запуска на выполнение программы. Получаем корень уравнения x≈0,834 :
Программа начинается с директив препроцессора, начинающихся с символа #, которые дают указание препроцессору подключить к программе заголовочные файлы с описанием тех или иных библиотечных функций. В данном случае подключается заголовочный файл stdio.h с описанием функций ввода-вывода, заголовочный файл math.h с описанием математических функций и заголовочный файл conio.h с описанием функции ожидания нажатия клавиши getch().
Программа состоит из двух функций: пользовательской функции f(x) и обязательной функции main(). Функция main() не возвращает никаких значений и поэтому она объявляется с ключевым словом void. В отличие от функции main(), функция f(x) возвращает вещественное значение и объявляется с ключевым словом float. Тела функций являются блоками и поэтому ограничены фигурными скобками.
В теле функции main() объявляются вещественные переменные a, b, e, х.
Далее используется оператор цикла while, в котором применяются условные операторы:
if (выражение) оператор 1; else оператор 2; которые позволяют проверить разные ли знаки у концов отрезка.
Использование вышеуказанной библиотечной функции printf() дает возможность вывести на стандартное устройство вывода (монитор) сообщение об отсутствии корней или сообщение с значением корня, значением функции в этой точке и модуль разности концов отрезка.
Тело функции main() зак¬рывается фигурной скобкой. На этом программа заканчивается.
Метод половинного деления (метод дихотомии или метод бисекции)
Теорема 2. Итерационный процесс половинного деления сходится к искомому корню ξ с любой наперед заданной точностью ε.
Доказательство: Рассмотрим последовательность чисел ξi являющихся приближением корня на i -ом шаге.
ξi=½(bi+ai), i=0,1.
где a0=a; b0=b; ai;bi — границы подынтервалов, в которых f(ai)f(bi) 0 мы ни задали, всегда можно найти такое n , что ч.т.д.
Графически метод дихотомии выглядит следующим образом
|f(c)|≤δ f(a)f(c) 10 = 1024 ≈ 10 3 раз. За 20 итераций (n=2) уменьшается в 2 20 ≈ 10 6 раз.
Пример №1 . Найти экстремум функции: y=5x 2 -4x+1 методом дихотомии, если ε=0.1, а исходный интервал [0,10].
- Решение
- Видео решение
Пример №3 . Методом бисекции найти решение нелинейного уравнения на отрезке [a,b] с точностью ε = 10 -2 . Выбрав полученное решение в качестве начального приближения, найти решение уравнения методом простой итерации с точностью ε = 10 -4 . Для метода простой итерации обосновать сходимость и оценить достаточное для достижения заданной точности число итераций.
sqrt(t)+x 2 = 10, a = 2.6, b = 3
Найдем корни уравнения:
Используем для этого Метод половинного деления (метод дихотомии)..
Считаем, что отделение корней произведено и на интервале [a,b] расположен один корень, который необходимо уточнить с погрешностью ε.
Итак, имеем f(a)f(b) 1 /2(a+b) и вычисляем f(c). Проверяем следующие условия:
1. Если |f(c)| 1 /2 n (b-a)
В качестве корня ξ. возьмем 1 /2(an+bn). Тогда погрешность определения корня будет равна (bn – an)/2. Если выполняется условие:
(bn – an)/2 1 /2(an+bn).
Решение.
Поскольку F(2.6)*F(3) 0, то a=2.8
Итерация 2.
Находим середину отрезка: c = (2.8 + 3)/2 = 2.9
F(x) = 0.113
F(c) = -0.487
Поскольку F(c)•F(x) 0, то a=2.825
Остальные расчеты сведем в таблицу.
N | c | a | b | f(c) | f(x) |
1 | 2.6 | 3 | 2.8 | -1.6275 | -0.4867 |
2 | 2.8 | 3 | 2.9 | -0.4867 | 0.1129 |
3 | 2.8 | 2.9 | 2.85 | 0.1129 | -0.1893 |
4 | 2.8 | 2.85 | 2.825 | -0.1893 | -0.3386 |
5 | 2.825 | 2.85 | 2.8375 | -0.3386 | -0.2641 |
6 | 2.8375 | 2.85 | 2.8438 | -0.2641 | -0.2267 |
Ответ: x = 2.8438; F(x) = -0.2267
Решение было получено и оформлено с помощью сервиса Метод Ньютона онлайн
Пример №2 . Локализовать корень нелинейного уравнения f(x) = 0 и найти его методом бисекции с точностью ε1 = 0,01. Выбрав полученное решение в качестве начального приближения, найти решение уравнения методом простой итерации с точностью ε2 = 0,0001. Для метода простой итерации обосновать сходимость и оценить достаточное для достижения заданной точности ε2 число итераций.
Метод дихотомии решения нелинейных уравнений
На практике очень часто приходится решать задачи, связанные с решением нелинейных уравнений. Дихотомия или метод деления пополам — наиболее простой и надежный метод вычисления корней уравнения f (х) = 0, основанный на пошаговом сужении промежутка, в котором находится единственный корень уравнения, пока не добиться заданной точности.
Возьмем две точки х0 и х1, в которых значения функции f (х0) и f (х1) имеют разные знаки. В этом случае между ними имеется хоть один корень функции f.
Разделим промежуток между точками х0 и х1 пополам, обозначим середину отрезка точкой х2, которая равняется: х2 = (х0 + х1) / 2. Тогда f (х2) f (х0)
Метод дихотомии решения нелинейных уравнений f (x)=0
a = | b = |
Введите левую часть уравнения (неизвестная — x):
http://math.semestr.ru/optim/dichotomy.php
http://infofaq.ru/metod-dihotomii-resheniya-nelinejnyh-uravnenij.html