Рішення прикладних задач методом дихотомії

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Кафедра

інформатики та обчислювальної інформатики

Дисципліна «ІНФОРМАТИКА»

ЗВІТ

по курсовій роботі

Тема: «Рішення прикладних задач методом дихотомії»

Москва 2009

ЗАВДАННЯ НА КУРСОВУ РОБОТУ

Варіант № 11.

Частина 1

Використання чисельних методів розв'язання нелінійних рівнянь, що використовуються в прикладних задачах.

Для виконання 1 частини необхідно:

  • Скласти програму і розрахувати значення функції в лівій частині нелінійного рівняння для вирішення завдання відділення коренів;

  • Скласти логічну схему алгоритму, таблицю ідентифікаторів і програму знаходження кореня рівняння методом дихотомії і методом Ньютона;

  • Ввести програму в комп'ютер, налагодити, вирішити задачу з точністю ε = 0.0001 і вивести результат;

  • Передбачити в програмі висновок на екран дисплея процесу отримання кореня.

Рівняння: , [1,2];

Метод чисельного рішення: метод дихотомії, метод хорд.

Рішення.

Метод дихотомії

1. Цей метод дозволяє відшукати корінь рівняння f ( ) = 0 з будь-якою наперед заданою точністю ε.

Передбачається, що шуканий корінь рівняння вже відокремлений, тобто зазначений відрізок [a; b] безперервності функції f (x) такий, що на кінцях цього відрізка функція приймає різні значення.

Суть методу в тому, що [a; b] ділиться пополам.Половіна, де немає кореня відкидається, а інша ділитися на два.

1-й Крок. Обчислення середини відрізка

Якщо f ( ) = 0, то ми знайшли точний корінь рівняння.

Якщо f ( ) · F (x 0) <0, то знаходиться в інтервалі [ ] Отже ;

Інакше

2-й Крок. Обчислення середини відрізка

Якщо f ( ) = 0, то ми знайшли точний корінь рівняння.

