- •Курсова робота
- •1.1 Загальні поняття та визначення
- •1.2 Чисельні методи уточнення коренів
- •1.3 Постановка задачі
- •2.1 Рішення нелінійного рівняння методом простих ітерацій
- •2.2 Рішення нелінійного рівняння методом Ньютона (дотичних)
- •2.3.Використання програмних засобів
- •2.4 Алгоритми розв’язку задач
- •3.2 Тестування програм
- •Www.100balov.Com/.../nel_riwn.Doc
2.3.Використання програмних засобів
Для досягнення даної мети ми використаємо програму розроблену мовою С++, для розв’язку даного рівняння. C++ - компільована статично типізована мова програмування загального призначення. Ми обрали саме цю мову оскільки вона поєднує властивості як високорівневих, так і низькорівневих мов. Область застосування цієї мови включає створення операційних систем, різноманітних прикладних програм, драйверів пристроїв, додатків для вбудованих систем, високопродуктивних серверів, а також розважальних доданків.
Для перевірки знайдених результатів, ми скористаємося програмою Mathcad. Mathcad - система комп’ютерної алгебри з класу систем автоматизованого проектування, орієнтована на підготовку інтерактивних документів з обчисленнями і візуальним супроводом. Отож, наш приклад буде вирішено і аналітичним способом.
2.4 Алгоритми розв’язку задач
Для вирішення поставленої задачі, необхідно розробити алгоритм дій. Для обох методів можна обрати спільний алгоритм:
за допомогою функції return ввести функцію;
обрати тип даних та ввести змінні;
вивести на екран рядок для введення користувачами даних;
вивести на екран результати.
Можна скористатися наступними алгоритмами:
Рис.2.1 Метод ітерацій
-
xn+1 = φ(xn)
Δ = xn+1 – xn
xn: = xn+1
так
ні
-
Вибір початкового значення xn
Обчислення xn +1 і f(xn +1)
так
ні
xn = xn +1
Рис. 2.2 Метод Ньютона
Для роботи програми використаємо наступні дані:
#include <cmath> - бібліотека використана в програмі, оскільки вона відповідає за виведення тригонометричних функцій, використання модуля,
#include <iomanip> - бібліотека для використання setw(),
#include <iostream> - ця бібліотека використана, оскільки вона відповідає за ввід і вивід даних (подібно до stdio.h в Сі), в даній програмі вона використовується для об’єктів cout, cin;
x – початкове значення;
eps – точність обчислення;
cout – вивід на екран;
return - повертає значення, переважно з користувацьких функцій, як параметри функціонального запиту;
douoble – тип даних з плаваючою крапкою;
for – цикл, який повторює дії, поки не виконається задана умова, тобто поки не набуде істинного значення.
3. ПРАКТИЧНЕ ЗАСТОСУВАННЯ МЕТОДІВ
3.1 Програми мовою С++
Наведена програма (рис.3.1) розроблена для розв’язання алгебраїчних рівнянь методом простих ітерацій із застосуванням конкретного рівняння.
#include <cmath> #include <iomanip> #include <iostream> using namespace std;
double f(double x) { return 2*sin(3*x) - x; }
double g(double x) { return x + 0.5*f(x); }
int main() { double x; double eps; cout<<"Введіть початкове значення : ";cin>>x; cout<<"Введіть точність обчисленння : ";cin>>eps; for(double iter = 1; eps < fabs(f(x)); iter = iter + 1) { system("cls"); //*Ітерацій може бути дуже багато, тому пропоную //використовувати не //цілі, а дабл як лічильник, хоча, якщо рішення не знайшли //за 10-100 ітерацій, то рішення для даного коефіцієнту //при f(x) в g(x) не має і не слід його змінювати cout<<"Iteration : "<<setprecision(0)<<iter<<endl; cout<<"x = "<<x <<endl; cout<<"g(x) = "<<g(x)<<endl; cout<<"f(x) = "<<f(x)<<endl; x = g(x); } system("pause"); return 0; }
|
Рис.3.1 Метод простих ітерацій
Наступна програма (рис.3.2) розроблена для розв’язку алгебраїчних рівнянь методом Ньютона(методом дотичних).
#include <cmath> #include <iomanip> #include <iostream> using namespace std;
double f(double x) { return 2*sin(3*x) - x; }
double df(double x) { return 6*cos(3*x)-1; }
double g(double x) { return x - f(x)/df(x); }
int main() { double x; double eps; cout<<"Введіть початкове значення : ";cin>>x; cout<<"Введіть точність обчислень : ";cin>>eps; for(double iter = 1; eps < fabs(f(x)); iter = iter + 1) { system("cls"); //*Ітерацій може бути дуже багато, тому пропоную використовувати //не цілі, а дабл як лічильник, хоча якщо //рішення не знайшли за 10-100 ітерацій то рішення для даного коефіцієнту //при f(x) в g(x) не має і непотрібно його змінювати cout<<"Iteration : "<<iter<<endl; if(df(x) == 0) break; cout<<"x = "<<x <<endl; cout<<"g(x) = "<<g(x) <<endl; cout<<"df(x)= "<<df(x)<<endl; cout<<"f(x) = "<<f(x) <<endl; x = g(x); } system("pause"); return 0; } |
Рис.3.2 Метод Ньютона
