леном першого ступеня і за чергове наближення 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 | <= пЃҐ, де пЃҐ - задана абсолютна похибка кореня х. При цьому буде виконуватися: . p> Застосування методу до конкретного завдання (аналіз).
Дано рівняння виду x ВІ - ln (1 + x) - 3 = 0 при x [2,3]. Завдання полягає в тому, щоб вирішити це нелінійне рівняння 4 відомими способами: метод половинного поділу, метод дотичних, метод січних і метод простої ітерації.
Вивчивши методи і застосувавши їх до даного рівняння приходимо до Такого висновку: при вирішенні даного рівняння 4 відомими способами результат однаковий у всіх випадках. Але кількість ітерацій при проходженні методу значно відрізняється. Задамо наближену точність = . Якщо у випадку половинного ділення кількість ітерацій становлять 20, при методі простих ітерацій дорівнює 6, при методі січних вони становлять 5, а при методі дотичних їх кількість дорівнює 4. З отриманого результату видно, що більш ефективним методом є метод дотичних. У свою чергу метод половинного поділу є більш неефективним, витрачає більше часу на виконання, але є самим простим з усіх перерахованих методів при виконанні. Але не завжди результат буде таким. Підставляючи інші нелінійні рівняння в програму, в результаті виходить, що при методі простої ітерації при різних видах рівнянь кількість ітерацій коливається. Кількість ітерацій може бути значно більше, ніж у методі половинного ділення і менше, ніж в методі дотичних.
Лістинг програми:
1. Метод половинного поділу
# include
# include
# include
# 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 (a-b)> 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
# include
# include
# 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 (a-b)> = 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, "Корі...