Якщо f ( · F (x 1) <0, то ;

Інакше

n-ий Крок. Обчислення середини відрізка

Якщо f ( ) = 0, то ми знайшли точний корінь рівняння.

Якщо f ( · F (x n) <0, то ;

Інакше

Умовою знаходження кореня є:

2. Нелінійне рівняння і умова його рішення:

, [1, 2], ε = 0,0001;

3. Графік функції:

4. Схема алгоритму:






























5. Таблиця ідентифікаторів:

Позначення

Ідентифікатор

Тип

n

n

int

a

double

b

double

eps

double

x

x

double

f (x)

f (x)

double

6. Лістинг програми:

# Include <stdio.h>

# Include <math.h>

double f (double x)

{

return 0.25 * (pow (x, 3)) + x-1.2502;

}

int main (void)

{

int n = 0;

double x, a = 0., b = 2., eps = 0.0001;

while (fabs (ab)> 2 * eps)

{

x = (a + b) / 2,

n + +;

printf ("step =% 3i x =% 11.8lf f (x) =% 11.8lf \ n", n, x, f (x));

if (f (x) == 0)

{

printf ("Tothnii koreni x =% lf \ nkolithestvo iteratsii n =% i \ n", x, n);

return 0;

}

else if (f (a) * f (x) <0) b = x;

else a = x;

}

printf ("Reshenie x =% 11.8lf pri Eps =% lf \ nkolithestvo iteratsii n =% i \ n", x, eps, n);

return 0;

}

7. Лістинг рішення:

step = 1 x = 1.50000000 f (x) =- 0.21392288

step = 2x = 1.25000000f (x) =- 0.00893133

step = 3x = 1.12500000f (x) = 0.08982692

step = 4x = 1.18750000f (x) = 0.04080796

step = 5x = 1.21875000f (x) = 0.01602415

step = 6x = 1.23437500f (x) = 0.00356738

step = 7x = 1.24218750f (x) =- 0.00267680

step = 8x = 1.23828125f (x) = 0.00044659

step = 9x = 1.24023438f (x) =- 0.00111478

step = 10 x = 1.23925781f (x) =- 0.00033401

step = 11 x = 1.23876953f (x) = 0.00005631

step = 12 x = 1.23901367f (x) =- 0.00013885

step = 13 x = 1.23889160f (x) =- 0.00004127

Reshenie x = 1.23889160 pri Eps = 0.0001

kolithestvo iteratsii n = 13

Метод хорд:

1. Цей метод полягає в тому, що до графіка функції проводиться хорда. Знаходимо точку перетину з віссю OX і опускаємо з цієї точки пряму паралельну OY. З точки пе-ресечения прямий і графіка проводимо хорду і операція повторюється до тих пір, поки точка перетину хорди з віссю OX не наблизитися до кореня функції до заданої похибки.

Крок перший:

Нас цікавить точка перетину з віссю ОХ.

Зробимо припущення: х = x 1

y = 0

Введемо позначення

x 0

f ( ) = F (x 0)

Підставимо в рівняння

Звідси

x 1 = x 0 -

Крок другий:

x 2 = x 1 -

Для n-го кроку:

x n = x n -1 -

Умовою знаходження кореня є:

2. Нелінійне рівняння і умова його рішення:

, [1,2], ε = 0,0001;

3. Графік функції:

Таблиця ідетіфікаторов:

Позначення

Ідентифікатор

Тип

n

n

int

a

double

b

double

eps

double

x

x

double

f (x)

f (x)

double

6. Лістинг програми:

# Include <stdio.h>

# Include <math.h>

double f (double x)

{

return (0.25 * (pow (x, 3))) + x-1.2502;

}

int main (void)

{

int n = 0;

double x, a = 1., b = 2., eps = 0.0001, xn;

xn = a;

while (fabs (xn-x)> eps)

{

x = xn;

n + +;

xn = xf (x) * (bx) / (f (b)-f (x));

printf ("step =% 3i x =% 11.8lf f (x) =% 11.8lf \ n", n, xn, f (xn));

}

printf ("pribligennoe znathenie x =% lf pri Eps =% lf \ nkolithestvo iterasii n =% i \ n", xn, eps, n);

return 0;

}

7. Лістинг рішення:

step = 1 x = 1.22334934 f (x) = 0.01236182

step = 2 x = 1.23796144 f (x) = 0.00070219

step = 3 x = 1.23879055 f (x) = 0.00003951

step = 4 x = 1.23883720 f (x) = 0.00000222

pribligennoe znathenie x = 1.238837 pri Eps = 0.0001

kolithestvo iterasii n = 4

Аналіз результатів:


метод дихотомії

метод хорд

значення кореня

1.23889160

1.23883720

значення функції

-0.00004127

0.00000222

кількість ітерацій

13

4

Висновок: Метод дихотомії простий в реалізації, але має малу швидкістю збіжності в порівнянні з методом хорд, що виражається в кількості кроків. Метод хорд до того ж володіє більшою точністю.

Частина 2

Рішення диференціального рівняння.

Варіант № 11.

Метод Ейлера

1.Математіческое опис

Геометричний зміст методу Ейлера полягає в наступному: диференціальне рівняння визначає в точці (x 0, y 0) напрямок дотичної до шуканої інтегральної кривої

k 0 = y '(x 0) = f (x 0, y 0)

Відрізок інтегральної кривої, відповідний x (X 0, x 1), x 1 = x 0 + h замінюється ділянкою дотичній з кутовим коефіцієнтом k. Знайдена точка (x 1, y 1) використовується в якості нового початкової умови для рівняння y (x 1) = y 1, у ній знову обчислюється кутовий коефіцієнт поля напрямків і процедура повторюється.

На n-му кроці маємо точку (x n -1, y n -1), задану початкова умова для рівняння:

y (x n -1) = y n -1

Рівняння визначає кутовий коефіцієнт дотичної до інтегральної кривої у цій точці

Відповідне рівняння дотичної: y - y n -1 = k (x - x n -1)

Звідси отримуємо значення х = х n , Що відповідає точці: х n = х n -1 + h,

А саме: y n - y n -1 = k n -1 (x n -1 + h - x n -1), або

y n = y n-1 + h · k n-1

y n = y n-1 + h · f (x n-1, y n-1)

Отримана формула є основною розрахунковою формулою методу Ейлера.

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

2. Диференціальне рівняння:

x 0 = 0, y 0 = 1, x max = 1, Δx = 0.01; 0.005; 0.001

3. Схема алгоритму:


























5. Таблиця ідентифікаторів:

Позначення

Ідентифікатор

Тип

s

s

int

i

i

int

x

x

double

x max

x_max

double

x1

x1

double

Δ x

h [i]

double

y

y

double

d

d

double

f (x)

f (x)

double

k

k (x, y)

double

6. Лістинг програми:

# Include <stdio.h>

# Include <math.h>

double k (double x, double y)

{

return ((x / exp (x * x)) -2 .* x * y);

}

double f (double x)

{

return ((1./exp (x * x)) * (1 + x * x / 2.));

}

int main (void)

{

int s, i;

double x, x1, x_max = 1, y, d;

double h [3] = {0.01,0.005,0.001};

FILE * file;

file = fopen ("result.txt", "w +");

for (i = 0; i <= 2; i + +)

{S = 0; y = 1;

fprintf (file, "h (% i) =% lf \ n", i, h [i]);

for (x = 0; x <= x_max; x + = h [i])

{

s + +;

x1 = x + h [i];

y = y + k (x, y) * h [i];

d = yf (x1); / / y-pribl. f (x) - tochnoe

printf ("step =% 4.ix =% 6.4lf y =% 6.4lf yt =% 6.4lf d =% 10.8lf \ n", s, x1, y, f (x1), d);

fprintf (file, "step =% 4.ix =% 10.8lf y =% 10.8lf yt =% 10.8lf d =% 10.8lf \ n", s, x1, y, f (x1), d);

}

}

fclose (file);

return 0;

Висновок: Інтегроване середовище Visual С дозволяє обробляти програми, записані на мові С + +. Для програмування циклічних алгоритмів були використані оператори організації циклів з ​​параметрами, рішення використовує форматується висновок і оператор присвоювання, а також використовувалися оператори виклику функцій. Чим більше крок, тим точніше обчислення.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
62.4кб. | скачати


Схожі роботи:
Рішення задач симплекс методом
Рішення задач лінійного програмування симплекс методом
Розвязання задач графічним методом методом потенціалів методом множників Лангранжа та симплекс-методом
Рішення задач методом північно-західного кута рапределітельного мінімального і максимального
Рішення задач методом північно західного кута рапределітельного мінімального і максимального елемента
Рішення завдань оптимізації бізнес процесів з використанням прикладних програм
Методика навчання рішенню текстових задач алгебраїчним методом
Рішення транспортних задач
Рішення економічних задач
© Усі права захищені
написати до нас