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

ЧМ В ИНЖЕНЕРНЫХ РАСЧЁТАХ(часть 1)_v1

.pdf
Скачиваний:
41
Добавлен:
05.06.2015
Размер:
2.72 Mб
Скачать

Метод Ньютона обладает только локальной сходимостью, т.е. областью его сходимостью является некоторая малая σ-окрестности корня и для гарантии сходимости необходимо вбирать хорошее начальное приближение, попадающее в эту σ-окрестность. Неудачный выбор начального приближения может дать расходящуюся последовательность итераций, например, представленную на рисунке

1.10.

y

 

 

 

 

 

y=f(x)

 

f(x1)

 

 

 

 

 

x0=a

b

 

 

 

f

f '(x0)

x1

x2

x

 

 

Рисунок 1.10 – Метод Ньютона расходится при неправильном выборе x0

Если вычисление первой производной функции на каждом шаге требует больших вычислительных затрат, можно использовать модифицированный метод Ньютона. Суть его заключается в том, что значение производной вычисляется один раз в начальной точке x(0) и это фиксированное значение подставляется в формулу (1.9):

xn 1

xn

 

f (xn )

(1.9)

f

 

 

 

 

(x0 )

 

Геометрическая интерпретация модифицированного метода Ньютона представлена на рисунке 1.11. В отличие от обычного метода касательных, в модифицированном методе предъявляется меньше требований к выбору начального приближения, а так же гарантировано отсутствие деления на ноль, если . Однако, модифицированный метод имеет один существенный недостаток – резкое падение скорости сходимости.

21

y

 

f(x0)

 

 

 

f '(x0)

f '(x0)

 

 

0

 

 

 

x1

x

Рисунок 1.11 – Модифицированный метод Ньютона

Формула (1.9) совпадает с формулой метода простых итераций, если определить

= − ()) = − ( ),

где μ – значение абсциссы в некоторой точке отрезка локализации корня с максимальным значением первой производной функции f(x) на отрезке локализации корня.

Как уже показано, этот процесс сходится, если (x) 1 в интервале, в котором находится один корень уравнения f (x) 0, т.е.

´ =

1 − < 1

Значение λ следует принимать:

=

(

 

)

(1.10)

max

 

 

где ( ) – знак первой производной f(x) на интервале локализации корня [a,b];

max ( ) – максимальное значение первой производной f(x) на интервале локализации корня [a,b].

1.4 Метод деления отрезка пополам

Метод обеспечивает нахождение единственного корня в интервале локализации х[a,b] с заданной точностью >0. Наличие корня

22

уравнения на интервале [a,b] (или нечетного числа корней) предполагает, что на границах интервала функция f(x) имеет разные знаки, т.е. f(a)·f(b)<0. Метод уточняет (сужает) границы интервала, где распо-

ложен корень. В дальнейшем интервал [a,b] будет обозначаться с указанием номера итерации - [a(0),b(0)].

В методе деления интервала пополам (методе бисекций) отрезок

локализации корня делится пополам (0) = (0)+ (0). Перемещая одну

2

из границ в точку x(0) уменьшаем отрезок локализации в два раза, т. е. заменяем начальный отрезок [a(0),b(0)] отрезком [a(1),b(1)] меньшей

длины. В методе бисекций в качестве [a(1),b(1)] берут тот из отрезков [a(0),x(0)] и [x(0),b(0)] на концах которого выполняется условие

f(a(1))·f(b(1))≤0. Этот отрезок содержит искомый корень. Если данное произведение равно нулю, то корнем уравнения является одна из гра-

ниц. Неограниченное продолжение итерационного процесса дает последовательность отрезков [a(0),b(0)], [a(1),b(1)], … , [a(n),b(n)], содержа-

щих искомый корень. Каждый из них, за исключением начального, получен делением пополам предыдущего отрезка.

При повторении процедуры деления, длина отрезка становится настолько малой (меньше заданной допустимой погрешности в определении корня), что можно приближенно за значение корня принять абсциссу любой точки отрезка [a(n),b(n)]. Считая, что (b a) является

абсолютной погрешностью, а (b a) / a - относительной погрешно-

стью вычислений корня уравнений, мы получаем возможность гарантированно выбирать значение корня с недостатком (принимая x a ) или с избытком (принимая x b). Обычно за корень уравнения принимают значение x(n).

23

y

 

 

 

 

 

шаг 1

 

 

 

 

 

 

x(1)

 

 

 

 

a(0)

 

 

b

(0)

x

 

 

 

 

 

 

 

