Учебное пособие_Численные методы -26 -дек_2014 (97-2003)
.pdfРис. 3.6. Шаговый метод (решение в Microsoft Excel)
Формулы в Microsoft Excel представлены на рис. 3.7.
Рис. 3.7. Формулы в Microsoft Excel для шагового метода
Метод половинного деления. Ручной счет
Провести расчеты с точностью 0,1. a =0,8; b=1.
Условие |
сходимости: |
f(a)∙f(b)<0. |
f(a)=-0,3664; |
f(b)=1; |
||||||
f(a)∙f(b)=-0,3664∙1=-0,3664<0. |
Следовательно, |
условие |
сходимости |
|||||||
выполнено. |
|
|
|
|
|
|
|
|
|
|
Итерация 1 |
|
|
|
|
|
|
|
|
|
|
a=0,8; b=1; x |
a b |
|
0,8 1 |
|
0,9 , |
|
|
|
|
|
|
|
|
|
|
|
|||||
|
2 |
2 |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
81 |
|
|
|
f(a)=f(0,8)=-0,3664,
f(x)= f(0,9)=0,94+2∙0,93-0,9-1=0,2141,
│f(x)│=│0,2141│=0,2141 <0,1 – не выполнено, продолжаем вычисления.
f(a)∙f(x)=-0,3664∙0,2141 < 0, значит, a=a, b=x.
Итерация 2
a =0,8; b=0,9; |
x |
a b |
|
0,8 |
0,9 |
0,85 |
, |
2 |
2 |
|
|||||
|
|
|
|
|
|
f(a)=f(0,8)=-0,3664,
f(x)= f(0,85)=0,854+2∙0,853-0,85-1=-0,0997,
│f(x)│=│-0,0997│=0,0997 <0,1 – выполнено.
Ответ: x=0,85 – корень уравнения с точностью 0,1.
Реализация метода половинного деления в Microsoft Excel представлен на рис. 3.8.
Рис. 3.8. Метод половинного деления (решение в Microsoft Excel)
Формулы в Microsoft Excel представлены на рис. 3.9 и рис. 3.10.
Рис. 3.9. Формулы в Microsoft Excel для метода половинного деления
82
Рис. 3.10. Формулы в Microsoft Excel для метода половинного деления (продолжение)
Метод Ньютона. Ручной счет
Провести расчеты с точностью 0,001.
a=0,8; b=1.
Условие сходимости: f(x0)∙f”(x0)>0, где x0=a или x0=b.
f (x) x |
4 |
|
2x3
x
1
,
f '(x) 4x |
3 |
6x |
2 |
|
|
1
,
f ''(x) 12x 2 12x .
Проверяем x0=a=0,8: f(0,8)=-0,3664; f”(0,8)=12∙0,82+12∙0,8=17,28 > 0 –выполнено.
Итерация 1
x=0,8, f(x)=f(0,8)=-0,3664,
f’(x)=f’(0,8)=4∙0,83+6∙0,82-1=4,888,
x 0,8
f (0,8) f "(x)
0,8
0,3664 |
|
|
4,888 |
||
|
0,875
,
f(x)= f(0,875)=0,8754+2∙0,8753-0,875-1=0,051,
│f(x)│=│0,051│=0,051<0,001 – не выполнено, продолжаем вычисления.
Итерация 2
f’(x)=f’(0,875)=4∙0,8753+6∙0,8752-1=6,2734,
x 0,875 |
f (0,875) |
0,875 |
0,051 |
|
0,8669, |
|
f "(0,875) |
6,2734 |
|||||
|
|
|
f(x)=f(0,8669)=0,86694+2∙0,86693-0,8669-1=0,00085,
│f(x)│=│0,00085│=0,00085 <0,001 – выполнено.
Ответ: x=0,8669 – корень исходного уравнения с точностью 0,001.
Решение метода Ньютона в Microsoft Excel представлено на рис. 3.11.
83
Рис. 3.11. Метод Ньютона (решение в Microsoft Excel)
Формулы в Microsoft Excel приведены на рис. 3.12.
Рис. 3.12. Формулы в Microsoft Excel для метода Ньютона
Метод простой итерации. Ручной счет
Провести расчеты с точностью 0,001.
a=0,8; b=1.
Условие сходимости:│S’(x0)│<1, где x0=a или x0=b. Выразим х из исходного уравнения:
x x |
4 |
2x |
3 |
1, значит |
S (x) x |
4 |
2x |
3 |
1 |
, |
S '(x) 4x |
3 |
6x |
2 |
. |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
S '(a) S (0,8) 4 0,8 |
3 |
6 0,8 |
2 |
5,888, │S’(0,8)│<1 – не выполнено. |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Выразим х из исходного уравнения по-другому:
x |
4 |
x 1 2x |
3 |
, значит S(x) |
4 |
x 1 2x |
3 |
, |
S'(x) |
1 |
x 1 |
|
||||||
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
1 |
0,8 1 2 0,83 |
|
3 |
1 6 0,82 0,8587 , |
|
|||||||
S'(a) S'(0,8) |
|
|
|
|
||||||||||||||
|
4 |
|
||||||||||||||||
4 |
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
│S’(0,8)│<1 – выполнено, |
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|||
S'(b) S'(1) |
1 |
|
1 1 2 13 |
|
1 6 12 , |
|
|
|
|
|
||||||||
|
4 |
|
|
|
|
|
||||||||||||
4 |
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
│S’(1)│<1 – не выполнено.
Выразим х из исходного уравнения по-другому:
|
|
|
3 |
|
|
3 |
|
||
2x |
|
4 |
||
|
1
6x |
2 |
|
.
x 3 |
|
x 1 x4 |
|
, значит, S(x) |
||
2 |
||||||
|
|
|
|
|
||
S'(a) S'(0,8) |
1 4 0,83 |
|||||
6 0,5 0,8 1 0,84 |
||||||
|
|
|
|
|
3 |
x |
|
2
3
1 x |
4 |
|
1 4x |
3 |
|
|
|
|
|
|
|
||
|
, |
S'(x) |
6 0,5 x 1 x |
|
3 |
|
2 |
|
|
|
|
|
2 |
|
|
|
|
4 |
|
|
|
|
|
|
|
|
0,2226,
84
.
│S’(0,8)│<1 – выполнено,
|
1 4 1 |
|
|
3 |
|
S'(b) S'(1) |
6 0,5 1 1 1 |
3 |
|
|
2 |
|
4 |
|
0,7937
,
│S’(1)│<1 – выполнено, значит, условие сходимости выполнено.
Итерация 1 x=0,8,
|
0,8 1 0,8 |
4 |
x S(x) S(0,8) 3 |
|
|
2 |
|
|
|
|
0,8859
,
f (x) f (0,8859) f (x)0,1206
|
4 |
3 |
0,8859 1 |
0,8859 |
2 0,8859 |
||
0,1206 |
<0,1 – не выполнено, |
0,1206,
продолжаем вычисления.
Итерация 2
|
4 |
|
x S(x) S(0,8859) 3 |
0,8859 1 0,8859 |
|
2 |
||
|
0,8595
,
f (x)
f (0,8595) 0,85954
2 0,85953
0,8595 1
0,0439
,
f (x)
0,0439
0,0439
<0,1
– выполнено.
Ответ: x=0,8595 – корень исходного уравнения с точностью 0,1. Решение метода простой итерации в Microsoft Excel представлено на
рис. 3.13.
Рис. 3.13. Метод простой итерации (решение в Microsoft Excel)
Формулы в Microsoft Excel приведены на рис. 3.14.
Рис. 3.14. Формулы в Microsoft Excel для метода простой итерации
85
Решение в редакторе Visual Basic
Код программы Visual Basic:
Function F(ByVal x As Double)
F = x ^ 4 + 2 * x ^ 3 - x - 1
End Function
Function F1(ByVal x As Double)
F1 = 4 * x ^ 3 + 6 * x ^ 2 - 1
End Function
Private Sub CommandButton1_Click()
ActiveSheet.Cells(10, 1).Value = "Корень на выбранном промежутке не найден" xn = ActiveSheet.Cells(3, 5).Value
xk = ActiveSheet.Cells(4, 5).Value xh = ActiveSheet.Cells(5, 5).Value x = xn
While x <= xk F11 = F(x)
F12 = F(x + xh)
If F11 * F12 < 0 Then
ActiveSheet.Cells(10, 1).Value = "Корень принадлежит промежутку (" & Str(x) & ";" & Str(x + xh) & ")"
A = x an = x
B = x + xh End If
x = x + xh Wend
k = 0
e = ActiveSheet.Cells(6, 5).Value ActiveSheet.Cells(13, 1).Value = "" While Abs(F(x)) > e
x = (A + B) / 2
If F(A) * F(x) < 0 Then B = x
Else
A = x End If
k = k + 1 Wend
ActiveSheet.Cells(13, 1).Value = "Корень =" & Str(x) & " c точностью" & Str(e) & "
вычислена " & Str(k) & " итерации"
k = 0 x = an
86
ActiveSheet.Cells(16, 1).Value = "" While Abs(F(x)) > e
x = x - F(x) / F1(x) k = k + 1
Wend
ActiveSheet.Cells(16, 1).Value = "Корень =" & Str(x) & " c точностью" & Str(e) & "
вычисленна " & Str(k) & " итерации"
k = 0 x = an
ActiveSheet.Cells(19, 1).Value = "" While Abs(F(x)) > e
x = ((x + 1 - x ^ 4) / 2) ^ 0.3333 k = k + 1
Wend
ActiveSheet.Cells(19, 1).Value = "Корень =" & Str(x) & " c точностью" & Str(e) & "
вычислен на " & Str(k) & " итерации"
End Sub
Результат работы программы приведен на рис. 3.15.
Рис. 3.15. Результат работы программы Visual Basic
87
Шаговый метод, метод половинного деления, метод Ньютона, метод простой итерации. Решение в Microsoft Visual Studio
Код программы С++:
// pr2 NELIN common.cpp: определяет точку входа для консольного приложения.
//
#include"stdafx.h" #include<iostream> #include<iomanip> #include<math.h> usingnamespacestd;
double xx0, xx1; // промежуток в ответе шагового метода
double a=0, b=1, h=0.2, e=0.1; |
// исходные данные |
|
double |
F(double x) |
|
{return pow(x,4.0)+2.0*pow(x,3.0)-x-1.0;} |
||
double |
F1(double x) |
|
{return 4.0*pow(x,3.0)+6.0*pow(x,2.0)-1.0;} double S(double x)
{return pow((x+1.0-pow(x,4.0))/2.0,1.0/3.0);} void shag_metod(){
double x0=a, x1=x0+h; while (x1<=b) {
x1=x0+h;
if (F(x0)*F(x1)<0){
cout<<"x na intervale ["<<x0<<","<<x1<<"]"<<endl; xx0=x0;
xx1=x1; |
} |
x0=x1; }} |
|
void pol_del(){ |
|
int k=0; |
|
double x=xx0; |
|
a=xx0; |
|
b=xx1; |
|
while(fabs(F(x))>e) { |
|
x=(a+b)/2; |
|
if (F(a)*F(x)<0) b=x; |
|
else a=x; |
|
k=k+1; } |
|
cout<<setw(26)<<"METOD POLOVINNOGO DELENIA:"; cout<<setw(5)<<"x="<<setw(10)<<x<<setw(5)<<"k="<<setw(5)<<k<<endl;}
void nuton(){ int k=0; double x2=xx0;
while(fabs(F(x2))>e) { x2=x2-F(x2)/F1(x2); k=k+1; }
cout<<setw(26)<<"METOD N'UTONA:"; cout<<setw(5)<<"x="<<setw(10)<<x2<<setw(5)<<"k="<<setw(5)<<k<<endl;}
void pros_iter(){ |
|
int k=0; |
|
double x3=xx0; |
|
while (fabs(F(x3))>e) |
{ |
x3=S(x3); |
|
k=k+1; } |
|
cout<<setw(26)<<"METOD PROSTOI ITERACII:"; cout<<setw(5)<<"x="<<setw(10)<<x3<<setw(5)<<"k="<<setw(5)<<k<<endl;}
int main (){ cout<<"e="<<e<<endl; shag_metod(); pol_del();
nuton(); pros_iter(); return 0;}
88
Результат выполнения программы с различной точностью приведен на рис. 3.16 – рис. 3.19.
Рис. 3.16. Результат выполнения программы с точностью 0,1
Рис. 3.17. Результат выполнения программы с точностью 0,01
Рис. 3.18. Результат выполнения программы с точностью 0,001
Рис. 3.19. Результат выполнения программы с точностью 0,0001
Пример 3.3 |
f (x) x |
|
3x 3.25 5 cos(x) |
к виду, удобному для |
Привести уравнение |
2 |
|||
|
|
|
|
итераций, и решить его.
Решение. Будем искать простой корень уравнения, находящийся на отрезке локализации [-0,4;0]. Значение функций на концах отрезка f ( 0.4) 0,004695, f (0) 1,75 имеет различные знаки и функция непрерывна, значит, в этом промежутке есть корень.
89
Приведем уравнение к виду x = (x), где
(x)
x |
2 |
|
5cos(x) 3,25 3
.
Проверим условие сходимости: ’(x)
2 x 5 sin(x).
3 3
Максимальное значение
модуля производной итерационной функции достигается на конце отрезка в точке x = -0,4, при этом (-0,4) = 0,916. Построим таблицу из пяти итерационных шагов
Таблица 3.2
Реализация метода простой итерации
№ итерации |
x |
(x) |
1 |
-0,4 |
-0,39843499 |
2 |
-0,39843499 |
-0,3998653857 |
3 |
-0,3998653857 |
-0,3985582517 |
4 |
-0,3985582517 |
-0.3997529063 |
5 |
-0,3997529063 |
-0.3986611858 |
x
Найденное приближенное
0,3991826759 на величину
значение отличается от точного решения
- 0,3986611858 - (-0,3991826759) 0,00052149.
Пример 3.4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Вычислить |
методом |
|
Ньютона |
отрицательный |
корень |
уравнения |
||||||||||||||||||
f (x) x |
4 |
3x |
2 |
75x 10000 0 |
с пятью верными знаками. |
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Решение. |
Полагая в левой части уравнения x 0, 10, 100,... получим |
|||||||||||||||||||||||
f (0) 10000, |
f ( 10) 1050, |
f ( 100) 108. |
Следовательно, искомый корень |
|||||||||||||||||||||
находится в интервале 100 ξ 10. |
Сузим найденный интервал. Так как |
|||||||||||||||||||||||
f ( 11) 3453, |
|
то |
11 ξ 10. |
|
В |
этом |
последнем |
интервале |
f (x) 0 и |
|||||||||||||||
|
|
Так как |
|
|
|
и |
|
|
|
|
то |
f ( 11) f |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
( 11) 0 и мы можем |
|||||||||||||||
f (x) 0. |
|
|
|
|
|
f ( 11) 0 |
|
|
f |
( 11) |
0, |
|
|
|
|
|
|
|
|
|
||||
принять |
за |
начальное |
|
|
приближение |
x0 11. |
Последовательные |
|||||||||||||||||
приближения xn |
(n 1, 2, ...) |
|
вычисляются по схеме, представленной в табл. |
|||||||||||||||||||||
3.3. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 3.3 |
|||
|
|
|
|
|
|
|
|
|
Реализация метода Ньютона |
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
n |
|
|
|
|
xn |
|
|
|
|
|
|
f(xn) |
|
|
|
f’(xn) |
|
|
hn |
|
|
f (xn ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f (xn ) |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
0 |
|
|
|
-11 |
|
|
|
|
|
3453 |
|
|
|
-5183 |
|
|
|
0,7 |
|
|
|
|||
1 |
|
|
|
-10,3 |
|
|
|
|
|
134,3 |
|
|
|
-4234 |
|
|
|
0,03 |
|
|
||||
2 |
|
|
|
-10,27 |
|
|
|
|
37,8 |
|
|
|
-4196 |
|
|
|
0,009 |
|
||||||
3 |
|
|
|
-10,261 |
|
|
|
|
0,2 |
|
|
|
|
-------- |
|
|
|
-------- |
|
90