- •Математические модели и численные методы
- •Структура погрешности при решении задачи на эвм
- •Решение уравнений с одной переменной Постановка задачи
- •Отделение корней
- •I. Графический способ отделения корней
- •II. Отделения корней программным способом.
- •Уточнение корней
- •Метод половинного деления
- •Метод хорд
- •Метод касательных
- •Метод простой итерации
- •Оценка погрешности метода итераций
- •Преобразование к итерационному виду
- •Решение системы линейных алгебраических Постановка задачи
- •Метод Гаусса
- •Метод простой итерации
- •Решение слу методом Зейделя
- •Интерполирование функций Постановка задачи
- •Интерполяционный многочлен Лагранжа
- •Интерполяционный многочлен Ньютона для равноотстоящих узлов
- •Первая интерполяционная формула Ньютона
- •Вторая интерполяционная формула Ньютона
- •Численное дифференцирование
- •Вычисление производной по определению
- •Вычисление производной на основе интерполяционного многочлена Лагранжа
Метод хорд
Пусть 1) функция y=F(x) определена и непрерывна на отрезке [a,b].
2) F(a)F(b)<0
Требуется найти корень на отрезке с точностью ε.
В качестве приближений к корню принимаются значения c0, c1, c2… точек пересечения хорды с осью абсцисс или
Точка c делит отрезок [a,b] на две части. Ту из них, на которой функция знака не меняет, отбрасываем (аналогично методу половинного деления).
В качестве условия окончания счета можно принять условия:
(Минаева)
(Турчак).
Корень уравнения: ci.
Программа уточнения корней методом хорд:
program met_hord;
var a,b,c,e,x,g: real;
N:integer;
function f(x: real):real;
begin
{записать, функцию в виде f:=[математическое выражение]}
f:=x*x*x-x+4;
end;
begin
write('Введите левую границу отрезка - a:'); readln(a);
write('Введите правую границу отрезка - b:'); readln(b);
write('Введите требуемую погрешность - e:'); readln(e);
N:=0; c:=a;
repeat N:=N+1; g:=c;
c:=(a*f(b)-b*f(a))/(f(b)-f(a));
if f(a)*f(c)<0 then b:=c else a:=c;
until abs(g-c)<e;
writeln('Приближенное значение корня - Х = ',c);
writeln('Число итераций - N = ',N);
readln
end.
Блок-схема метода хорд: |
Результаты выполнения программы: |
|
Введите левую границу отрезка - a: -2 Введите правую границу отрезка - b: -1 Введите требуемую погрешность - e:.0001 Приближенное значение корня - Х = -1.7963190156E+00 Число итераций - N = 6
|
Метод касательных
Пусть функция y=F(x) определена, непрерывна, монотонна и дифференцируема в некоторой окрестности корня.
Требуется найти корень на отрезке с точностью ε.
На kой итерации проводится касательная к графику функции y=F(x) при x=ck и ищется точка пересечения касательной с осью абсцисс. При этом достаточно задать начальное приближение c0, а не указывать отрезок [a,b].
Уравнение касательной к графику функции y=F(x) в точке x0 имеет вид: . Пересечение с осью Ox находится из условия y=0, откуда
Таким образом, получим формулу для нахождения последовательности c1, c2… точек пересечения касательных с осью абсцисс:
Условие окончания счета:
К орень уравнения: ci+1.
Программа уточнения корней методом касательных:
program met_kasat;
var c,e,g: real;
N:integer;
function f(x: real):real;
begin
{записать, функцию в виде f:=[математическое выражение]}
f:=x*x*x-x+4;
end;
function df(x: real):real;
begin {записать, производную функции f в виде df:=[математическое выражение]}
df:=3*x*x-1;
end;
begin
write('Введите начальное приближение - c: ');readln(c);
write('Введите требуемую погрешность - e:'); readln(e);
N:=0;
repeat N:=N+1;
g:=c;
c:=c-f(c)/df(c);
until abs(g-c)<e;
writeln('Приближенное значение корня - Х = ',c);
writeln('Число итераций - N = ',N);
readln
end.
Блок-схема метода касательных: |
Результаты выполнения программы: |
начало
Ввод
c,ε
n:=0
|g-c|<ε
Вывод
c, n
конец
+
n:=n+1 g:=c
|
Введите начальное приближение - c: -2 Введите требуемую погрешность - e:.0001 Приближенное значение корня - Х = -1.7963219033E+00 Число итераций - N = 4
|