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

Тема_3_Нелин_ур_Inf_2

.pdf
Скачиваний:
12
Добавлен:
29.03.2015
Размер:
542.14 Кб
Скачать

Лекция 2

которой находится текущее значение аргумента х. После нажатия кнопки ОК в ячейку D25 записывается формула

=Fsin($E$22;$H$22;A25),

обеспечивающая вычисление значения функции F(a).

Для вычисления значений функции в точках b и ХсрB B достаточно протянуть формулу, записанную в ячейку D25, по ячейкам Е25 и F25.

В ячейку G25 запишем формулу для определения текущей длины интервала неопределённости

=ABS(B25-A25)

В ячейку H25 запишем формулу, проверки условия (6):

=ЕСЛИ(G25<$F$23;"корень="&ТЕКСТ($C25;"0,000000");"----")

В ячейки А26 и В26 запишем формулы, обеспечивающие на каждом шаге метода дихотомии уменьшение длины интервала неопределённости в два раза. В А26 записывается формула

=ЕСЛИ(D25*F25<0;A25;C25),

а в ячейку В26 формула

=ЕСЛИ(D25*F25<0;C25;B25).

Для записи формул во все остальные ячейки 26-й строки таблицы выделяем ячейки 25-й строки таблицы от ячейки С25 до ячейки Н25 и протягиваем формулы этой строки на строку 26.

Для завершения вычислительного процесса выделяем ячейки 26- й строки от А26 до Н26 и протягиваем вниз по строкам до достижения решения.

На рис. 9 показан фрагмент таблицы и некоторые формулы, записываемые в её ячейки.

Рис. 3.9. Реализация алгоритма дихотомии в таблице

На рис. 3.10 показана полная таблица решения уравнения методом дихотомии.

30

02.11.2010 / Любимов Е.Б.

Лекция 2

В строке 34 этой таблицы приведены результаты решения, полученные после применения функции, в которой метод дихотомии реализован на языке Visual Basic. Текст этой функции приведён ниже.

Рис. 3.10. Результаты уточнения корня методом дихотомии

Текст функции VBA, реализующей алгоритм метода дихотомии.

Function Dixotomia(a As Double, b As Double, delta As Double, alfa As Double, beta As Double)

Dim i As Integer ' i - счётчик числа итераций

Dim c As Double

If Fsin(alfa, beta, a) * Fsin(alfa, beta, b) > 0 Then MsgBox ("Интервал [a, b] выбран неправильно") Exit Function

End If i = 0 Do

c = (a + b) / 2

If Fsin(alfa, beta, a) * Fsin(alfa, beta, c) < 0 Then b = c Else a = c i = i + 1

Loop Until Abs(b - a) < delta Dixotomia = (a + b) / 2

End Function

3.2.4. Метод хорд

Метод хорд [5] так же, как и метод дихотомии, предназначен для уточнения корня на интервале, определённом при проведении процедуры отделения корней. На концах этого интервала [a, b] исследуемая функция имеет значения F(a) и F(b) с разными знаками. Очередное приближение, определяемое в методе хорд, находится в

31

02.11.2010 / Любимов Е.Б.

Лекция 2

точке пересечения оси абсцисс прямой, соединяющей точки F(a) и

F(b).

Рис. 3.11. Диаграмма алгоритма метода хорд

Координата этой точки определяется из уравнения прямой, соединяющей точки F(a) и F(b). Определив уравнение прямой как функцию

Y(X) = kX+D,

координата точки пересечения прямой с осью абсцисс определяется из решения системы уравнений

F(a)=ka+D,

F(b)=kb+D.

Решая эту систему, определим значения параметров k и D

k =

F(b) F(a)

, D = F(a) ka

b a

 

 

При условии Y(c)= kc+D=0 определяем значение с:

с = a

b a

F (a) или c =b

b a

F (b)

(3.8)

F (b) F (a)

F (b) F (a)

 

 

 

 

Блок-схема алгоритма метода хорд приведена на рис. 3.12. Результаты применения метода хорд для уточнения значения

корня в выделенном интервале [2,00; 2,25] приведены на рис. 3.13. Решение получено после выполнения трёх итераций.

32

02.11.2010 / Любимов Е.Б.

Лекция 2

 

 

Function

 

 

 

 

 

 

 

 

 

1

Ввод

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fa=F(a);Fb=F(b)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

параметров

 

 

 

 

 

 

 

 

 

Horda(a,b,δ)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c1=c2=a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a, b,δ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

да

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Exit

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ошибка !

 

 

 

Fa*Fb>0

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b a

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с1 = a

 

 

 

F( a )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FaFc>0?

 

 

 

 

 

F( b ) F( a )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fc = F( c1 )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b:=c1;Fb:=Fc

 

 

a:=c1Fa:=Fc

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

9

 

 

нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с2:=c1

 

1

