Метод касательных. Решения нелинейных уравнений. Паскаль 7.0
Метод касательных. Решения
нелинейных уравнений. Паскаль 7.0
Введение
Процедура подготовки и решения задачи на ЭВМ
достаточно сложный и трудоемкий процесс, состоящий из следующих этапов:
Постановка задачи (задача, которую предстоит решать на
ЭВМ, формулируется пользователем или получается им в виде задания).
Математическая формулировка задачи.
Разработка алгоритма решения задачи.
Написание программы на языке программирования.
Подготовка исходных данных.
Ввод программы и исходных данных в ЭВМ.
Отладка программы.
Тестирование программы.
Решение задачи на ЭВМ и обработка результатов.
В настоящей курсовой работе условие задачи дано в
математической формулировке, поэтому необходимость в выполнении этапов 1 и 2
отпадает и сразу можно приступить к разработке алгоритма решения задачи на ЭВМ.
Под алгоритмом понимается последовательность
арифметических и логических действий над числовыми значениями переменных,
приводящих к вычислению результата решения задачи при изменении исходных данных
в достаточно широких пределах.
Таким образом, при разработке алгоритма решения задачи
математическая формулировка преобразуется в процедуру решения, представляющую
собой последовательность арифметических действий и логических связей между ними.
При этом алгоритм обладает следующими свойствами:
детерминированностью, означающей, что применение
алгоритма к одним и тем же исходным данным должно приводить к одному и том уже
результату;
массовостью, позволяющей получать результат при
различных исходных данных;
результативностью, обеспечивающей получение результата
через конечное число шагов.
Наиболее наглядным способом описания алгоритмов
является описание его в виде схем. При этом алгоритм представляется
последовательность блоков, выполняющих определенные функции, и связей между
ними. Внутри блоков указывается информация, характеризующая выполняемые ими
функции. Блоки схемы имеют сквозную нумерацию.
Конфигурация и размеры блоков, а также порядок
построения схем определяются ГОСТ 19.002-80 и ГОСТ 19.003-80.
На этапе 4 составляется программа на языке
Турбо-Паскаль. При описании программы необходимо использовать характерные
приемы программирования и учитывать специфику языка. В качестве языка
программирования выбран язык Паскаль ввиду его наглядности и облегченного
понимания для начинающих программистов, а также возможности в дальнейшем
использовать для решения более трудных задач.
Этапы алгоритмизации и программирования являются
наиболее трудоемкими, поэтому им уделяется большое внимание.
В процессе выполнения курсовой работы студент готовит
исходные данные, вводит программу и исходные данные. При работе ввод программы
и исходных данных осуществляется с клавиатуры дисплея.
Отладка программы состоит в обнаружении и исправлении
ошибок, допущенных на всех этапах подготовки задач к решению на ПЭВМ. Синтаксис
ошибки обнаруживается компилятором, который выдает сообщение, указывающее место
и тип ошибки. Обнаружение семантических ошибок осуществляется на этапе
тестирования программы, в котором проверяется правильность выполнения программы
на упрощенном варианте исходных данных или с помощью контрольных точек или в
режиме пошагового исполнения.
Задание при обработке на ЭВМ проходит ряд шагов:
компиляцию, редактирование (компоновку) и выполнение.
Обработка результатов решения задачи осуществляется с
помощью ЭВМ. Выводимые результаты оформлены в виде, удобном для восприятия.
Краткое описание сущности метода касательных
(метода секущих Ньютона)
Пусть на отрезке [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 = xn
– (f (xn) / f’(xn)) (2).
Если на отрезке [a;b] f’(x) * f“(x) > 0, то нулевое
приближение выбираем x0 = a. Рассмотрим геометрический смысл метода. Рассмотрим
график функции y = f (x).
Пусть для определенности f‘(x) > 0 и f“(x) > 0.
Проведем касательную к графику функции в точке 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 пересечения касательной с
осью оx:
x2 = x1 – (f (x1) / (f’ (x1)).
Вообще:
xk+1 = xk – (f (xk) / f’(xk)) (3).
Таким образом, формула (3) дает последовательные
приближения (xk) корня, получаемые из уравнения касательной, проведенной к
графику функции в точке bk (xk; f (xk0). Метод уточнения корня 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.
Для оценки приближения используется общая формула:
|c-xk-1| Ј |f (xk+1) / m|, где m = min f’(x) на
отрезке [a;b].
На практике проще пользоваться другим правилом. Если
на отрезке [a;b] выполняется условие 0 < m < |f (x)| и e — заданная
точность решения, то неравенство |xk+1 - xk| Јe влечет выполнение неравенства
|c-xk-1| Јe.
В этом случае процесс последовательного приближения
продолжают до тех пор, пока не выполнится неравенство:
|c-xk-1| Јe.
Решение нелинейного уравнения аналитически
Определим корни уравнения х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.
Пусть х0 = 0, тогда хn+1 = j (хn).
Вычисления расположим в таблице
n
|
х n
|
х 2
n
|
х 3
n
|
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
|
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,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
|
0,909876068
|
1,03E-06
|
График функции y = х3 + 0,1х2 + 0,4х – 1,2
.
Блок схема программы
Программа на языке 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; {Производная от основной
функции}
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.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
Конечные значения
xn+1= 9.0987573394E-01 f(xn+1)= 6.6920620156E-09
Список литературы
Алексеев В. Е., Ваулин А. С., Петрова Г. Б.
Вычислительная техника и программирование. Практикум по программированию/
Практ. Пособие. — М.: Высшая школа, 1991.
Абрамов С. А., Зима Е. В. Начала программирования на
языке Паскаль. — М.: Наука, 1987.
Вычислительная техника и программирование: Учеб. для
техн. вузов. – М.: Высшая школа, 1990.
Гусев В. А., Мордкович А. Г. Математика: Справ.
материалы: Кн. для учащихся. — М.: Просвещение, 1990.
Марченко А. И., Марченко Л. А. Программирование в
среде Turbo Pascal 7.0 – К.: ВЕК+. — М.: Бином Универсал, 1998.
Для подготовки данной работы были использованы
материалы с сайта http://www.matematika-r.info/