y

 

x(2)

шаг 2

 

 

 

 

 

a(1)

 

 

b(1)=b(0)

x

 

 

 

y

x(3)

 

шаг 3

 

a(2)=a(1)

 

b(2)

 

 

x

 

 

 

 

Рисунок 1.12 – Метод деления отрезка пополам

 

Пример 1.1

Используя графический способ отделения корней определить ин-

тервалы локализации корней уравнения sin x cos x 3x 0.

Данную задачу можно решить, используя электронную таблицу Excel и пакет Matlab. На рисунке 1.13 показан фрагмент электронной таблицы Excel (в режиме отображения функций) с графиком функции.

Для получения графика данной функции в пакете MATLAB, показанного на рисунке 1.14, необходимо выполнить следующую цепочку команд:

f=inline('sin(x)-cos(x)-x/3') figure;

fplot(f,[-3 3]); grid;

24

Рисунок 1.13 – Вид таблицы Excel с графиком функции sin x cos x 3x 0

Рисунок 1.14 – График функции sin x cos x 3x 0 построенный в пакете Matlab

25

Анализ графиков показывает три отрезка локализации корней:

[-2;-1], [0,5;1,5], [3;3,5].

Пример 1.2

Используя встроенную функцию fzero пакета MATLAB, найти корни уравнения f(x)=0. В квадратных скобках задаются левая и правая границы интервала, на котором расположен корень. Протокол работы в пакете Matlab представлен ниже.

»[x]=fzero(f,[-3 1]) x =

-1.8936

»[x]=fzero(f,[1 2]) x =

1.0308

Пример 1.3

Используя

процедуру на VBA, найти два корня уравнения

sin x cos x

x

0 с точностью =0.0001.

 

3

 

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

Для реализации метода простых итераций необходимо преобразовать исходное уравнение к виду x (x) . Очевидно, что простейшее преобразование уравнения x=3·(sin(x)-cos(x)) (производная = 3 · + ) не отвечает условию сходимости метода итераций. Поэтому, используем преобразование x x f (x), откуда

(x) x f (x) .

 

Значение

λ

выбираем

из

условия

сходимости

 

 

 

 

 

1

f

 

 

1,

т.е.

 

 

 

 

 

1

 

решая нера-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(x)

 

 

(x)

 

 

(x)

 

 

|1+ (cosx+sinx-3)|<1,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

венство получим

26

 

 

 

 

 

 

 

 

 

 

 

−2

 

 

 

 

 

 

 

 

 

 

 

 

 

< <0

(1.11)

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

cos + −

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

Для поиска корня в интервале [0,5;1,5], выбираем начальное при-

ближение x =

 

≈ 1,05 и подставляем его в формулу (1.11). Получа-

3

 

 

 

−2

 

 

 

 

 

 

ем

 

 

 

< <0 или -1,94< <0. Для вычисления

корня методом

 

 

 

 

 

 

 

1

 

3

 

1

 

 

 

 

 

 

 

 

 

 

 

 

+

 

 

 

 

 

 

 

 

 

2

2

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

итераций назначим значение =-1,3, которое лежит на отрезке [-1,94 ; 0].

Для корня, лежащего на отрезке [-2;-1], выберем начальное приближение x =-2, Так как производная f '(-2) отрицательная получим 0 < < 1,662 или 0< <1,2. Для расчета можно назначить значение

= 0,9. Ниже приведен текст макроса на языке VBA вычисления корня уравнения лежащего на отрезке [0,5;1,5] методом простой итерации. В программе комментарием (оператором «REM») помечены строки, которые следует изменить для поиска корня на отрезке [-2; -1]. Оператором «Rem Ньютон» помечены строки, которые следует использовать, для вычисления корней методом Ньютона.

Sub main_Iter()

Dim a As Single, b As Single, delta As Single Dim x1 As Single, k1 As Integer

delta = 0.0001 ' заданная точность вычисления

x1 = 1.05 ' начальное приближения для вычисления ' корня в интервале [0,5; 1]

REM x1 = -2.0 ' начальное приближения для вычисления ' корня в интервале [-2; -1]

Call iter_1(delta, 100, x1, k1, 1)

Debug.Print "Ответ: Метод итераций x1="; x1, "k1="; k1

End Sub

Function fi(x) ' функция для вычисления итерационной формулы fi = x - 1.3*(Sin(x) - Cos(x) - x / 3) ' для корня на отрезке [0,5;1,5]

