Автор работы: Пользователь скрыл имя, 26 Января 2014 в 20:03, курсовая работа
Целью данной курсовой работы является показать возможность примене-ния языка программирования для решения сложных математических задач. Кроме того, поскольку этот курсовой проект – своеобразный итог изучения стандартного Паскаля, можно сказать, что данное задание показывает уровень владения языком и конкретными его приемами (в данном случае процедурами и функциями). Более того, данная программа показывает особенности Паскаля как языка структурного программирования, и, может быть, дает некоторые навыки правильной организации программы.
ВВЕДЕНИЕ 3
1. МАТЕМАТИЧЕСКОЕ ОПИСАНИЕ ЗАДАЧИ 4
1.1. Сущность метода Ньютона. 4
2. СЛОВЕСНО-ФОРМУЛЬНОЕ ОПИСАНИЕ АЛГОРИТМА 6
2.1. Описание алгоритма 6
2.2. Выполнение алгоритма 6
2.3. Выводы по результатам выполнения алгоритма 8
3. БЛОК-СХЕМА АЛГОРИТМА 10
3.1. Блок-схема алгоритма 10
3.2. Выполнение алгоритма, записанного в виде блок-схемы 11
4. ОПИСАНИЕ АЛГОРИТМА НА АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ 13
4.1. Описание алгоритма 13
4.2. Выполнение алгоритма, записанного на алгоритмическом языке 13
4.3. Выводы по результатам выполнения алгоритма 15
5. РЕАЛИЗАЦИЯ АЛГОРИТМА НА ЯЗЫКЕ PASCAL 16
5.1. Краткое описание языка программирования 16
5.2. Листинг программы 19
5.3. Тестовые запуски программы 19
ЗАКЛЮЧЕНИЕ 21
СПИСОК ЛИТЕРАТУРЫ 22
Федеральное агентство по образованию Российской Федерации
Уфимский государственный
авиационный технический
Кумертауский филиал
Кафедра ПА
КУРСОВАЯ РАБОТА
по программированию и основам алгоритмизации
на тему:
«Решение уравнений методом Ньютона (метод касательных)»
Выполнил: ст. гр. АТП-109
Кинзябулатов В.Р.
Проверил: ст. преподаватель
А. Я. Митрофанов
Оценка: _________________
Подпись: _________________
Дата: _________________
СОДЕРЖАНИЕ
Введение
Целью данной курсовой работы является показать возможность применения языка программирования для решения сложных математических задач. Кроме того, поскольку этот курсовой проект – своеобразный итог изучения стандартного Паскаля, можно сказать, что данное задание показывает уровень владения языком и конкретными его приемами (в данном случае процедурами и функциями). Более того, данная программа показывает особенности Паскаля как языка структурного программирования, и, может быть, дает некоторые навыки правильной организации программы.
Пусть х* есть корень уравнения f(x) = 0, единственный на отрезке [a, b].
Предположим, что каким-либо способом, например, графически определено начальное приближение x0 к корню. В этой точке вычислим значение функции f(x0) и ее производной f ′(x = x0 ) . Значение этой производной равно tgα) (см. рисунок .1) – тангенсу угла наклона соответствующей касательной к оси абсцисс. Точка x1 пересечения этой касательной с осью абсцисс есть следующее приближение к корню (поэтому метод Ньютона и называют методом касательных). Эта точка x1 принимается за новое начальное приближение и процесс повторяется. Из рисунка видно, что процесс сходится к искомому корню x*. Процесс уточнения корня закончится, когда выполнится условие
xk+1 − xk < ε,
где ε – допустимая погрешность определения корня. Из геометрических соображений можно получить расчетную формулу для метода Ньютона в виде:
Рисунок 1. Иллюстрация метода касательных (Ньютона)
Метод Ньютона обладает высокой скоростью сходимости. Обычно абсолютная погрешность нахождения корня ε = 10−5 … 10−6 достигается за 5 – 6 итераций. Однако существенным недостатком этого метода является необходимость вычисления производной функции на каждом шаге итерационного процесса. Это может явиться серьезным препятствием, когда функция вычисляется по очень сложному или трудоемкому алгоритму. Несколько уменьшив скорость сходимости, можно ограничиться вычислением производной только на первой итерации, а затем вести вычисления по формуле (1), полагая f '(xk ) ≈ f '(x0 ) :
Словесно-формульное описание алгоритмов является наиболее приближенным к нормальному человеческому языку, при этом четко описывающим порядок действий и относительно легко поддающимся переводу на языки программирования.
Описание входной информации: a - левая граница промежутка, b - правая граница промежутка, e - относительная погрешность. Необходимо также задать функцию и ее производную.
Алгоритм:
Пример № 1.
Найти корни уравнения на отрезке (1; 3) с точностью 0,001.
1,3333<=0.001 – нет – переходим к п.4
0,3137<=0.001 – нет – переходим к п.4
0,0195<=0.001 – нет – переходим к п.4
0,0001<=0.001 – да – переходим к п.7
Пример № 2. Найти корни уравнения на отрезке (-1; 1) с точностью 0,0001.
0,4621<=0.0001 – нет – переходим к п.4
0,0291<=0.001 – нет – переходим к п.4
0,0000<=0.001 – да– переходим к п.7
Выполнение составленного
Запись алгоритмов в виде блок-схем является наиболее наглядным видом записи. В то же время этот способ является и наиболее громоздким.
Пример № 1. Найти корни уравнения на отрезке (1; 3) с точностью 0,001.
Шаг |
Блок |
Действие |
Переход |
Переменные |
1. |
1 |
начало |
2 |
|
2. |
2 |
Ввод а=1, b=3, eps=0.001 |
3 |
а=1 b=3 eps=0.001 |
3. |
3 |
x:=a |
4 |
x=1 |
4. |
4 |
t:=f(x)/f'(x) x:=x-t |
5 |
t=-1,3333 x=2,3333 |
5 |
5 |
Проверка условия | t | <=eps |
Нет Переход к блоку 4 |
|
6 |
4 |
t:=f(x)/f'(x) x:=x-t |
5 |
t=0,0195 x=2,0001 |
7 |
5 |
Проверка условия | t | <=eps |
Нет Переход к блоку 4 |
|
8 |
4 |
t:=f(x)/f'(x) x:=x-t |
5 |
t=0,0001 x=2,0000 |
9 |
5 |
Проверка условия | t | <=eps |
Да Переход к блоку 6 |
|
10 |
6 |
Вывод x |
7 |
x=2.0000 |
11 |
7 |
Конец |
Пример № 2. Найти корни уравнения на отрезке (-1; 1) с точностью 0,0001.
Шаг |
Блок |
Действие |
Переход |
Переменные |
1. |
1 |
начало |
2 |
|
2. |
2 |
Ввод а=-1, b=1, eps=0.0001 |
3 |
а=-1 b=1 eps=0.0001 |
3. |
3 |
x:=a |
4 |
x=-1 |
4. |
4 |
t:=f(x)/f'(x) x:=x-t |
5 |
t=-0,4621 x=-0,5379
|
5 |
5 |
Проверка условия | t | <=eps |
Нет Переход к блоку 4 |
|
6 |
4 |
t:=f(x)/f'(x) x:=x-t |
5 |
t=0,0291 x=-0,5670
|
7 |
5 |
Проверка условия | t | <=eps |
Нет Переход к блоку 4 |
|
8 |
4 |
t:=f(x)/f'(x) x:=x-t |
5 |
t=0,0000 x=-0.5672
|
9 |
5 |
Проверка условия | t | <=eps |
Да Переход к блоку 6 |
|
10 |
6 |
Вывод x |
7 |
x=-0.5672 |
11 |
7 |
Конец |
Алгоритмический язык, использующийся в данной работе, является наиболее приближенным, по сравнению со всеми остальными приведенными формами, к языку программирования – конкретно к языку Turbo Pascal.
Алгоритм Newton;
Переменные a,b,eps,t,x,f,f1;
НАЧАЛО
ПишиСтр (a,b,eps);
x:=a;
Повторяй
t:=f(x)/f1(x);
x:=x-t;
до тех пор пока не выполнится условие| t | <=eps
ПишиСтр (x);
КОНЕЦ
Пример № 1. Найти корни уравнения на отрезке (1; 3) с точностью 0,001.
№ п/п |
Команды |
Переменные |
На экране |
1. |
ПишиСтр (a,b,eps) |
а=1 b=3 eps=0.001 |
|
2. |
x:=a |
x:=1 |
|
3. |
t:=f(x)/f'(x) x:=x-t |
t=-1,3333 x=2,3333 |
|
4 |
Проверка условия | t | <=eps - нет |
||
5 |
t:=f(x)/f'(x) x:=x-t |
t=0,0195 x=2,0001 |
|
6 |
Проверка условия | t | <=eps - нет |
||
7 |
t:=f(x)/f'(x) x:=x-t |
t=0,0001 x=2,0000 |
|
8 |
Проверка условия | t | <=eps – да |
||
9 |
ПишиСтр (x) |
x=2,0000 |
2,0000 |
Пример № 2. Найти корни уравнения на отрезке (-1; 1) с точностью 0,0001.
№ п/п |
Команды |
Переменные |
На экране |
1. |
ПишиСтр (a,b,eps) |
а=-1 b=1 eps=0.0001 |
|
2. |
x:=a |
x:=-1 |
|
3. |
t:=f(x)/f'(x) x:=x-t |
t=-0,4621 x=-0,5379 |
|
4 |
Проверка условия | t | <=eps - нет |
||
5 |
t:=f(x)/f'(x) x:=x-t |
t=0,0291 x=-0,5670
|
|
6 |
Проверка условия | t | <=eps - нет |
||
7 |
t:=f(x)/f'(x) x:=x-t |
t=0,0000 x=-0.5672
|
|
8 |
Проверка условия | t | <=eps – да |
||
9 |
ПишиСтр (x) |
x=-0.5672 |
-0.5672 |
Выполнение составленного
Язык программирования Pascal был разработан в 1968-1971 гг. Никлаусом Виртом в Цюрихском Институте информатики (Швейцария), и назван в честь Блеза Паскаля – выдающегося математика, философа и физика 17-го века. Первоначальная цель разработки языка диктовалась необходимостью создания инструмента "для обучения программированию как систематической дисциплине". Однако очень скоро обнаружилась чрезвычайная эффективность языка Pascal в самых разнообразных приложениях, от решения небольших задач численного характера до разработки сложных программных систем - компиляторов, баз данных, операционных систем и т.п. К настоящему времени Pascal принадлежит к группе наиболее распространенных и популярных в мире языков программирования: