Задача пошуку нулів функції на відрізку.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Електронні обчислювальні машини

Інформація про роботу

Рік:
2007
Тип роботи:
Лабораторна робота
Предмет:
Дослідження комп'ютерних систем штучного інтелекту
Група:
КСМм-1

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи з курсу „ Дослідження комп'ютерних систем штучного інтелекту ” Тема: Задача пошуку нулів функції на відрізку Виконав: ст. гр. КСМм-1 Львів – 2007 Мета: Ознайомитись із алгоритмами розв’язання задачі пошуку нулів функції на заданому відрізку та написати програму, яка б реалізовувала один з цих алгоритмів. Завдання Написати програму, яка шукає нулі функції cos(1/X) - X*sin(5/X) на заданому інтервалі із заданою точністю. Лістинг програми // max_AI_lab1.cpp #include "stdafx.h" #include "stdio.h" #include "math.h" // діапазон пошуку нулів #define LEFT -0.01 #define RIGHT 0.01 double step = 0.0001; // крок основного проходу double stepE = 0.000000001; // крок додаткового (уточнюючого) проходу double Result; // сюди зберігається результат double func (double X) // власне формула обчислення функції { return ( cos(1/X) - X*sin(5/X) ); } int isZero (double); // пошук нулів функції - загальний "грубий" прохід double extra (double, double); // знаходження точної позиції даного // конкретного нуля // ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ MAIN ‡‡‡ int main(int argc, char* argv[]) { double i; long znum=1,totalops=0; for ( i = LEFT ; i < RIGHT ; i += step) if ( isZero(i) == 1 ) { printf("got a zero #%04d @ %16.9f\n",znum,Result); znum++; } return 0; } // ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ isZero ‡‡‡ "грубий прохід" int isZero (double var) { double y, yPrev; double varPrev = var - step; y = func (var); // знач. ф-ції в даній точці yPrev = func (varPrev); // знач. ф-ції в попередній точці if ( ( (y > 0) && (yPrev < 0) ) || // перетин нуля з "+" в "-" ( (y < 0) && (yPrev > 0) ) ) // перетин нуля з "-" в "+" { // більш точне визначення нуля в заданому діапазоні Result = extra (varPrev,var); return 1; } else if (y==0) // bull's eye! { Result = var; return 1; } return 0; } // ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ extra ‡‡‡ уточнення нуля double extra (double varStart, double varStop) // пошук з підвищеною точністю { double i; for ( i=varStart ; i<=varStop ; i+=stepE) { // printf("."); double y = func(i); double yPrev = func(i-stepE); if ( ( (y > 0) && (yPrev < 0) ) || ( (y < 0) && (yPrev > 0) ) ) return ( i - stepE/2 ); else if ( y==0 ) return ( i ); else if ( yPrev==0 ) return ( i-stepE ); } return 0; } Графічне подання функції на досліджуваному відрізку  Результати виконання роботи Знайдені програмою нулі функції cos(1/X) - X*sin(5/X) на відрізку [-0.01; 0.01]:
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!