- •4.Численные методы решения задач
- •Общая методика метода Гаусса. Система представлена в общем виде как:
- •4.2.Решение нелинейных уравнений
- •4.3. Методы построения аппроксимационных полиномов
- •Определить аппроксимационный многочлен
- •4.4.Численное дифференцирование и интегрирование
- •Ошибка вычисления интеграла определяется как
- •4.5.Методы решения дифференциальных уравнений. Метод Рунге-Кутта
- •4.6.Методы решения дифференциальных уравнений с частными производными
4.2.Решение нелинейных уравнений
Во многих инженерных рассчетах используются уравнения, которые не могут быть решены аналитически. В одномерном случае это уравнение вида :
(4.2.1)
где
x-
неизвестная величина;
-
параметры
Для численного решения уравнения (4.2.1) одним из эффективных является метод дихотомии. Сущность этого метода состоит в поэтапном делении отрезка [a,b] попалам, на котором находится решение уравнения (4.2.1).
На
первом этапе табулируют функцию на
отрезке
с точностью до выбранного шага решения
уравнения (4.2.1) при заданных параметрах
. В результате получают таблицу:
|
|
|
|
... |
|
|
|
|
|
... |
|
Из
таблицы выделяют интервалы
на которых функция изменяет свой знак
(F(x)>0
и F(x)<0),
что проиллюстрировано на рисунке
Из
рисунка видно, что на интервалах
,
,
функция меняет свой знак, следовательно
на интервале
она имеет три корня. На втором этапе для
выделенных интервалов осуществляют
поиск корней с заданной точностью .
Метод
дихотомии.
Рассмотрим идеалогию метода дихотомии.
Первоначально делят отрезок [a,b]
на котором функция F(x)
изменяет свой знак попалам, т.е. выбирают
начальное приближение корня равным
.
Если F(
)=0,
то
является корнем уравнения. В противном
случае анализируют тот из отрезков [a,
]
или [
,b]
, на концах которого функция f(x)
имеет разные знаки. Далее полученный
отрезок вновь делят пополам и действия
повторяют до тех пор пока не будет найден
точно корень уравнения либо не будет
достигнута заданная точность (т.е. пока
длина отрезка не станет меньше 2).
В этом случае середина последнего
отрезка дает значение корня с требуемой
точностью.
Иллюстрация метода.
1-й
шаг. Вычисление
и проверка условия F(a)*F(
)=0:
если оно не верно, тогда проверяется
условие F(a)*F(
)<0.
Если оно верно тогда рассматривается
отрезок [a,
]
и проверяется критерий остановки поиска
корня
.
При не удовлетворении условия
выполняется шаг 2.
2-й
шаг. Вычисление
(деление отрезка попалам). Проверка
условия F(a)*F(
)=0.
Если оно не верно, тогда проверяется
условие F(a)*F(
)<0.
Если оно верно, тогда рассматривается
отрезок [a,
]
и проверяется критерий остановки
.
При не удовлетворении условия
выполняется шаг 3.
3-й
шаг. Вычисление
. Проверка условия F(a)*F(
)=0.
Если оно верно, значит
-корень
уравнения.
Подробная блок–схема алгоритма дихотомии представлена в примере данного подраздела.
Метод
Ньютона. Для
использования данного метода F(x)-должна
быть дифференцируема. Задается начальное
значение переменной
,
причем необходимо выбирать из условия
.
Поиск значения x
ведется по формуле
.
При выполнении условия окончания
вычисления заканчиваются, где q-коэффициент
наперед заданный.
Пример 1. Составить схему алгоритма метода Ньютона.
Обозначим в схеме как “условие 1”.
Пример
2. Написать
алгоритм и программу решения нелинейного
уравнения
на отрезке [-10,4] методом деления попалам.
Построить график. Выбрать отрезок для
уточнения корня.
Для вычисления пределов изменения корней протабулируем уравнение F(x)=0 на отрезке [-10,4](выбор интервала произволен).
X |
-10 |
-9 |
-8 |
-7 |
-6 |
-5 |
-4 |
-3 |
-2 |
F(x) |
-5.44 |
4.12 |
9.89 |
6.57 |
-2.79 |
-9.58 |
-7.54 |
1.46 |
9.23 |
X |
-1 |
0 |
1 |
2 |
3 |
4 |
F(x) |
8.78 |
1 |
-5.69 |
-1.7 |
18.67 |
62.16 |
Из таблицы видно, что на отрезках [-10,-9] [-7,-6] [-4,-3] [0,1] [2,3] меняется знак функции, значит на этих отрезках есть корни уравнения. При состовлении программы метода дихотомии найдем решение уравнения на отрезке [0,1].
График функции будет иметь вид :
Обозначим в схеме алгоритма выражения
как
“Условие1” ,
как “Условие 2” ,
как
“Условие3”
program noline_eqution; {решение нелинейного уравнения}
uses crt;
var
xn,xk,epsilon,x : real;
flag_stop: boolean;
function fun(x:real):real;
begin
fun:=exp(x)-10*sin(x);
end;
begin {н.п.}
clrscr;
xn:=0;
xk:=1;
epsilon:=0.005;
flag_stop:=false;
if fun(xn)*fun(xk)>0 then writeln('Решения нет на данном отрезке')
else begin
while (abs(xk-xn)>2*epsilon) and (not(flag_stop)) do begin
x:=(xn+xk)/2;
if fun(x)=0 then flag_stop:=true
else if fun(xn)*fun(x)<0 then xk:=x else xn:=x;
writeln('x=',x:5:4,’ xn=’,x0:3:2,’ xk=’,xn:3:2);
end;
end;
readln;
end. {к.п.}
Результаты задачи 2 :
x=0.5000 xn=0.00 xk=0.50
x=0.2500 xn=0.00 xk=0.25
x=0.1250 xn=0.00 xk=0.13
x=0.0625 xn=0.06 xk=0.13
x=0.0938 xn=0.09 xk=0.13
x=0.1094 xn=0.11 xk=0.13
x=0.1172 xn=0.11 xk=0.12