Rem fi = x + 0.9 *(Sin(x) - . . . для корня на отрезке [-2;-1] 27

Rem Ньютон fi = x - (Sin(x) - Cos(x) - x / 3)/(Cos(x)+Sin(x) 1/3)

End Function

Sub iter_1(Delta As Single, limit As Integer, _

x As Single, n As Integer, Optional KP As Integer = -1)

n = 0

Debug.Print " Метод итераций x= "; x

Do

x1 = fi(x)

If Abs(x - x1) < Delta Then Exit Sub

If KP>=0 Then Debug.Print "n="; n," x1="; x1, "Delta=";Abs(x-x1) x = x1

n = n + 1

If n >= limit Then

Debug.Print "Превышено число итераций"

Exit Sub End If

Loop End Sub

Результаты расчета макроса:

Метод итераций x= 1,05

 

 

n= 0

x1= 1,0241921981691

Delta= 2,58077541471815E-02

n= 1

x1= 1,03315175987991

Delta= 8,95954586776093E-03

n= 2

x1= 1,03000694509424

Delta= 3,14480070196588E-03

n= 3

x1= 1,03110673303375

Delta= 1,09984750518666E-03

n= 4

x1= 1,03072159268933

Delta= 3,851177446339E-04

n= 5

x1= 1,03085640517607

Delta= 1,34859956651301E-04

Метод итераций

x1=

1,030856 k1=

6

28

Вычисление наименьшего корня методом деления отрезка пополам с относительной погрешностью, не превышающей Eps=0.0005, и с включѐнной вспомогательной печатью (KP=1):

Sub MainDOP() ' с хранением x, f в ячейках A1, B1 с именами "x", "f" ActiveWorkbook.Names.Add Name:="x", RefersToR1C1:="=Лист1!R1C1" ActiveWorkbook.Names.Add Name:="f", RefersToR1C1:="=Лист1!R1C2" Range("f") = "=SIN(x)-COS(x)-x/3" ' формулу в ячейку с именем «f» Debug.Print DOP("f", "x", -3, -1, Eps:=0.0005, KP:=1) , Range("x")

End Sub

Iter= 1

X=-2

Iter= 2

X=-1,5

Iter= 3

X=-1,75

Iter= 4

X=-1,875

Iter= 5

X=-1,9375

Iter= 6

X=-1,90625

Iter= 7

X=-1,890625

Iter= 8

X=-1,8984375

Iter= 9

X=-1,89453125

Iter= 10

X=-1,892578125

Iter= 11

X=-1,8935546875

True -1,8935546875

Интерфейс функции DOP (см. литературу [5]) представлен ниже:

Function DOP(Fch As String, Xch As String, a As Double, b As Double, _ Optional Eps As Double = 0.0001, Optional KP As Integer = -1, _

Optional Iter As Integer) As Boolean

' Fch, Xch - имена ячеек с функцией и аргументом,

'a, b - левая и правая границы отрезка, содержащего корень,

'Eps - относительная погрешность корня |X* - X|/max(|a|,|b|)<Eps,

'KP - код вспомогательной печати: KP<0 - нет вывода,

'

KP>=0 - вывод в окно отладки,

'

Iter - число выполненных приближений (выходной параметр).

29

Пример 1.4

Используя электронные таблицы Excel, найти корень уравнения sin x cos x 3x 0 с точностью =0.0001 методом простых итераций и методом касательных.

Решение данной задачи средствами Excel может быть выполнено:

с использованием циклических ссылок;

­с помощью специальных средств Excel – «подбор параметра», либо «поиск решения»;

­с использованием стандартных возможностей Excel.

Использование в Excel циклических ссылок для решения нелинейных уравнений является достаточно экзотической возможностью и, при желании, можно найти соответствующую статью в Интернет. Работа по подбору параметра и поиску решения описано в справке Excel, поэтому рассматривать этот способ не будем.

Вариант решения выше приведенного уравнения методом итераций представлен на рисунке 1.15. Значение параметра λ задается в ячейке D1 и используется в формуле ячейки В3 в абсолютной адресации. Диапазон ячеек A3:C3, с помощью маркера «Автозаполнения», затем «протягивается» вниз до тех пор, пока число с столбце «С» не станет меньше 0.0001.

Рисунок 1.15 – Фрагмент таблицы Excel реализующий метод простой итерации для решения уравнения sin x cos x 3x 0

На рисунках 1.16 и 1.17, в режиме отображения значений, представлены фрагменты таблицы Excel для нахождения двух корней

уравнения sin x cos x 3x 0 .

30