Учебная работа № 1177. Метод касательных решения нелинейных уравнений
Пензенский приборостроительный колледж
на тему:
Метод касательных решения нелинейных уравнений
Выполнил: Стт 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.00280 и ГОСТ 19.00380.
На этапе 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 k 0 ) метод уточнения корня c [a;b] уравнения f (x) = 0 с помощью формулы (3) называется методом касательной или методом Ньютона.
Геометрический смысл метода касательных состоит в замене дуги y = f (x) касательной, одной к одной из крайних точек . Начальное приближение x0 = a или x0 = b брать таким, чтобы вся последовательность приближения х k принадлежала интервалу ]a;b[ . В случае существования производных f ’, f ”, сохраняющих свои знаки в интервале, за х0 берется тот конец отрезка [a;b], для которого выполняется условие f ’(х0 ) * f (х0 ) > 0. Для оценки приближения используется общая формула :
|cx k 1 | | f (x k +1 )/m| , где m = min f ’(x) на отрезке [a;b] .
На практике проще пользоваться другим правилом :
Если на отрезке [a;b] выполняется условие 0 < m < | f (x)| и заданная точность решения, то неравенство | x k+ 1 x k | влечет выполнение неравенства |cx k 1 |
В этом случае процесс последовательного приближения продолжают до тех пор, пока не выполнится неравенство :
|cx k 1 |
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 = (x) , так , чтобы | ‘ (x) | <1 при 0 x +1.
Так как max | f ’(x) | = f ’(+1) = 3 + 0,1 + 0,4 = 3,5 то можно взять R = 2.
Тогда (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 = (х n ).
Вычисления расположим в таблице.
n | хn | х2 n | х3 n | (х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 | 0,001968 |
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,5E05 |
14 | 0,909848155 | 0,827823665 | 0,753193834 | 0,909890424 | 4,5E05 |
15 | 0,909890424 | 0,827900583 | 0,753298812 | 0,909867904 | 2,4E05 |
16 | 0,909867904 | 0,827859602 | 0,753242881 | 0,909879902 | 1,28E05 |
17 | 0,909879902 | 0,827881437 | 0,753272681 | 0,90987351 | 6,8E06 |
18 | 0,90987351 | 0,827869803 | 0,753256804 | 0,909876916 | 3,63E06 |
19 | 0,909876916 | 0,827876002 | 0,753265263 | 0,909875101 | 1,9E06 |
20 | 0,909875101 | 0,827872699 | 0,753260756 | 0,909876068 | 1,03E06 |
График функции 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 . {Конец основного тела программы}
От A = 0.0000000000E+00 до B= 1.0000000000E+00
Погрешность с= 1.0000000000E08
От A= 0.0000000000E+00 до B= 1.0000000000E+00
Погрешность с= 1.0000000000E08
xn= 8.5000000000E01 xn+1= 9.3681250000E01 f(xn+1)= 8.4649960270E02
xn= 9.3681250000E01 xn+1= 8.9448751986E01 f(xn+1)=4.6507647892E02
xn= 8.9448751986E01 xn+1= 9.1774134381E01 f(xn+1)= 2.4288343840E02
xn= 9.1774134381E01 xn+1= 9.0559717189E01 f(xn+1)=1.3064617920E02
xn= 9.0559717189E01 xn+1= 9.1212948085E01 f(xn+1)= 6.9234699658E03
xn= 9.1212948085E01 xn+1= 9.0866774587E01 f(xn+1)=3.6990702320E03
xn= 9.0866774587E01 xn+1= 9.1051728099E01 f(xn+1)= 1.9678960780E03
xn= 9.1051728099E01 xn+1= 9.0953333295E01 f(xn+1)=1.0493249720E03
xn= 9.0953333295E01 xn+1= 9.1005799543E01 f(xn+1)= 5.5884091853E04
xn= 9.1005799543E01 xn+1= 9.0977857497E01 f(xn+1)=2.9781681224E04
xn= 9.0977857497E01 xn+1= 9.0992748338E01 f(xn+1)= 1.5865717614E04
xn= 9.0992748338E01 xn+1= 9.0984815480E01 f(xn+1)=8.4537703515E05
xn= 9.0984815480E01 xn+1= 9.0989042365E01 f(xn+1)= 4.5040009354E05
xn= 9.0989042365E01 xn+1= 9.0986790364E01 f(xn+1)=2.3997676180E05
xn= 9.0986790364E01 xn+1= 9.0987990248E01 f(xn+1)= 1.2785800209E05
xn= 9.0987990248E01 xn+1= 9.0987350958E01 f(xn+1)=6.8122881203E06
xn= 9.0987350958E01 xn+1= 9.0987691573E01 f(xn+1)= 3.6295678001E06
xn= 9.0987691573E01 xn+1= 9.0987510095E01 f(xn+1)=1.9338276616E06
xn= 9.0987510095E01 xn+1= 9.0987606786E01 f(xn+1)= 1.0303429008E06
xn= 9.0987606786E01 xn+1= 9.0987555269E01 f(xn+1)=5.4896190704E07
xn= 9.0987555269E01 xn+1= 9.0987582717E01 f(xn+1)= 2.9248803912E07
xn= 9.0987582717E01 xn+1= 9.0987568093E01 f(xn+1)=1.5583464119E07
xn= 9.0987568093E01 xn+1= 9.0987575885E01 f(xn+1)= 8.3031409304E08
xn= 9.0987575885E01 xn+1= 9.0987571733E01 f(xn+1)=4.4236003305E08
xn= 9.0987571733E01 xn+1= 9.0987573945E01 f(xn+1)= 2.3572283681E08
xn= 9.0987573945E01 xn+1= 9.0987572766E01 f(xn+1)=1.2558302842E08
xn= 9.0987572766E01 xn+1= 9.0987573394E01 f(xn+1)= 6.6920620156E09
Конечные значения
xn+1= 9.0987573394E01 f(xn+1)= 6.6920620156E09
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Алексеев В. Е., Ваулин А.С., Петрова Г. Б. – Вычислительная техника и программирование. Практикум по программированию :Практ .пособие/ –М.: Высш. шк. , 1991. – 400 с.
2. Абрамов С.А., Зима Е.В. – Начала программирования на языке Паскаль. – М.: Наука, 1987. –112 с.
3. Вычислительная техника и программирование: Учеб. для техн. вузов/ А.В. Петров, В.Е. Алексеев, А.С. Ваулин и др. – М.: Высш. шк., 1990 – 479 с.
4. Гусев В.А., Мордкович А.Г. – Математика: Справ. материалы: Кн. для учащихся. – 2е изд. – М.: Просвещение, 1990. – 416 с.
5. Марченко А.И., Марченко Л.А. – Программирование в среде Turbo Pascal 7.0 – К.: ВЕК+, М.: Бином Универсал, 1998. – 496 с.