Міністерство освіти і науки України
Національний університет „Львівська політехніка”
ІКТА ,кафедра «Захист інформації»
Звіт
З ЛАБОРАТОРНОЇ РОБОТИ № 1
З КУРСУ “ КОМП’ЮТЕРНІ МЕТОДИ ДОСЛІДЖЕННЯ ІНФОРМАЦІЙНИХ ПРОЦЕСІВ ТА СИСТЕМ ”
НА ТЕМУ: “ МЕТОДИ УТОЧНЕННЯ КОРЕНІВ
НЕЛІНІЙНИХ РІВНЯНЬ“
Варіант 21
Львів-2007
Мета роботи – ознайомлення з методами уточнення коренів нелінійних рівнянь з одним невідомим.
Короткі теоретичні відомості:
Метод поділу проміжку навпіл
Цей метод є простим і надійним алгоритмом знаходження коренів рівняння (1).
Суть методу полягає в тому, що відрізок ділиться навпіл, тобто вибирається перше наближення кореня /рис.1/.
(3)
Якщо , тоді є коренем рівняння (1).
Рис.1.
Якщо , то вибирають той з відрізків чи , на кінцях якого функція має різні знаки. Одержаний відрізок знову ділять навпіл і т.д. Процес обчислень проводиться доти, доки величина відрізку не стане меншою від заданої похибки Е.
Метод досить стійкий до похибок заокруглень. Але й збігається теж повільно. При збільшенні точності значно зростає об’єм обчислень. Тому на практиці метод часто використовують для грубого визначення початкового наближення до кореня, а пізніше застосовують швидко збіжний ітераційний метод.
Алгоритм методу половинного ділення.
Задати значення параметрів а, b та граничної абсолютної похибки Е .
Обчислити значення функцій в точці а, тобто обчислити .
Поділити проміжок навпіл, тобто знайти точку
.
Перевірити умову ? Якщо так, то перейти до п.7.
Якщо добуток , то , в протилежному випадку .
Якщо , то перейти до п.3.
Надрукувати (вивести) значення .
Закінчити виконання програми.
Значення Е задається в межах 10 –4(10 –6.
Завдання:
Знайти корінь рівняння з граничною абсолютною похибкою Е = 10–4, відокремлений на відрізку [a, b].
Рівняння
Відрізок
x3 + 6x2 + 9x + 1 = 0
[–1;0]
Таблиця ідентифікаторів констант, змінних, функцій, використаних у програмі, та їх пояснення:
main()
Головна функція
f()
Функція, що передає задане рівняння
clrscr()
Функція очищення екрану
printf()
Функція виведення даних
scanf()
Функція введення даних
fabs()
Функція для знаходження абсолютного значення типу double
a
Змінна, початкове значення відрізку
b
Змінна, кінцеве значення відрізку
E
Змінна, гранична абсолютна похибка
x
Змінна, розв’язок рівняння
Блок-схема програми:
Текст програми мовою C:
#include<stdio.h>
#include<math.h>
#include<conio.h>
double f(double x);
double a,b,E,x;
void main(void)
{
clrscr();
printf("a=");
scanf("%lf",&a);
printf("b=");
scanf("%lf",&b);
printf("E=");
scanf("%lf",&E);
x=(a+b)/2;
while (f(x)!=0)
{
if (f(a)*f(x)>0) a=x;
else b=x;
x=(a+b)/2;
if(fabs(b-a)<=E) break;
}
printf("x=%lf\n",x);
}
double f(double x)
{
return pow(x,3)+6*pow(x,2)+9*x+1;
}
Результат роботи програми:
a=-1
b=0
E=0.0001
x=-0.120636
Висновок:
Виконавши дану лабораторну роботу я ознайомився з методами уточнення коренів нелінійних рівнянь з одним невідомим.