Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КМСхКТ_мет_2012.doc
Скачиваний:
11
Добавлен:
19.11.2019
Размер:
1.81 Mб
Скачать

2.2.Метод хорд

Метод хорд ґрунтується на лінійній інтерполяції досліджувальної функції, для якої легко розрахувати її точку перетину з віссю ОХ. Нехай корінь функції знаходиться на інтервалі [a, b].

Рівняння прямої, що проходить через точки функції на межах інтервала

.

Або враховуючи, що для кореня у=0

.

Таким чином, наближення кореня – точка перетину прямої з віссю - може бути знайдено за формулою

.

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

Алгоритм пошуку кореня нелінійного рівняння за методом хорд грунтується на виконанні наступних кроків:

  1. покласти k=1;

  2. розрахувати поточне значення аргумента за формулою

с(k)= а-(b-a)/[f(b)-f(a)]*f(a);

  1. якщо f(a)f(с)>0, то покласти a=с, інакше b=с;

  2. якщо с(k)(k-1)>, то покласти k=k+1 та перейти до п.2;

  3. вивести результат та закінчити розрахунки.

Задача 2.2. Методом хорд знайти корінь функції f(х)= х2-1 на інтервалі [0,3] для  = 0,1.

Розвязок. Значення f(a)f(b)= (-1)8<0, що свідчить про існування кореня на інтервалі [0, 3]. Результати розвязання задачі відповідно до описаного алгоритму методу хорд наведені в таблиці.

k

a

b

f(a)

f(b)

с

f(c)

f(a) f(c)

відкинути

1

0

3

-1

8

1/3

-0.89

>0

a

2

1/3

3

-0.89

8

0.6

-0.64

>0

a

3

0.6

3

-0.64

8

0.78

-0.39

>0

a

4

0.78

3

-0.39

8

0.88

-0.22

>0

a

5

0.88

3

-0.22

8

0.94

-0.12

>0

a

Таким чином, за 5 ітерацій знайдено чергове наближення до кореня Хм= 0.94 функції, при цьому значення функції f = – 0.12.

Наведена нижче програма Root_Hord реалізує метод хорд для пошуку кореня функції f(х)= х2-1 на інтервалі [0, 3] з точністю  = 0,001.

Program Root_Hord; { метод хорд }

Uses CRT;

const e= 0.001; { критерiй зупину }

k: integer= 0; { номер iтерацii }

ko:integer=0; { кiлькiсть розрахункiв функцii }

a:real=0; { лiва межа iнтервалу з коренем }

b:real=3; { права межа iнтервалу з коренем }

Var x, xo, { поточне та попереднс значення кореня }

fa, fb, fx, { значення функцii у вiдповiдних точках}

dx: real; { величина уточнення кореня }

Function F(x:real):real;

Begin

F:=x*x-1

End;

BEGin

ClrScr;

writeln(' Пошук кореня нелiнiйного рiвняння методом хорд');

writeln(' Значення критерiю зупину: ',e:5:3);

xo:=a;

fa:=f(a); fb:=f(b);

writeln(' k a b fa fb x fx dx');

write(k:2, a:9:4,b:9:4,fa:11:6, fb:11:6);

repeat

x:=a-(b-a)/(fb-fa)*fa;

fx:=f(x);

dx:=abs(xo-x); xo:=x;

writeln(x:9:4,fx:11:6, dx:9:4);

if fa*fx>0 then

begin a:=x; fa:=fx

end else

begin b:=x; fb:=fx

end;

inc(k);

write(k:2, a:9:4,b:9:4,fa:11:6, fb:11:6);

until dx<e;

writeln; writeln;

writeln('Xm=',x:6:4,' f(Xm)=',f(x):10:6);

write('Натисни "Enter": '); readln

END.

Результат виконання програми Root_Hord:

Пошук кореня нелiнiйного рiвняння методом хорд

Значення критерiю зупину: 0.001

k a b fa fb x fx dx

0 0.0000 3.0000 -1.000000 8.000000 0.3333 -0.888889 0.3333

1 0.3333 3.0000 -0.888889 8.000000 0.6000 -0.640000 0.2667

2 0.6000 3.0000 -0.640000 8.000000 0.7778 -0.395062 0.1778

3 0.7778 3.0000 -0.395062 8.000000 0.8824 -0.221453 0.1046

4 0.8824 3.0000 -0.221453 8.000000 0.9394 -0.117539 0.0570

5 0.9394 3.0000 -0.117539 8.000000 0.9692 -0.060592 0.0298

6 0.9692 3.0000 -0.060592 8.000000 0.9845 -0.030767 0.0153

7 0.9845 3.0000 -0.030767 8.000000 0.9922 -0.015504 0.0077

8 0.9922 3.0000 -0.015504 8.000000 0.9961 -0.007782 0.0039

9 0.9961 3.0000 -0.007782 8.000000 0.9980 -0.003899 0.0019

10 0.9980 3.0000 -0.003899 8.000000 0.9990 -0.001951 0.0010

11 0.9990 3.0000 -0.001951 8.000000

Розрахункiв функцii 13. Xm=0.9990 f(Xm)= -0.001951

Натисни "Enter":

Таким чином, корінь Xm=0.999 функції з точністю 0.001 знайдено за 11 ітерацій, що потребує 13 розрахунків функції. Для поточної задачі метод забезпечив лінійний збіг до кореня з коефіцієнтом .