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

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

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

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

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Дослідження комп'ютерних систем штучного інтелекту
Група:
КСМм-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]:
Антиботан аватар за замовчуванням

2015

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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