|с1-с2| >δ ?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11Horda:=c1

12

вывод с1,F(с1),dx

конец

Рис. 3.12. Блок-схема алгоритма метода хорд

Ниже приводится текст функции VBA, реализующей алгоритм метода хорд.

Public Function Horda(a As Double, b As Double, delta As Double) As Double

Dim С1 As Double, С2 As Double, Fa As Double, Fb As Double, Fс As Double

'Fa = Fsin(alfa, beta, a) --- вычисление значения исследуемой ' функции

Fa = 5 * Sin(a + 0.1) + 0.1 * a ^ 2

33

02.11.2010 / Любимов Е.Б.

Лекция 2

'Fb = Fsin(alfa, beta, b) --- вычисление значения исследуемой

'

функции

Fb = 5 * Sin(b + 0.1) + 0.1 * b ^ 2

If Fa * Fb > 0 Then

 

MsgBox ("Интервал [a, b] выбран неправильно") Exit Function

End If Do

С2 = С1

С1 = a - (b - a) / (Fb - Fa) * Fa

'Fс = Fsin(alfa, beta, С) --- вычисление значения исследуемой ' функции

Fс = 5 * Sin(С1 + 0.1) + 0.1 * С1 ^ 2

If Fс * Fa > 0 Then b = С1 : Fb = Fс Else a = С1 : Fa = Fс Loop Until Abs(С1 – С2) > delta

Horda = С1

End Function

Рис. 3.13. Результаты применения метода хорд для уточнения корня функции

F(x)=5*sin(x+α)-β*x2P P

3.2.5.Метод простых итераций

Витерационных методах, которые иначе называют методами последовательных приближений, многократно повторяется - "итерируется" (от латинского "итерацио" - повторение) некоторый единообразный вычислительный процесс. В результате каждой итерации получаются всё более точные приближения к искомому решению.

Вобщем виде итерационная формула определяется приведением уравнения (3.1) к равносильной форме

Х=φ(X). (3.9)

После записи уравнения (3.1) в виде (3.9) определяется начальное значение Х0B B - "нулевое приближение". Последующие

34

02.11.2010 / Любимов Е.Б.

Лекция 2

приближения вычисляются по формулам Х1B =B φ(X0B ),B Х2B =B φ(X1B ),B …, или в общем виде

ХB =B φ(XB )B .

(3.10)

i+1

i

Возможны два варианта поведения итерационного процесса.

В первом случае итерационный процесс сходится, последовательные приближения ХiB B стремятся к некоторому конечному пределу, который и является решением уравнения (3.1). Во втором варианте процесс расходится, конечного предела приближений не существует. Из расходимости процесса не следует, что решения уравнения (3.1) не существует, а следует только то, что способ построения итерационного процесса выбран неудачно.

Покажем это на простом примере. Сравним две формы

равносильной записи уравнения

X

 

(3.11)

 

X =

 

+1

и

2

 

 

X = 2X - 2

(3.12)

Эти уравнения имеют очевидное решение X=2. Определим начальное значение Х0B B =0 и вычислим последовательные значения ХiB дляB итерационных процессов, определяемых формулами (3.11) и (3.12). Результаты итерационных вычислений по формулам (3.11) и (3.12) приведены на рис. 3.14.

Рис. 3.14. Сравнительная таблица итерационных процессов для двух представлений равносильных уравнений (3.11) и (3.12)

Процесс, определяемый уравнением (3.11) сходится, а процесс (3.12) - расходится.

35

02.11.2010 / Любимов Е.Б.

Лекция 2

В первом случае значения аргумента Х изменяются быстрее, чем

значения функции F(X) (сравниваем значения Xi+1B -B XiB B и F(Xi+1B )B -F(XiB )B в левой части таблицы рис. 3.14). Скорость изменения функции

определяется значением её производной. Сходимость итераций, определяемых процессом (3.10), обеспечивается в тех случаях, когда значения функции φ(X) изменяются медленнее, чем значения аргумента Х. Дифференцируя уравнение (3.9), определим условие

сходимости процесса итераций

(3.13)

| φ'(X) | < | Х' | = 1.

3.2.6. Метод Ньютона (метод касательных)

Итерационный процесс в методе Ньютона определяется исходя

F(X0 +h) =F(X0 ) +

 

h

 

F'(X0 ) +

h2

F"(X0 ) +...

(3.14)

1!

2!

 

 

 

 

из формулы разложения функции F(x) в ряд Тейлора.

Учитывая в этой формуле первые два члена и, предполагая, что значение функции F(x) в точке X0B +hB равно 0, получим

F(X0B )+hF'(XB

0B )B ≈0

(3.15)

Из (3.15) получим значение h:

 

 

 

 

 

h ≈ −

F (X0 )

 

 

 

(3.16)

F '(X0 )

 

 

 

 

 

 

 

 

и далее, положив X1B =XB 0B +hB , получим итерационную формулу

 

