Цели работы:
а) освоение методов решения нелинейных уравнений;
б) совершенствование навыков по алгоритмизации и программированию вычислительных задач.
Постановка задачи:
Для варианта 5:
Уравнение: =0
Метод численного решения, точность: Дихотомии, ε = 4·10-5
Параметры: a = 1.23; b = - 3.14
Математическая часть
Вычисление каждого из действительных корней складывается из двух этапов:
1) отделение корня, т.е. нахождение возможно малого интервала a,b, в пределах которого находится один и только один корень x уравнения;
2) уточнение значения корня, т.е. вычисление с заданной степенью точности.
При использовании рассматриваемых ниже методов решения уравнения к функции (x) на интервале a,b предъявляются следующие требования:
a) функция (x) непрерывна и дважды дифференцируема (т.е. существует первая и вторая производные);
b) первая производная '(x) непрерывна, сохраняет знак и не обращается в нуль;
c) вторая производная "(x) непрерывна и сохраняет знак.
Пусть в уравнении (x)=0 функция (x) является непрерывной (первое требование ”a”) на интервале a,b, в котором расположен один искомый корень x. Для нахождения этого корня разделим отрезок a,b пополам точкой
Если теперь (1) =0, то 1 и является корнем уравнения. В противном случае выбираем тот из отрезков a, 1 или 1,b, на концах которого функция (x) имеет разные знаки. В пределах этого отрезка согласно предыдущим рассуждениям лежит искомый корень. Таким образом, оказывается определенным интервал a1,b1, (где a1=a, b1=1 или a1=1, b1= b), меньший первоначального a,b и содержащий x. Повторяя подобные построения, получаем последовательность уменьшающихся интервалов an,bn таких, что
(2.3)
и в каждом из которых заключен корень x. Точность вычисления корня x определяется размерами интервала an,bn после n-го деления исходного интервала a,b, так как ошибка определения корня x не превышает величины bn- an .
Следовательно, если ε есть заданная точность вычисления, то должно выполняться условие
(2.4)
Отсюда можно определить и необходимое число шагов половинного деления интервала a,b, если задано ε:
Аналитические расчеты
На рисунке 1 представлен график функции.
Рисунок 1 – График функции
Найдем решение с помощью онлайн калькулятора для промежутка(-1;0)
Найдем максимум функции: f(x) = (1.23-x2)1/2-3.14•x2 Для этого целевую функцию представим в виде: F(max)=-F(min) Используем для этого Метод половинного деления (метод дихотомии).. Решение. Шаг приращения δ=0.001 Положим a1 = a, b1 = b. x1=(-1+0-0.001)/2 = -0.5005 x2=(-1+0+0.001)/2 = -0.4995 Вычислим f(x1) = -0.20312601200401, f(x2) = -0.20677108835715 Итерация №1. Поскольку f(x11) > f(x12), то a2 = -0.4995, b2 = b1. x11=(-0.4995+0-0.001)/2 = -0.25025 x12=(-0.4995+0+0.001)/2 = -0.24925 f(x21) = -0.8838, f(x22) = -0.8856 Итерация №2. Поскольку f(x21) > f(x22), то a3 = -0.2493, b3 = b2. x21=(-0.24925+0-0.001)/2 = -0.125125 x22=(-0.24925+0+0.001)/2 = -0.124125 f(x31) = -1.0528, f(x32) = -1.0537 Итерация №3. Поскольку f(x31) > f(x32), то a4 = -0.1241, b4 = b3. x31=(-0.124125+0-0.001)/2 = -0.0625625 x32=(-0.124125+0+0.001)/2 = -0.0615625 f(x41) = -1.095, f(x42) = -1.0954 Итерация №4. Поскольку f(x41) > f(x42), то a5 = -0.06156, b5 = b4. x41=(-0.0615625+0-0.001)/2 = -0.03128125 x42=(-0.0615625+0+0.001)/2 = -0.03028125 f(x51) = -1.1055, f(x52) = -1.1058 Остальные расчеты сведем в таблицу.
N |
an |
bn |
bn-an |
xn1 |
xn2 |
F(xn1) |
F(xn2) |
εn |
1 |
-1 |
0 |
-0.5 |
-0.5005 |
-0.4995 |
-0.2031 |
-0.2068 |
0.2503 |
2 |
-0.4995 |
0 |
0.4995 |
-0.2503 |
-0.2493 |
-0.8838 |
-0.8856 |
0.06281 |
3 |
-0.2493 |
0 |
0.2493 |
-0.1251 |
-0.1241 |
-1.0528 |
-1.0537 |
0.01602 |
4 |
-0.1241 |
0 |
0.1241 |
-0.06256 |
-0.06156 |
-1.095 |
-1.0954 |
0.00435 |
5 |
-0.06156 |
0 |
0.06156 |
-0.03128 |
-0.03028 |
-1.1055 |
-1.1058 |
0.00145 |
6 |
-0.03028 |
0 |
0.03028 |
-0.01564 |
-0.01464 |
-1.1082 |
-1.1083 |
0.000729 |
7 |
-0.01464 |
0 |
0.01464 |
-0.00782 |
-0.00682 |
-1.1088 |
-1.1089 |
0.000553 |
8 |
-0.00682 |
0 |
0.00682 |
-0.00391 |
-0.00291 |
-1.109 |
-1.109 |
0.000511 |
9 |
-0.00291 |
0 |
0.00291 |
-0.00196 |
-0.000955 |
-1.109 |
-1.1091 |
0.000502 |
10 |
-0.000955 |
0 |
0.000955 |
-0.000978 |
2.2E-5 |
-1.1091 |
-1.1091 |
0.0005 |
|-1.1090460479371-(-1.1090528317742)|≤0.0004 Находим x как середину интервала [a,b]: x=(0-0.955078125)/2 = -0.55334590625
Ответ: x= -0.55334590625; F(x)=-1.1090528317742
Для интервала (0;1):
Найдем максимум функции: f(x) = (1.23-x2)1/2-3.14•x2 Для этого целевую функцию представим в виде: F(max)=-F(min) Используем для этого Метод половинного деления (метод дихотомии).. Решение. Шаг приращения δ=0.001 Положим a1 = a, b1 = b. x1=(0+1-0.001)/2 = 0.4995 x2=(0+1+0.001)/2 = 0.5005 Вычислим f(x1) = -0.20677108835715, f(x2) = -0.20312601200401 Итерация №1. Поскольку f(x11) ≤ f(x12), то b2 = 0.4995, a2 = a1. x11=(0+0.4995-0.001)/2 = 0.24925 x12=(0+0.4995+0.001)/2 = 0.25025 f(x21) = -0.8856, f(x22) = -0.8838 Итерация №2. Поскольку f(x21) ≤ f(x22), то b3 = 0.2493, a3 = a2. x21=(0+0.24925-0.001)/2 = 0.124125 x22=(0+0.24925+0.001)/2 = 0.125125 f(x31) = -1.0537, f(x32) = -1.0528 Итерация №3. Поскольку f(x31) ≤ f(x32), то b4 = 0.1241, a4 = a3. x31=(0+0.124125-0.001)/2 = 0.0615625 x32=(0+0.124125+0.001)/2 = 0.0625625 f(x41) = -1.0954, f(x42) = -1.095 Итерация №4. Поскольку f(x41) ≤ f(x42), то b5 = 0.06156, a5 = a4. x41=(0+0.0615625-0.001)/2 = 0.03028125 x42=(0+0.0615625+0.001)/2 = 0.03128125 f(x51) = -1.1058, f(x52) = -1.1055 Остальные расчеты сведем в таблицу.
N |
an |
bn |
bn-an |
xn1 |
xn2 |
F(xn1) |
F(xn2) |
εn |
1 |
0 |
1 |
0.5 |
0.4995 |
0.5005 |
-0.2068 |
-0.2031 |
0.2503 |
2 |
0 |
0.4995 |
0.4995 |
0.2493 |
0.2503 |
-0.8856 |
-0.8838 |
0.06281 |
3 |
0 |
0.2493 |
0.2493 |
0.1241 |
0.1251 |
-1.0537 |
-1.0528 |
0.01602 |
4 |
0 |
0.1241 |
0.1241 |
0.06156 |
0.06256 |
-1.0954 |
-1.095 |
0.00435 |
5 |
0 |
0.06156 |
0.06156 |
0.03028 |
0.03128 |
-1.1058 |
-1.1055 |
0.00145 |
6 |
0 |
0.03028 |
0.03028 |
0.01464 |
0.01564 |
-1.1083 |
-1.1082 |
0.000729 |
7 |
0 |
0.01464 |
0.01464 |
0.00682 |
0.00782 |
-1.1089 |
-1.1088 |
0.000553 |
8 |
0 |
0.00682 |
0.00682 |
0.00291 |
0.00391 |
-1.109 |
-1.109 |
0.000511 |
9 |
0 |
0.00291 |
0.00291 |
0.000955 |
0.00196 |
-1.1091 |
-1.109 |
0.000502 |
10 |
0 |
0.000955 |
0.000955 |
-2.2E-5 |
0.000978 |
-1.1091 |
-1.1091 |
0.0005 |
|-1.1090460479371-(-1.1090528317742)|≤0.0004 Находим x как середину интервала [a,b]: x=(0.955078125+0)/2 = 0.55334590625 Ответ: x= 0.55334590625; F(x)=-1.1090528317742
Схема алгоритма решения задачи
На рисунках 2, 3 изображена блок схема алгоритма решения задачи
Рисунок 2 - блок-схема функции
Рисунок 3 - блок-схема main
Текст программы на языке C/C++
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
double func(double x) // функция
{
return (sqrt(1.23-x*x) - 3.14 * x * x);
}
int main()
{
setlocale(LC_ALL, "ru");
double a, b, e, x;
int c = 1;
cout << "f(x)=((1.23-x^2)^1/2 - 3.14 * x^2)\n";
cout << "Левая граница a=";
cin >> a;
cout << "Правая граница b=";
cin >> b;
cout << "Точность e=";
cin >> e;
x = (a + b) / 2;
cout << "Шаг 1" << endl << "E: " << x << endl << "a= " << a << endl << "b= " << b << endl << "Точность: " << fabs(b - a) << endl;
while (fabs(b - a) > e)
{
if (func(a) * func(x) <= 0) b = x;
else a = x;
x = (a + b) / 2;
c++;
cout << "\nШаг № " << c << endl << "E: " << x << endl << "a= " << a << endl << "b= " << b << endl << "Точность: " << fabs(b - a) << endl;
}
cout << "\nКоличество шагов: " << c << "\nКорень уравнения: " << x << endl;
system("pause");
return 0;
}