ЧИСЕЛЬНЕ РОЗВ’ЯЗУВАННЯ НЕЛІНІЙНИХ РІВНЯНЬ

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

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

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

Рік:
2008
Тип роботи:
Звіт
Предмет:
Інші
Група:
ПМ-31

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний Університет „Львівська Політехніка” Звіт до лабораторної роботи №2 на тему: „ЧИСЕЛЬНЕ РОЗВ’ЯЗУВАННЯ НЕЛІНІЙНИХ РІВНЯНЬ” Варіант 21п f (x) =  = 0. Завдання: Графічно відокремити корені рівняння, побудувавши графік функції y = f(x) за допомогою ЕОМ (наприклад, використати пакет програм Maple). Використовуючи будь-яку з відомих Вам мов програмування, розв’язати задачу на ЕОМ з точністю ε = 0.001 методом ділення навпіл. Уточнити одержаний результат з точністю ε = 0.00001 за допомогою методу послідовних наближень. Перевірити умови застосування вибраного чисельного методу. Розв’язання: 1. Графічно відокремлюю корені рівняння, будуючи графік функції y = f(x) за допомогою ЕОМ, використовуючи пакет програм Maple. 2. Використовуючи мову програмування С++, розв’язую задачу на ЕОМ з точністю ε = 0.001 методом ділення навпіл. З результатів, отриманих з попередньої частини завдання очевидно, що розв’язок рівняння єдиний і лежить в інтервалі [0..1]. Ці межі використовую як вхідні дані для другої частини завдання. В основі методу лежить перевірка добутку значень функції на краях інтервалу: якщо він <0, то на цьому інтервалі є корінь і навпаки – якщо >0, то немає. Щоразу зменшуючи довжину інтервалу вдвічі в результаті прийдемо до такої довжини інтервалу, яка буде < ε і тоді припинемо роботу. Число x, що лежатиме посередині останнього інтервалу і буде шуканим. Уточнюю одержаний результат з точністю ε = 0.00001 за допомогою методу послідовних наближень. Він полягає у заміні рівняння f(x)=0 на еквівалентне: x = φ (x), де φ (x) = x + ρ (x)*f (x), а ρ (x) – довільна функція, що не має коренів в інтервалі [0..1], зокрема ρ (x) ≡ 1. Метод простої ітерації визначається формулою: xn+1= φ (xn), n = 0,1,2,..., де n – номер ітерації, x0 – початкове наближення. Перевіряю умови застосування вибраного чисельного методу: Як видно з графіка функції, зробленого на Maple, розв’язок рівняння єдиний і лежить в межах (0,4; 0,7). Потрібно вибрати таку функцію φ (x), щоб вона задовольняла умови збіжності методу простих ітерацій ( |φ΄(x)| < 1, φ (x) є [a,b]  x є [a,b]). Такою функцією є φ (x) = e-x, що отримана з функції f (x) =  = 0 наступним шляхом: ; e-x = x. xn+1 = . Справді, |(e-x)΄| = |(-e-x)| = e-x < 1, x є [0,4;0,7], оскільки функція спадна і невід’ємна, а отже максимальне її значення при x = 0,4 і дорівнює ≈ 0,67. Мінімальне – при x = 0,7 і дорівнює ≈ 0,49. Отже, φ (x) є [0,4;0,7] x є [0,4;0,7]. На основі цієї формули і проводитимо розв’язання методом простої ітерації. Код програми на мові С++: #include <fstream.h> #include <math.h> float a,b,xmiddle,e1,e2,f,max; int lichylnyk; float function(float); // функція f(x)=0; float function (float x) { return exp(-x/2)-sqrt(x); } void main() { lichylnyk=0; cout<<"Vvedit tochnist:"<<'\n'; cin>>e1; a=0; b=1; do { // lichylnyk++; // xmiddle=(b+a)/2; // метод половинного if (function(a)*function(xmiddle)<0) // ділення b=xmiddle; // else a=xmiddle; // } // while (fabs(b-a)>e1); // f=function((b+a)/2); cout<<"Rezultat metodu dilennja navpil:"<<'\n'; // вивід результатів cout<<"X = "<<(b+a)/2<<'\n'; cout<<"F = "<<f<<'\n'; cout<<"Kilkist iteracij: "<<lichylnyk<<'\n'; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// cout<<"Vvedit tochnist:"<<'\n'; cin>>e2; cout<<"Vvedit livu mezhu:"<<'\n'; cin>>a; while (a<=0) { cout<<"Nekorektna mezha. Vvedit shche raz!"<<'\n'; cin>>a; } cout<<"Vvedit pravu mezhu:"<<'\n'; cin>>b; while (b<=a) { cout<<"Nekorektna mezha. Vvedit shche raz!"<<'\n'; cin>>b; } while((exp(-a)>=1) || (exp(-a)>b) || (exp(-b)<a)) // перевірка умов збіжності { cout<<"!!!V cykh mezhax metod prostoji iteracii ne vykonujetsja!!!"<<'\n'; cout<<"Vvedit livu mezhu:"<<'\n'; cin>>a; while (a<=0) { cout<<"Nekorektna mezha. Vvedit shche raz!"<<'\n'; cin>>a; } cout<<"Vvedit pravu mezhu:"<<'\n'; cin>>b; while (b<=a) { cout<<"Nekorektna mezha. Vvedit shche raz!"<<'\n'; cin>>b; } } a=(b+a)/2; lichylnyk=0; do // { // lichylnyk++; // метод простих b=exp(-a); // ітерацій f=exp(-b); // max=fabs(b-a); // a=b; // } // while ((max>e2) && (fabs(f)>e2)); // cout<<"Rezultat metodu prostykh iteracij:"<<'\n'; cout<<"X = "<<b<<'\n'; cout<<"F = "<<f<<'\n'; cout<<"Kilkist iteracij: "<<lichylnyk<<'\n'; } Результат: Висновок: лабораторна робота складалася з трьох частин: спершу я намалював графік за допомогою Maple (корінь рівняння виявився єдиним, тому відокремлювати корені не довелось); в другій частині я уточнив корінь (ε = 0.001) за допомогою методу ділення навпіл (цей метод не дуже ефективний, бо має повільну збіжність); в третій частині я ще більше уточнив корінь (ε = 0.00001) за допомогою методу послідовних наближень, перевіривши спершу умови застосування цього методу. СПИСОК ЛІТЕРАТУРИ Бахвалов Н.С., Жидков Н.П., Кобельков Г.М.. Численные методы.-М.:Наука, 1987. Гаврилюк І.П., Макаров В.Л. Методи обчислень. –К.:Вища школа, 1995, ч.1, ч.2. Данилович В., Кутнів М. Чисельні методи.-Львів:Кальварія, 1998. Калиткин Н.Н. Численные методы.-М.:Наука, 1978. Самарский А.А., Гулин А.В. Численные методы. - М.:Наука, 1989. Трифонов Н.П., Пасхин Е.Н. Практикум работы на ЭВМ.-М.: Наука, 1982.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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