Рішення одного нелінійного рівняння

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Реферат
на тему:
Рішення одного нелінійного рівняння

Введення

Дана лабораторна робота включає в себе чотири методи рішення одного нелінійного рівняння.
Використовуються методи рішення одного нелінійного рівняння:
Метод половинного поділу.
Метод простої ітерації.
Метод Ньютона.
Метод січних.
Також дана лабораторна робота включає в себе: опис методу, застосування методу для конкретної задачі (аналіз), код програми вирішення перерахованих вище методів на мові програмування Microsoft Visual C + + 6.0.
Опис методу:
Нехай задана функція f (x) дійсної змінної. Потрібно знайти корені рівняння f (x) = 0 (1) або нулі функції f (x).
Нулі f (x) можуть бути як дійсними, так і комплексними. Тому найбільш точна завдання полягає в знаходженні коренів рівняння (1), розташованих в заданій області комплексної площини. Можна розглядати також задачу знаходження дійсних коренів, розташованих на заданому відрізку.
Задача знаходження коренів рівняння (1) зазвичай вирішується в 2 етапи. На першому етапі вивчається розташування коренів і проводиться їх поділ, тобто виділяються області в комплексній області, що містять тільки один корінь. Тим самим знаходяться деякі початкові наближення для коренів рівняння (1). На другому етапі, використовуючи заданий початкове наближення, будується ітераційний процес, що дозволяє уточнити значення відшукуваного кореня.
Чисельні методи рішення нелінійних рівнянь є, як правило, ітераційними методами, які передбачають завдання досить близьких до шуканого рішенням початкових даних.
Існує безліч методів вирішення даної проблеми. Але ми розглянемо найбільш використовувані методи рішення з пошуку коренів рівняння (1): метод половинного ділення (метод бисекции), метод дотичних (метод Ньютона), метод січних і метод простої ітерації.
Тепер окремо по кожному методу:

1. Метод половинного ділення (метод бисекции)

Більш поширеним методом знаходження коренів нелінійного рівняння є метод ділення навпіл. Припустимо, що на інтервалі [a, b] розташований лише один корінь x рівняння (1). Тоді f (a) і f (b) мають різні знаки. Нехай для визначення f (a)> 0, f (b) <0. Покладемо x0 = (a + b) / 2 і обчислимо f (x0). Якщо f (x0) <0, то шуканий корінь знаходиться на інтервалі [a, x0], якщо ж f (x0)> 0, то x належить [x0, b]. Далі з двох інтервалів [a, x0] і [x0, b] вибираємо той на кордонах, якого функція f (x) має різні знаки, знаходимо точку x1 - середину обраного інтервалу, обчислюємо f (x1) і повторюємо зазначений процес. У результаті отримуємо послідовність інтервалів, що містять шуканий корінь x, причому довжина кожного наступного інтервалу вдвічі менше, ніж попереднього. Процес закінчується, коли довжина знову отриманого інтервалу стане менше наближеною точності ( > 0), і в якості кореня x, наближеного приймається середина цього інтервалу.

2. Метод дотичних (метод Ньютона)

Нехай початкове наближення x0 відомо. Замінимо f (x) відрізком ряду Тейлора
f (x) ≈ H1 (x) = f (x0) + (x - x0) f '(x0) і за наступне наближення x1 візьмемо корінь рівняння H1 (x) = 0, тобто x1 = x0 - f (x0) / f '(x0).
Взагалі, якщо ітерація xk відома, то наступне наближення xk +1 в методі Ньютона визначається за правилом xk +1 = xk-f (xk) / f '(xk), k = 0, 1, ... (2)
Метод Ньютона називають також методом дотичних, так як нове наближення xk +1 є абсцисою точки перетину дотичної, проведеної в точці (xk, f (xk)) до графіка функції f (x) з віссю Ox.
Особливість методу:
по-перше, метод має квадратичну збіжність, тобто на відміну від лінійних задач похибка на наступній ітерації пропорційна квадрату похибки на попередній ітерації: xk +1- x = O ((xk-x) І);
по-друге, така швидка збіжність методу Ньютона гарантується лише при дуже хороших, тобто близьких до точного розв'язання, початкових наближеннях. Якщо початкове наближення вибрано невдало, то метод може сходитися повільно, або не зійдеться взагалі.

3. Метод січних

