Дослідження чисельних методів вирішення нелінійних рівнянь

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

° використовується функція 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;

}