Дослідження чисельних методів вирішення нелінійних рівнянь
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
° використовується функція Nuton з параметрами значень х на наступному та попередньому кроках: х , хlast та кількість ітерацій iter.
Для виведення отриманих значень х використовується функція res.
Лістінг програми наведений в додатку В.
3.4 Інструкція користувачеві
Для завантаження програми необхідно запустити програмний файл KURSOVA.EXE. При цьому зявиться вікно (Рис. 3.4)
Рис. 3.4.
Необхідно слідувати вказівкам які зявились у робочому вікні програми, а саме ввести допустиму похибку е, після чого програма видасть результат значень х та кількість ітерацій обома методами . Для виходу з програми необхідно натиснути будь-яку клавішу.
4. Аналіз результатів розрахунку
Після проведення розрахунку по знаходженню коренів нелінійного рівняння за методами Ньютона та хорд отримано такі результати: рівняння має пять коренів, а саме три дійсних і два комплексних.
За методом хорд: х1=-1,801176 (5 ітерацій); х2=0,00001(3 ітерації); х3= 1,748379 (5 ітерацій).
За методом Ньютона: х1=-1,802453 (3 ітерації); х2=0,00001(2 ітерації); х3= 1,752384 (3 ітерації).
Комплексні корені : ,
Порівнявши отримані результати з наступними результатами,
що отримані за допомогою автоматизованого математичного пакету Mathcad, можна зробити висновок що корені рівняння розраховані за допомогою чисельних методів є досить точними і похибка для методу Ньютона складає не більше 0,0001,а для методу хорд не більше 0,001.За отриманими результатами також можна зробити висновок щодо швидкодії кожного з методів, а саме при однакових початкових умовах метод Ньютона працює дещо швидше, ніж метод хорд. Крім того, метод Ньютона дає точніший результат.
Висновки
В даній курсовій роботі було проаналізовано розвязок нелінійних рівнянь методами Ньютона та хорд. В результаті роботи було досліджено існуючі методи для розвязання таких рівнянь, а більш детально розглянуті вищезгадані два методи. Для цих методів було складено блок-схему, а також написано програму на мові програмування С++. В результаті роботи за допомогою складеної програми було отримано певні корені заданого рівняння і порівняно їх зі значеннями коренів цього ж рівняння, але розвязаного за допомогою спеціалізованого математичного програмного пакету Mathcad. Також було доведено, що метод Ньютона має значно вищу швидкість збіжності і для знаходження коренів потрібно значно менше ітерацій.
Література
1. Квєтний Р. Н. Методи компютерних обчислень: Навчальний посібник. Вінниця.: ВДТУ, 2001. С. 35.
2. Вержбицький В. М. Основы численных методов. М.: Высшая школа, 2002. С. 43.
3. Волков Е. А. Численные методы. М.: Наука, 1982. С. 102.
4. Лященко М.Я., Головань М.С. Чисельні методи : Підручник. К.: Либідь, 1996. С. 144.
5. Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. М.: Наука, 1987. С. 83.
Додаток А
(Алгоритм методів)
Блок-схема методу хорд
Блок-схема методу Ньютона
Додаток Б
Блок-схема програми
Додаток В
Лістінг програми
#include
#include
#include
double e; // похибка
// f(x)=x^5-10x+1 - функция
double f(double x)
{
return pow(x,5) - 10*x + 1;
}
// f(x)=5x^4-10 - перша похідна f(x) для метода Ньютона
double f_der(double x)
{
return 5*pow(x,4) - 10;
}
int chords(double xa, double xb, double &x, int &iter)
// метод Хорд
{
double xlast;
x = 0;
if (f(xa)*f(xb) >= 0)
return 0;
iter = 0;
do
{
xlast = x;
x = xb - f(xb)*(xb-xa)/(f(xb)-f(xa));
if (f(x)*f(xa) > 0)
xa = x;
else
xb = x;
iter++;
}
while (fabs(x-xlast)>e);
return 1;
}
double Nuton(double x, int &iter)
// метод Ньютона
{
double xlast;
iter = 0;
do
{
xlast = x;
x = x - f(x)/f_der(x);
iter++;
}
while (fabs(x-xlast)>e);
return x;
}
int main()
// основна програма
{
double res;
int iter;
clrscr();
printf(" Enter the accuracy : ");
scanf("%f", &e);
printf("\n-------------------------Chords method--------------\n");
for (int i = -20; i < 20; i++)
if (chords(i, i+1, res, iter))
printf("\n x= %f (%d iterations)\n", res, iter);
printf("\n-------------- Nutons method----------------------\n");
res = Nuton(-2, iter);
printf("\n x= %f (%d iterations)\n", res, iter);
res = Nuton(0, iter);
printf("\n x= %f (%d iterations)\n", res, iter);
res = Nuton(2, iter);
printf("\n x= %f (%d iterations)\n", res, iter);
getch();
return 0;
}