Решение нелинейного уравнения методом касательных
Пензенский приборостроительный колледж
на тему:
Метод касательных решения
нелинейных уравнений
Выполнил:
Ст-т 22п группы ЛЯПИН Р.Н.
Проверила: ______________
Ковылкино – 1999
г.
ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ
студент Ляпин Р.Н. группа
22п
1.
Тема: "Метод
касательных решения нелинейных уравнений".
2.
Изучить
теоретический материал по заданной теме.
3.
Составить блок
схему алгоритма решения задачи .
4.
Написать
программу на языке Турбо-Паскаль для решения задачи в общем виде.
5.
Выполнить
программу с конкретными значениями исходных данных.
6.
Определить корни уравнения х3
+ 0,1 * х2 + 0,4 * х – 1,2 = 0 аналитически и уточнить один из них с
точностью до 0,000001 методом касательных
7.
Срок
представления работы к защите: 10 мая 1999 г.
8.
Исходные данные
для исследования: научная и техническая литература.
Руководитель курсовой работы: Кривозубова С.А.
Задание принял к исполнению: Ляпин Р.Н.
РЕФЕРАТ
Курсовая работа содержит: страниц, 1 график, 5
источников.
Перечень ключевых понятий: производная, метод
касательных, программирование, нелинейное уравнение.
Объект исследования: Корни нелинейного
уравнения.
Цель работы: Определение корней
нелинейного уравнения.
Методы исследования: изучение работ
отечественных и зарубежных авторов по данной теме.
Полученные результаты: изучен метод касательных
решения нелинейных уравнений; рассмотрена возможность составления программы на
языке программирования Турбо-Паскаль 7.0
Область применения: в работе инженера.
СОДЕРЖАНИЕ
стр.
ВВЕДЕНИЕ........................................ 5
1. Краткое описание сущности метода касательных
( метода секущих Ньютона).................... 7
2. Решение нелинейного уравнения аналитически .. 9
3. Блок схема программы ........................ 11
4. Программа на языке PASCAL 7.0 ............... 12
5. Результаты выполнения программы ............. 13
СПИСОК ИСПОЛЬЗОВАННИХ ИСТОЧНИКОВ ............... 14
ВВЕДЕНИЕ
Процедура подготовки и решения задачи на ЭВМ
достаточно сложный и трудоемкий процесс, состоящий из следующих этапов:
1.
Постановка задачи
(задача, которую предстоит решать на ЭВМ, формулируется пользователем или
получается им в виде задания).
2.
Математическая
формулировка задачи.
3.
Разработка
алгоритма решения задачи.
4.
Написание программы
на языке программирования.
5.
Подготовка
исходных данных .
6.
Ввод программы и
исходных данных в ЭВМ.
7.
Отладка
программы.
8.
Тестирование
программы.
9.
Решение задачи на
ЭВМ и обработка результатов.
В настоящей курсовой работе условие задачи дано в
математической формулировке, поэтому необходимость в выполнении этапов 1 и 2
отпадает и сразу можно приступить к разработке алгоритма решения задачи на ЭВМ.
Под алгоритмом понимается последовательность арифметических и логических
действий над числовыми значениями переменных, приводящих к вычислению
результата решения задачи при изменении исходных данных в достаточно широких
пределах. Таким образом, при разработке алгоритма решения задачи математическая
формулировка преобразуется в процедуру решения, представляющую собой
последовательность арифметических действий и логических связей между ними. При
этом алгоритм обладает следующими свойствами: детерминированностью, означающей,
что применение алгоритма к одним и тем же исходным данным должно приводить к
одному и том уже результату; массовость, позволяющей получать результат при
различных исходных данных; результативностью, обеспечивающей получение
результата через конечное число шагов.
Наиболее наглядным способом описания алгоритмов является описание его в
виде схем. При этом алгоритм представляется последовательность блоков, выполняющих
определенные функции, и связей между ними. Внутри блоков указывается
информация, характеризующая выполняемые ими функции. Блоки схемы имеют сквозную
нумерацию.
Конфигурация и размеры блоков, а также порядок построения схем определяются
ГОСТ 19.002-80 и ГОСТ 19.003-80.
На этапе 4 составляется программа на языке Турбо-Паскаль. При описании
программы необходимо использовать характерные приемы программирования и
учитывать специфику языка. В качестве языка программирования выбран язык
ПАСКАЛЬ ввиду его наглядности и облегченного понимания для начинающих программистов,
а также возможности в дальнейшем использовать для решения более трудных задач.
Этапы алгоритмизации и программирования являются наиболее трудоемкими, поэтому
им уделяется большое внимание.
В процессе выполнения курсовой работы студент готовит исходные данные,
вводит программу и исходные данные. При работе ввод программы и исходных данных
осуществляется с клавиатуры дисплея.
Отладка программы состоит в обнаружении и исправлении ошибок, допущенных
на всех этапах подготовки задач к решению на ПЭВМ. Синтаксис ошибки обнаруживается
компилятором, который выдает сообщение, указывающее место и тип ошибки. Обнаружение
семантических ошибок осуществляется на этапе тестирования программы, в котором
проверяется правильность выполнения программы на упрощенном варианте исходных
данных или с помощью контрольных точек или в режиме пошагового исполнения.
Задание при обработке на ЭВМ проходит ряд шагов: компиляцию, редактирование
(компоновку) и выполнение.
Обработка результатов решения задачи осуществляется с помощью ЭВМ. Выводимые
результаты оформлены в виде, удобном для восприятия.
1. Краткое описание сущности метода касательных
( метода секущих Ньютона)
Пусть на отрезке [a; b] отделен
корень с уравнения f (x) = 0 и f -функция непрерывна на отрезке [a; b], а на интервале ]a; b[
существуют отличные от нуля производные f ’ и f ”.
Так
как f ’(x) ¹ 0 , то
запишем уравнение f (x) = 0 в виде
:
x
= x – ( f (x) / f ’(x)) (1)
Решая
его методом итераций можем записать :
xn+1
= x n– ( f (x n)
/ f ’(x n)) (2)
Если на отрезке [a;b] f ’(x) * f
“(x) > 0, то нул – евое приближение выбираем x0=a. Рассмотрим геометрический
смысл метода . Рассмотрим график функции y=f(x). Пусть для определенности f
‘(x) > 0 и f “(x) > 0 (рис. 1). Проведем касательную к графику функции в
точке B (b, f (b)). Ее уравнение будет иметь вид :
y = f (b) + f ’(b) *
(x – b)
Полагая в
уравнении y = 0 и учитывая что f ’(x) ¹ 0, решаем его относительно x. Получим :
x = b – (f (b) /f ‘(b))
Нашли абсциссу x1 точки c1 пересечения касательной с осью ox :
x1 = b – (f (b) – f ’
(b))
Проведем касательную к графику функции в точке b1 (x1; f (x1)).Найдем абсциссу x2
точки с2 пересечения касательной с осью Ox :
x2 = x1 – (f (x1) / ( f ’(x1))
xk+1 = x k –
( f (x
k) / f ’(x
k)) (3)
Таким образом, формула (3) дает последовательные приближения (xk)
корня, получаемые из уравнения касательной , проведенной к графику функции в
точке b k (x k; f (x k0) метод уточнения корня c [a;b]
уравнения f (x) = 0 с помощью формулы (3) называется методом касательной или
методом Ньютона.
Геометрический смысл метода касательных состоит в замене дуги y = f (x) касательной,
одной к одной из крайних точек . Начальное приближение x 0 = a или x0 = b брать таким, чтобы вся
последовательность приближения х k принадлежала интервалу ]a;b[ . В
случае существования производных f ’, f ”, сохраняющих свои знаки в интервале, за х0 берется тот конец отрезка [a;b], для которого
выполняется условие f ’(х0)
* f (х0) > 0. Для оценки приближения
используется общая формула :
|c-x k-1 | £ | f (x k+1)/m| , где m = min f ’(x)
на отрезке [a;b] .
На практике проще пользоваться другим правилом :
Если на отрезке [a;b] выполняется условие 0 < m < | f (x)| и e - заданная точность
решения, то неравенство |
x k+1-x k|
£ e влечет выполнение неравенства |c-x k-1| £ e .
В этом случае процесс последовательного приближения продолжают до тех
пор, пока не выполнится неравенство :
|c-x k-1| £ e .
2. Решение нелинейного уравнения аналитически
Определим корни уравнения х3 + 0,1х2
+ 0,4х – 1,2 = 0 аналитически. Находим : f (x)
= х3 + 0,1х2
+ 0,4х – 1,2
f ‘ (x) = 3х2 + 0,1х + 0,4
f (–1)
= –2,5 < 0 f (0) = –1,2
< 0 f (+1) = 0,3 > 0
x
|
- ¥
|
-1
|
0
|
+1
|
+ ¥
|
sign f (x)
|
-
|
-
|
-
|
+
|
+
|
Следовательно, уравнение имеет действительный корень, лежащий в промежутке
[ 0; +1 ].
Приведем уравнение к виду x = j (x) , так , чтобы | j ‘ (x) | <1 при 0 £ x £ +1.
Так как max | f ’(x) | = f ’(+1) = 3 +
0,1 + 0,4 = 3,5 то можно взять R = 2.
Тогда j (x) = x – ( f
(x) / R) = x – 0,5 х3
– 0,05 х2 – 0,2 х + 0,6 = – 0,5 х3 – 0,05 х2 + 0,8 х + 0,6.
Пусть х0 = 0 ,
тогда х n+1 = j (х n).
Вычисления расположим в таблице.
n
|
хn
|
х2n
|
х3n
|
j (хn).
|
f (x)
|
1
|
1
|
1
|
1
|
0,85
|
-0,17363
|
2
|
0,85
|
0,7225
|
0,614125
|
0,9368125
|
0,08465
|
3
|
0,9368125
|
0,87761766
|
0,822163194
|
0,89448752
|
-0,04651
|
4
|
0,89448752
|
0,800107923
|
0,715686552
|
0,917741344
|
0,024288
|
5
|
0,917741344
|
0,842249174
|
0,772966889
|
0,905597172
|
-0,01306
|
6
|
0,905597172
|
0,820106238
|
0,74268589
|
0,912129481
|
0,006923
|
7
|
0,912129481
|
0,83198019
|
0,758873659
|
0,908667746
|
-0,0037
|
8
|
0,908667746
|
0,825677072
|
0,750266124
|
0,910517281
|
9
|
0,910517281
|
0,829041719
|
0,754856812
|
0,909533333
|
-0,00105
|
10
|
0,909533333
|
0,827250884
|
0,752412253
|
0,910057995
|
0,000559
|
11
|
0,910057995
|
0,828205555
|
0,753715087
|
0,909778575
|
-0,0003
|
12
|
0,909778575
|
0,827697055
|
0,753021048
|
0,909927483
|
0,000159
|
13
|
0,909927483
|
0,827968025
|
0,753390861
|
0,909848155
|
-8,5E-05
|
14
|
0,909848155
|
0,827823665
|
0,753193834
|
0,909890424
|
4,5E-05
|
15
|
0,909890424
|
0,827900583
|
0,753298812
|
0,909867904
|
-2,4E-05
|
16
|
0,909867904
|
0,827859602
|
0,753242881
|
0,909879902
|
1,28E-05
|
17
|
0,909879902
|
0,827881437
|
0,753272681
|
0,90987351
|
-6,8E-06
|
18
|
0,90987351
|
0,827869803
|
0,753256804
|
0,909876916
|
3,63E-06
|
19
|
0,909876916
|
0,827876002
|
0,753265263
|
0,909875101
|
-1,9E-06
|
20
|
0,909875101
|
0,827872699
|
0,753260756
|
1,03E-06
|
График функции y = х3 + 0,1х2 + 0,4х – 1,2
3. Блок схема
программы
4. Программа на языке PASCAL
7.0
program metod_kasatel;{Название
программы}
uses Crt; {Модуль дисплейных функций}
var {Блок описаний
переменных}
xn,xn1,a,b,c,mx,y0,x0 :real;
function f1(x1:Real):
Real; {Основная функция}
begin
f1 := x1*x1*x1*(-0.5)-0.05*x1*x1+0.8*x1+0.6;
end;
function f2(x4:Real): Real; {Производная от основной функции}
begin
f2 := x4*x4*x4+0.5*x4*x4+0.1*x4*x4+0.4*x4–1.2;
end;
begin {Начало основного тела программы}
Clrscr; {Очистка экрана перед выполнением программы}
a:=0;b:=1;c:=0.00000001;
Writeln(' От A=',a,' до B=',b); {Вывод
на экран}
Writeln(' Погрешность с=',c);
Readln; { Ожидание нажатия клавиши Enter}
xn:=b;
xn1:= f1(xn);
y0:=f2(b);
while ABS(y0)>c do {Проверка по точности вычисления корня}
begin {Тело цикла}
xn:=xn1;
xn1:=f1(xn);
y0:= f2(xn1);
{Печать промежуточного результата}
Writeln('xn=',xn,' xn+1=',xn1,'
f(xn+1)=',y0);
Readln; { Ожидание нажатия
клавиши Enter}
end; {Конец тела цикла}
Writeln('Конечные значения'); {Печать полученного
результата}
Writeln('
xn+1=',xn1,' f(xn+1)=',y0);
Readln; { Ожидание нажатия
клавиши Enter}
end. {Конец основного тела
программы}
5. Результаты выполнения программы
От A= 0.0000000000E+00 до
B= 1.0000000000E+00
Погрешность с=
1.0000000000E-08
От A= 0.0000000000E+00 до B= 1.0000000000E+00
Погрешность с= 1.0000000000E-08
xn= 8.5000000000E-01 xn+1= 9.3681250000E-01
f(xn+1)= 8.4649960270E-02
xn= 9.3681250000E-01 xn+1= 8.9448751986E-01
f(xn+1)=-4.6507647892E-02
xn= 8.9448751986E-01 xn+1= 9.1774134381E-01
f(xn+1)= 2.4288343840E-02
xn= 9.1774134381E-01 xn+1= 9.0559717189E-01
f(xn+1)=-1.3064617920E-02
xn= 9.0559717189E-01 xn+1= 9.1212948085E-01
f(xn+1)= 6.9234699658E-03
xn= 9.1212948085E-01 xn+1= 9.0866774587E-01
f(xn+1)=-3.6990702320E-03
xn= 9.0866774587E-01 xn+1= 9.1051728099E-01
f(xn+1)= 1.9678960780E-03
xn= 9.1051728099E-01 xn+1= 9.0953333295E-01
f(xn+1)=-1.0493249720E-03
xn= 9.0953333295E-01 xn+1= 9.1005799543E-01
f(xn+1)= 5.5884091853E-04
xn= 9.1005799543E-01 xn+1= 9.0977857497E-01
f(xn+1)=-2.9781681224E-04
xn= 9.0977857497E-01 xn+1= 9.0992748338E-01
f(xn+1)= 1.5865717614E-04
xn= 9.0992748338E-01 xn+1= 9.0984815480E-01
f(xn+1)=-8.4537703515E-05
xn= 9.0984815480E-01 xn+1= 9.0989042365E-01
f(xn+1)= 4.5040009354E-05
xn= 9.0989042365E-01 xn+1= 9.0986790364E-01
f(xn+1)=-2.3997676180E-05
xn= 9.0986790364E-01 xn+1= 9.0987990248E-01
f(xn+1)= 1.2785800209E-05
xn= 9.0987990248E-01 xn+1= 9.0987350958E-01
f(xn+1)=-6.8122881203E-06
xn= 9.0987350958E-01 xn+1= 9.0987691573E-01
f(xn+1)= 3.6295678001E-06
xn= 9.0987691573E-01 xn+1= 9.0987510095E-01
f(xn+1)=-1.9338276616E-06
xn= 9.0987510095E-01 xn+1= 9.0987606786E-01
f(xn+1)= 1.0303429008E-06
xn= 9.0987606786E-01 xn+1= 9.0987555269E-01
f(xn+1)=-5.4896190704E-07
xn= 9.0987555269E-01 xn+1= 9.0987582717E-01
f(xn+1)= 2.9248803912E-07
xn= 9.0987582717E-01 xn+1= 9.0987568093E-01
f(xn+1)=-1.5583464119E-07
xn= 9.0987568093E-01 xn+1= 9.0987575885E-01
f(xn+1)= 8.3031409304E-08
xn= 9.0987575885E-01 xn+1= 9.0987571733E-01
f(xn+1)=-4.4236003305E-08
xn= 9.0987571733E-01 xn+1= 9.0987573945E-01
f(xn+1)= 2.3572283681E-08
xn= 9.0987573945E-01 xn+1= 9.0987572766E-01
f(xn+1)=-1.2558302842E-08
xn= 9.0987572766E-01 xn+1= 9.0987573394E-01
f(xn+1)= 6.6920620156E-09
Конечные значения
СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1.
Алексеев В. Е., Ваулин А.С.,
Петрова Г. Б. – Вычислительная техника и программирование. Практикум по
программированию :Практ .пособие/ –М.: Высш. шк. , 1991. – 400 с.
2.
Абрамов С.А., Зима Е.В. – Начала
программирования на языке Паскаль. – М.: Наука, 1987. –112 с.
3.
Вычислительная техника и
программирование: Учеб. для техн. вузов/ А.В. Петров,
В.Е. Алексеев, А.С. Ваулин и др. – М.: Высш. шк., 1990 – 479 с.
4.
Гусев В.А., Мордкович А.Г. –
Математика: Справ. материалы: Кн. для учащихся. – 2-е изд. – М.: Просвещение,
1990. – 416 с.
5.
Марченко А.И., Марченко Л.А. –
Программирование в среде Turbo
Pascal 7.0 – К.: ВЕК+, М.: Бином
Универсал, 1998. – 496 с.