X1 = X 0

F (X

0 )

 

(3.17)

 

 

 

 

метода Ньютона.

F '(X 0 )

Рассмотрим графическую иллюстрацию алгоритма метода Ньютона.

Рис. 3.15. Диаграмма алгоритма метода Ньютона

36

02.11.2010 / Любимов Е.Б.

Лекция 2

В методе Ньютона нахождение корня уравнения (3.1) начинается с выбора точки "нулевого приближения" Х0B .B Этот выбор обычно осуществляется на основании анализа графика исследуемого процесса.

Отбрасывая в формуле Тейлора члены второго и более высоких порядков, мы фактически заменяем график функции F(X) касательной к нему в точке X0B .B Проделав аналогичные преобразования с функцией в точке X1B ,B получим значение X2B .B И далее значение X3B B и т.д. Цикл итераций

Xi+1 = Xi

F(Xi1)

 

(3.18)

F '(Xi1)

продолжается до тех пор, пока не будет выполнено условие

 

B B

 

B

B

(3.19)

| Xi

- Xi-1

| < δ.

 

Достаточные условия сходимости итеративного процесса, задаваемого формулой (3.18), к корню уравнения (3.1) определяются следующей теоремой [6]:

Пусть F(X) определена и дважды дифференцируема на интервале [a, b], причём F(a)F(b)<0, а производные F '(x),F"(x) сохраняют знак на отрезке [a, b]. Тогда, исходя из начального приближения х0B B выбранного в пределах интервала [a, b] и удовлетворяющего неравенству F(х0B )F"(B х0B )B >0, можно построить итеративную последовательность (3.18) для i=0, 1, 2,…, сходящуюся к единственному на [a, b] решению ξ уравнения F(x)=0.

Метод Ньютона эффективен, если известно хорошее начальное приближение и в окрестности корня график функции F(X) имеет большую крутизну.

Как показано [6] при выводе формулы (3.18) в методе Ньютона уравнение (3.1) заменяется равносильной формой

 

 

 

 

 

 

F (X )

 

 

 

 

(3.20)

 

 

 

 

X =

X

 

или X =ϕ(X )

 

 

 

 

 

 

F '(X )

 

 

Производная правой части уравнения (3.20)

 

 

 

 

 

 

'

=1

F '(X )F '(X ) F (X )F"(X )

=

F (X )F"(X )

 

X

F (X )

 

(3.21)

 

 

 

 

 

 

F '(X )

2

 

F '(X )

2

 

F '(X )

 

 

 

 

 

 

 

Условие сходимости итерационного процесса при выборе начальной точки х0B B определяется соотношением

F(x0 ) F"(x0 )

 

<1

(3.22)

F'(x0 )2

 

 

37

02.11.2010 / Любимов Е.Б.

Лекция 2

Для проверки условия сходимости метода Ньютона в рассмотренном нами примере, определим первую и вторую производные функции F(x)=5*sin(x+α)-β*x2P .P Проверка условия сходимости итерационного процесса метода Ньютона, выполняемая по формуле (3.22) показывает, что для выделенного интервала [2,00; 2,25] метод Ньютона неприменим.

Рис. 3.16. Проверка возможности применения метода Ньютона для уточнения значения корня функции F(x)=5*sin(x+α)-β*x2P P при выборе начальной точки на границах интервала [2,00; 2,25]

Если изменить границы интервала, в пределах которого находится корень функции F(x)=5*sin(x+α)-β*x2P .P Анализ этого уравнения в диапазоне изменения аргумента Х [-1,0; 1,0] позволяет выделить ещё один подынтервал с одним корнем.

На рис. 3.17 приведена таблица и диаграмма с результатами выделения корня, выполненного для подынтервала изменения аргумента Х [-1,0; 1,0].

В этом подынтервале находится один корень. Применение метода Ньютона для уточнения корня, находящегося в этом интервале, позволяет получить значение корня равное

Рис. 3.17 Таблица и диаграмма с результатами выделения корня при изменении аргумента Х в диапазоне [-1,0; 1,0].

38

02.11.2010 / Любимов Е.Б.

Лекция 2

Рис. 3.18. Нахождение корня методом Ньютона

VBA функции, реализующие метод Ньютона

Запишем функции, реализующие вычисления значений F(x), F'(x) и F"(x).

Public Function Fsin(alfa As Double, beta As Double, x As Double) As Double

Fsin = 5 * Sin(x + alfa) - beta * x ^ 2 End Function

Public Function Fsin1(alfa As Double, beta As Double, x As Double) As Double

Fsin1 = 5 * Cos(x + alfa) - 2 * beta * x End Function

Public Function Fsin2(alfa As Double, beta As Double, x As Double) As Double

Fsin = -5 * Sin(x + alfa) - beta End Function

39

02.11.2010 / Любимов Е.Б.