Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по информатике 2009.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
12 Мб
Скачать
☆

4.2.3. Метод Ньютона (метод касательных)

Пусть рассматривается уравнение f(x)=0. Корнем уравнения называется значение , при котором f(x)=0. Корень называется простым, если F'( )≠0 в противном случае корень называется кратным.

При решении нелинейного уравнения методом касательных задаются начальное значение аргумента x0 и точность ε. Затем в точке(x0,F(x0)) проводим касательную к графику F(x) и определяем точку пересечения касательной с осью абсцисс x1. В точке (x1,F(x1)) снова строим касательную, находим следующее приближение искомого решения x2 и т.д. Указанную процедуру повторяем пока |F(xi)| > ε. Расчетная формула метода Ньютона имеет вид:

Геометрически метод Ньютона означает, что следующее приближение к корню x(n+1) есть точка пересечения с осью ОХ касательной, проведенной к графику функции y=f(x) в точке (x(n),f(x(n)).

4.2.4. Примеры составления программ

Пример 4.2.1. Программа решения уравнений методом деления отрезка пополам.

Задание: решить уравнение ex - 10x = 0.

PROGRAM del;

USES Crt;

LABEL 1,2;

VAR a, b, x0, eps, r1, r2: Real;

{ a, b - Начало и конец интервала }

{ x0 - Корень уравнения }

{ eps - Точность расчета }

k: Integer;

fin, fout: Text;

FUNCTION f(x:real): Real; { Исследуемая функция }

BEGIN

f:=exp(x)-(10*x);

END;

BEGIN

ClrScr; { Очистка текстового экрана }

assign(fin,'otrezok.in'); { Файл данных }

assign(fout,'otrezok.out'); { Файл вывода }

reset(fin);

read(fin,a,b,eps);

close(fin);

(* Р А С Ч Е Т *)

k:=0; 1:k:=k+1;

x0:=(a+b)/2;

IF f(x0)=0 THEN GOTO 2;

IF abs(b-a)<eps THEN GOTO 2;

r1:=f(x0);

r2:=f(a);

IF (r1*r2)<0 THEN b:=x0

ELSE a:=x0;

GOTO 1;

2: writeln('Число делений пополам: ',k);

writeln('Корень уравнения: ',x0:7:4);

writeln('Точность расчета: ',eps:7:6);

(* Запись в файл *)

rewrite(fout);

writeln(fout,'Число делений пополам: ',k);

writeln(fout,'Корень уравнения: ',x0:7:4);

writeln(fout,'Точность расчета: ',eps:7:6);

close(fout);

readln;

END.

ФАЙЛ исходных данных:

0.0 1.0 1.0E-08 a, b - Начало и конец интервала eps - Точность расчета

ФАЙЛ с результатами

Число делений пополам: 28

Корень уравнения: 0.1118

Точность расчета: 0.000000001

Пример 4.2.2. Программа решения уравнения с использованием метода Ньютона.

Уравнение x3- 2x2 + 1.3x = 0.

PROGRAM newton;

LABEL m1, m2;

VAR x, x0, eps:real;

a1, a2:text;

k:integer;

FUNCTION f(x0:real):real;

BEGIN

f:=x*x*x-2*x*x+1.3*x-0.2;

END;

FUNCTION f1(x0:real):real;

BEGIN

f1:=3*x*x-4*x+1.3;

END;

BEGIN

assign (a1,'dat17-2');

reset(a1);

read(a1,x0,eps);

k:=0;

m2: x:=x0;

x0:=x-f(x)/f1(x);

k:=k+1;

IF abs(x-x0) <= eps THEN GOTO m1

ELSE GOTO m2;

m1: assign(a2,'res-17-2');

rewrite(a2);

writeln(a2,'корень уравнения',x,k);

close (a2);

END.

Пример 4.2.3. Программа решения уравнения методом итераций.

PROGRAM met;

LABEL m1, m2;

VAR x, x0, eps:real;

a1, a2:text;

k:integer;

FUNCTION f(x0:real):real;

BEGIN

f:=(-x0*x0*x0+2*x0*x0+0.24)/1.3;

END;

FUNCTION f1(x0:real):real;

BEGIN

f1:=-3*x0*x0+4*x0+1.3;

END;

BEGIN

assign (a1,'dat-21'); reset(a1);

read(a1,x0,eps);

k:=0;

REPEAT

x:=x0;

writeln (x0);

x0:=f(x); k:=k+1;

UNTIL abs(x-x0) < eps ;

m1: assign(a2,'res-21'); rewrite(a2);

writeln(a2,'корень уравнения',x,k);

close (a2);

END.