Цей метод виходить з методу Ньютона заміною f '(xk) розділеної різницею f (xk) - f (xk-1) / xk-xk-1, обчисленої за відомими значеннями xk і xk-1. У результаті отримуємо ітераційний метод , K = 1, 2, ... (3), який на відміну від раніше розглянутих методів є двокрокова, тобто нове наближення xk +1 визначається двома попередніми итерациями xk і xk-1. У методі необхідно ставити два початкових наближення x0 і x1.
Геометрична інтерпретація методу січних полягає в наступному. Через точки (xk-1, f (xk-1)), (xk, f (xk)) проводиться пряма, абсциса точки перетину цієї прямої з віссю Ox і є новим наближенням xk +1. Інакше кажучи, на відрізку [xk-1, xk] функція f (x) інтерполюється многочленом першого ступеня і за чергове наближення xk +1 приймається корінь цього многочлена.

4. Метод простої ітерації

Цей метод полягає в заміні рівняння (1) еквівалентним йому рівнянням виду (4) після цього будується ітераційний процес (5). При деякому заданому значенні для приведення вираження (1) до необхідного вигляду (4) можна скористатися простим прийомом
, .
Якщо у виразі (4) покласти , Можна отримати стандартний вигляд ітераційного процесу для пошуку коренів нелінійного рівняння:
.
Інакше можна отримати рівняння (4) наступним способом: ліву і праву частину рівняння (1) помножити на довільну константу  і додати до лівої і правої частини х, тобто отримуємо рівняння виду: (6), де .
На заданому відрізку [a; b] виберемо точку х 0 - нульове наближення - і знайдемо: х 1 = f (x 0), потім знайдемо: х 2 = f (x 1), і т.д. Таким чином, процес знаходження кореня рівняння зводиться до послідовного обчислення чисел: х n = f (x n-1) n = 1,2,3 ... Якщо на відрізку [a; b] виконана умова: | f '(x) | < = q <1 то процес ітерацій сходиться, тобто . Процес ітерацій продовжується до тих пір, поки | x n - x n-1 | <= , де  - задана похибка кореня х. При цьому буде виконуватися: .
Застосування методу до конкретного завдання (аналіз).
Дано рівняння виду XIX - ln (1 + x) - 3 = 0 при x [2,3]. Завдання полягає в тому, щоб вирішити це нелінійне рівняння 4 відомими способами: метод половинного ділення, метод дотичних, метод січних і метод простої ітерації.
Вивчивши методи і застосувавши їх до даного рівняння приходимо до такого висновку: при вирішенні даного рівняння 4 відомими способами результат однаковий у всіх випадках. Але кількість ітерацій при проходженні методу значно відрізняється. Задамо наближену точність = . Якщо у випадку половинного поділу кількість ітерацій становлять 20, при методі простих ітерацій дорівнює 6, при методі січних вони становлять 5, а при методі дотичних їх кількість дорівнює 4. З отриманого результату видно, що більш ефективним методом є метод дотичних. У свою чергу метод половинного поділу є більш неефективним, витрачає більше часу на виконання, але є найпростішим з усіх перерахованих методів при виконанні. Але не завжди результат буде таким. Підставляючи інші нелінійні рівняння в програму, в результаті виходить, що при методі простої ітерації при різних видах рівнянь кількість ітерацій коливається. Кількість ітерацій може бути значно більше, ніж у методі половинного ділення і менше, ніж у методі дотичних.
Лістинг програми:
1. Метод половинного поділу
# Include <stdio. h>
# Include <math. h>
# Include <conio. h>
# Define e 0.000001
double func (double x)
{
return ((((x * x) - (log (1 + x))) - 3));
}
void main ()
{
FILE * res;
res = fopen ("bisekciy. txt", "w");
int x1, x2;
double x;
int k;
k = 0;
x1 = 2;
x2 = 3;
x = 0;
double a, b, c;
a = x1;
b = x2;
while (fabs (ab)> e)
{
c = (a + b) / 2;
if ((func (c) * func (a)) <0) b = c;
else a = c;
k + +;
}
printf ("Funkciya prinimaet znachenie na intervale: [% d,% d] \ n", x1, x2);
printf ("Otvet:% f \ n", a);
printf ("Kol-vo iteraciy:% d \ n", k);
printf ("Takge smotri otvet v file bisekciy. txt \ n");
fprintf (res, "Результат рішення рівняння методом половинного поділу! \ n");
fprintf (res, "Корінь рівняння x =% f \ nКолічество ітерацій =% d", a, k);
fclose (res);
getch ();
}
2. Метод дотичних (метод Ньютона)
# Include <stdio. h>
# Include <math. h>
# Include <conio. h>
# Define e 0.000001
double func (double x)
{
return ((((x * x) - (log (1 + x))) - 3));
}
double dif (double x)
{
return ((2 * x) - (1 / (1 + x)));
}
void main ()
{
FILE * res;
res = fopen ("kasatelnih. txt", "w");
int x1, x2, k;
double a, b;
x1 = 2;
x2 = 3;
k = 0;
a = x1;
b = x2;
while (fabs (ab)> = e)
{
a = a-func (a) / dif (a);
b = b-func (b) / dif (b);
k + +;
}
printf ("Funkciya prinimaet znachenie na intervale: [% d,% d] \ n", x1, x2);
printf ("Otvet:% f \ n", a);
printf ("Kol-vo iteraciy:% d \ n", k);
printf ("Takge smotri otvet v file kasatelnih. txt \ n");
fprintf (res, "Результат рішення рівняння методом Ньютона! \ n");
fprintf (res, "Корінь рівняння x =% f \ nКолічество ітерацій =% d", a, k);
fclose (res);
getch ();
}
3. Метод січних
# Include <stdio. h>
# Include <math. h>
# Include <conio. h>
# Define e 0.000001
double func (double x)
{
return ((((x * x) - (log (1 + x))) - 3));
}
void main ()
{
FILE * res;
res = fopen ("sekushih. txt", "w");
int k = 0, x1 = 2, x2 = 3;
double a, b, c;
a = x1;
b = x2;
while (fabs (ab)> e)
{
c = (a * func (b) - b * func (a)) / (func (b) - func (a));
a = b;
b = c;
k + +;
}
printf ("Funkciya prinimaet znachenie na intervale: [% d,% d] \ n", x1, x2);
printf ("Otvet:% f \ n", a);
printf ("Kol-vo iteraciy:% d \ n", k);
printf ("Takge smotri otvet v file sekushih. txt \ n");
fprintf (res, "Результат рішення рівняння методом січних! \ n");
fprintf (res, "Корінь рівняння x =% f \ nКолічество ітерацій =% d", a, k);
fclose (res);
getch ();
}
4. Метод простої ітерації
# Include <stdio. h>
# Include <math. h>
# Include <conio. h>
# Define e 0.000001
double func (double x)
{
return ((((x * x) - (log (1 + x))) - 3));
}
double x_vir (double x)
{
return (sqrt (log (1 + x) + 3));
}
void main ()
{
FILE * res;
res = fopen ("itteraciy. txt", "w");
int x1, x2, k;
double x;
k = 0;
x1 = 2;
x2 = 3;
x = 0;
double a, b, c;
a = x1;
b = x2;
while (fabs (ab)> e)
{
b = x_vir (a);
c = b;
b = a;
a = c;
k + +;
}
printf ("Funkciya prinimaet znachenie na intervale: [% d,% d] \ n", x1, x2);
printf ("Otvet:% f \ n", a);
printf ("Kol-vo iteraciy:% d \ n", k);
printf ("Takge smotri otvet v file itteraciy. txt \ n");
fprintf (res, "Результат рішення рівняння методом простої ітерації! \ n");
fprintf (res, "Корінь рівняння x =% f \ nКолічество ітерацій =% d", a, k);
fclose (res);
}
Результати розрахунку:
На інтервалі x [2,3] функції XIX - ln (1 + x) - 3 = 0 корінь рівняння x = 2.026689. Кількість ітерацій при наближеною точності = в методі половинного поділу становить 20, в методі дотичних становить 4, у методі січних становить 5 і в методі простих ітерацій становить 6.
Додати в блог або на сайт

Цей текст може містити помилки.

Математика | Реферат
23кб. | скачати


Схожі роботи:
Знаходження кореня нелінійного рівняння Методи рішення системи нелінійних рівнянь
Рішення алгебраїчного рівняння n-го ступеня
Рішення диференціального рівняння першого порядку
Хвильове рівняння немає єдиного рішення
Рішення до Збірника завдань з вищої математики Кузнєцова Л.А. - 5 Диференціальні рівняння
Квадратні рівняння та рівняння вищих порядків
Задачі нелінійного програмування
Блок посилення потужності нелінійного локатора
Методи і аналіз нелінійного режиму роботи системи ПАП Метод фазової площини
© Усі права захищені
написати до нас