Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие_Численные методы -26 -дек_2014 (97-2003)

.pdf
Скачиваний:
270
Добавлен:
11.03.2016
Размер:
6.51 Mб
Скачать

Рис. 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