Содержание
TOC \o “1-3” \h \z HYPERLINK \l “_Toc41451433” Содержание
PAGEREF _Toc41451433 \h 1
HYPERLINK \l “_Toc41451434” Используемая литература PAGEREF
_Toc41451434 \h 1
HYPERLINK \l “_Toc41451435” Метод Ньютона (касательных). PAGEREF
_Toc41451435 \h 2
HYPERLINK \l “_Toc41451436” Описание PAGEREF _Toc41451436 \h 2
HYPERLINK \l “_Toc41451437” Блок-схема алгоритма PAGEREF
_Toc41451437 \h 3
HYPERLINK \l “_Toc41451438” Листинг программы PAGEREF _Toc41451438
\h 4
HYPERLINK \l “_Toc41451439” Результаты работы программы PAGEREF
_Toc41451439 \h 6
HYPERLINK \l “_Toc41451440” Пример №1 PAGEREF _Toc41451440 \h 6
HYPERLINK \l “_Toc41451441” Пример №2 PAGEREF _Toc41451441 \h 6
HYPERLINK \l “_Toc41451442” Пример №3 PAGEREF _Toc41451442 \h 7
HYPERLINK \l “_Toc41451443” Метод итераций. PAGEREF _Toc41451443 \h
8
HYPERLINK \l “_Toc41451444” Блок-схема алгоритма PAGEREF
_Toc41451444 \h 8
HYPERLINK \l “_Toc41451445” Листинг программы PAGEREF _Toc41451445
\h 9
HYPERLINK \l “_Toc41451446” Результаты работы программы PAGEREF
_Toc41451446 \h 11
HYPERLINK \l “_Toc41451447” Пример №1 PAGEREF _Toc41451447 \h 11
HYPERLINK \l “_Toc41451448” Пример №2 PAGEREF _Toc41451448 \h 11
HYPERLINK \l “_Toc41451449” Пример №3 PAGEREF _Toc41451449 \h 12
Используемая литература
1. HYPERLINK “http://www.kyshtym.net.ru/rww/”
http://www.kyshtym.net.ru/rww/ Учимся программировать на С++
2. HYPERLINK “http://www.sprin.ru/soft.php”
http://www.sprin.ru/soft.php Решение линейных уравнений методом Ньютона
(касательных)
Метод Ньютона (касательных).
Описание
В рамках метода Ньютона предполагается, что функция дифференцируема.
Согласно этому методу строится линейная аппроксимация функции в
начальной точке, а точка, в которой аппроксимирующая линейная функция
обращается в нуль, принимается в качестве следующего приближения.
Итерационый процесс схождения к корню реализуется формулой:
xn+1=xn-f(xn)/f ‘(xn). Вычисления продолжаются пока соблюдается условие
|xn+1-xn |>=eps.
В зависимости от выбора начальной точки и вида функции алгоритм по
методу Ньютона может как сходиться к корню уравнения, так и расходиться.
Ниже приведена блок-схема алгоритма и листинг программы, реализующей
данный алгоритм на языке С++. Также привожу текст, которая выдает данная
программа при решении исходного уравнения.
Блок-схема алгоритма
Листинг программы
//метод Ньютона для решения кубических уравнений
#include #include double a[4]={0}, b[3]={0}, c[2]={0}, prec=0.00000; double minim=0, maxim=0; void Hello(void); void Input(); void Derivative(); void Calculation(); double Calc_Fun(double); double Calc_First(double); double Calc_Second(double); main(void) { Hello(); Input(); Derivative(); Calculation(); return 0; } void Hello(void) { cout>a[i]; } cout>minim; cout>maxim; while(minim==maxim||minim>maxim) { cout>minim; cout>maxim; } cout>prec; } void Derivative() { b[0]=a[0]*3; b[1]=a[1]*2; b[2]=a[2]; c[0]=b[0]*2; c[1]=b[1]; cout0) x=minim; else x=maxim; if (Calc_First(minim)>Calc_First(maxim)) m=abs(Calc_First(maxim)); else m=abs(Calc_First(minim)); coutprec) { x=(x-(Calc_Fun(x)/Calc_First(x))); coutРезультаты работы программы
Пример №1
Программа для решения кубических уравнений методом касательных (метод
Ньютона).
Кубическое уравнение имеет вид
a1*x^3+a2*x^2+a3*x+a4=0
Введите значение коэффициента a[1] : 1
Введите значение коэффициента a[2] : -6
Введите значение коэффициента a[3] : -9
Введите значение коэффициента a[4] : 58
Необходимо указать интервал поиска решения.
Введите нижнюю границу поиска : -4
Введите верхнюю границу поиска : -3
Введите допустимую погрешность : 0.00005
Исходное уравнение имеет вид :
1x^3+(-6)x^2+(-9)x+(58)=0
Первая производная имеет вид :
f'(x)=3x^2+(-12)x+(-9)
Вторая производная имеет вид :
f''(x)=6x+(-12)
-------------------------------------------------
| Xn | f(Xn) | |f(Xn)|/m |
-------------------------------------------------
| -4| -66| 1.222222222|
| -3.24137931| -9.922506048| 0.183750112|
| -3.079817529| -0.40621762| 0.007522548518|
| -3.07261683|-0.000789793230|1.462580056e-05|
-------------------------------------------------
Пример №2
Программа для решения кубических уравнений методом касательных (метод
Ньютона).
Кубическое уравнение имеет вид
a1*x^3+a2*x^2+a3*x+a4=0
Введите значение коэффициента a[1] : 1
Введите значение коэффициента a[2] : -6
Введите значение коэффициента a[3] : -9
Введите значение коэффициента a[4] : 58
Необходимо указать интервал поиска решения.
Введите нижнюю границу поиска : 3
Введите верхнюю границу поиска : 4
Введите допустимую погрешность : 0.00005
Исходное уравнение имеет вид :
1x^3+(-6)x^2+(-9)x+(58)=0
Первая производная имеет вид :
f'(x)=3x^2+(-12)x+(-9)
Вторая производная имеет вид :
f''(x)=6x+(-12)
-------------------------------------------------
| Xn | f(Xn) | |f(Xn)|/m |
-------------------------------------------------
| 3| 4| 0.4444444444|
| 3.222222222| 0.159122085| 0.01768023167|
| 3.231855174| 0.000341137633|3.790418145e-05|
-------------------------------------------------
Пример №3
Программа для решения кубических уравнений методом касательных (метод
Ньютона).
Кубическое уравнение имеет вид
a1*x^3+a2*x^2+a3*x+a4=0
Введите значение коэффициента a[1] : 1
Введите значение коэффициента a[2] : -6
Введите значение коэффициента a[3] : -9
Введите значение коэффициента a[4] : 58
Необходимо указать интервал поиска решения.
Введите нижнюю границу поиска : 5
Введите верхнюю границу поиска : 6
Введите допустимую погрешность : 0.00005
Исходное уравнение имеет вид :
1x^3+(-6)x^2+(-9)x+(58)=0
Первая производная имеет вид :
f'(x)=3x^2+(-12)x+(-9)
Вторая производная имеет вид :
f''(x)=6x+(-12)
-------------------------------------------------
| Xn | f(Xn) | |f(Xn)|/m |
-------------------------------------------------
| 6| 4| 0.6666666667|
| 5.851851852| 0.2601229487| 0.04335382479|
| 5.840787634| 0.001413241032| 0.000235540172|
| 5.840726862|4.255405933e-08|7.092343222e-09|
-------------------------------------------------
Метод итераций.
Блок-схема алгоритма
Блок-схема решения и листинг программы, реализующей этот алгоритм на
языке программирования С++.
Листинг программы
//метод итераций для решения кубических уравнений
#include #include double a[4]={0}, b[3]={0}, prec=0.00000; double minim=0, maxim=0; void Hello(void); void Input(); void Derivative(); void Calculation(); double Calc_Fun(double); double Calc_First(double); main(void) { Hello(); Input(); Derivative(); Calculation(); cout>a[i]; } cout>minim; cout>maxim; while(minim==maxim||minim>maxim) { cout>minim; cout>maxim; } cout>prec; } void Derivative() { b[0]=a[0]*3; b[1]=a[1]*2; b[2]=a[2]; } void Calculation() { double x=0, x_old=0, m=0; coutfabs(Calc_First(maxim))) m=x=x_old=minim; else m=x=x_old=maxim; m=fabs(1/Calc_First(m)); cout0) { do { x_old=x; x=x_old-m*Calc_Fun(x_old); coutprec); } else { do { x_old=x; x=x_old+m*Calc_Fun(x_old); coutprec); } coutМИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ ТАТАРСТАН
АЛЬМЕТЬЕВСКИЙ НЕФТЯНОЙ ИНСТИТУТ
Кафедра информатики
Курсовая работа
На тему: метод касательных (метод Ньютона)
Работу выполнил студент гр. 52-61
Низамова Г.Н.
Проверил: Борганова Э.М.
Альметьевск 2003 г.
Нашли опечатку? Выделите и нажмите CTRL+Enter