Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_1_05_ВНУ.doc
Скачиваний:
4
Добавлен:
08.09.2019
Размер:
2 Мб
Скачать
☆

Метод хорд

Методом хорд (його ще називають методом лінійного інтерполювання) нове значення х знаходять як абсцису точки перетину хорди, що проходить через точки

(u; f (u)), (v; f (v)), з віссю Ox. При цьому f(u) f(v) < 0.

Рівняння згаданої хорди матиме вигляд:

Звідси знаходимо абсцису точки перетину хорди з віссю Ох (рівняння якої у = 0):

Я кщо f(х) f(и) > 0, то корінь міститься на проміжку [х; v], тому щойно знайдений х беремо за нове значення лівого кінця проміжку, на якому міститься корінь. Якщо f(х) f(и) < 0, то корінь міститься на проміжку [u; х], тому х беремо за нове значення правого кінця проміжку, на якому міститься корінь. Якщо f(х)=0 або задовольняється умова

то можна вважати, що х - наближення кореня х* з точністю до , інакше для визначення нових и і v повторюємо обчислення.

Приклад.

Методом хорд знайти з точністю до 0,00005 корінь рівняння x3+1,76439x2+2,21584x – 3,31344 = 0, що лежить на проміжку [0;1].

Розв’язання.

Аналізуючи метод хорд з математичної точки зору, ми можемо однозначно сказати, що кожне наступне наближення все ближче і ближче доходить до реального кореня х*. Причому кожне наступне значення x-u буде меншим ніж попереднє. Отже, умовою припинення циклу можна вважати той момент, коли x-u стане меншим за необхідну точність визначення кореня. Один з варіантів програми реалізації поставленої задачі може виглядати так:

program horda;

const e = 0.00005;

var a, b, x, d, y1, у2: real;

begin

writeln (’ввести значення кінців проміжка локалізації кореня’);

readln (a, b);

repeat

y1:=a*a*a+1.76439*a*a+2.21584*a – 3.31344;

y2:=b*b*b+1.76439*b*b+2.21584*b – 3.31344;

x:=a-(b-a)/(y2-y1)*y1;

d:=x-a; a:=x;

until d >= e;

writeln (‘x*=’,x,’+-e’);

end.

Результатом розв’язку даної задачі буде х*=0,78543  0,00005;

Метод дотичних

Нехай функція f(x) двічі неперервно диференційовна на проміжку [a,b], причому перша і друга похідні не дорівнюють нулеві і зберігають знак на цьому проміжку, а f(a)f(b)<0,

За методом дотичних (методом Ньютона) наближене значення кореня х знаходять як абсцису точки перетину дотичної до кривої y=f(x) в одній з точок (u; f (u)) чи (v; f(v)) з віссю Ох. При цьому змінна х наближається до кореня лише з одного боку. Оцінку близькості х до кореня х*, як і раніше, можна знайти за формулою

П ершу дотичну треба проводити в тій точці (u; f(u)) або (v; f(v)), для якої виконується умова:

f(u)f(u)>0 чи f(v)f(v)>0.

Нехай дотична проводиться в точці (v; f(v)). Тоді рівняння дотичної в цій точці матиме вигляд:

y – f(v) = f(v)(x-v).

Звідси знаходимо точку перетину дотичної з віссю Ох:

Якщо значення v вважати за початкове (нульове, позначимо його через х0) наближення до кореня х*, то значення х, знайдене за останньою формулою, вважатимемо новим наближенням (першим, позначимо його х1). Значення х1 можна уточнити, а саме: наступне наближення до кореня х* знову визначити як точку перетину дотичної до кривої у = f (x), проведеної в точці (х1; f (х1)), з віссю абсцис. Отже, за методом Ньютона кожне наступне наближення до кореня х* знаходять за формулою

(k = 0, 1, 2, 3, …).

Приклад.

Методом дотичних знайти з точністю до 0,00005 корінь рівняння x3+1,76439x2+2,21584x – 3,31344 = 0, що лежить на проміжку [0;1].

Розв’язання.

f(x)=3x2+3,52878x+2,2158;

f(x)=6x+3,52878;

f(x)>0 i f(x)>0 при довільних х є [0;1].

Один з варіантів програми реалізації поставленої задачі може виглядати так:

program horda;

const e = 0,00005;

var b, x, d, y, у1: real;

begin

writeln (’ввести значення одного з кінців проміжка локалізації кореня’);

readln (b);

repeat

y:=b*b*b+1.76439*b*b+2.21584*b – 3,31344;

y1:=3*b*b+3.52878*b+2.21584;

x:=b-y/y1;

d:=x-b; b:=x;

until d >= e;

writeln (‘x*=’,x,’+-e’);

end.

Результатом розв’язку даної задачі буде х*=0,78544  0,00005;