Учебная работа. Курсовая работа: Метод половинного деления 2

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Курсовая работа: Метод половинного деления 2

СОДЕРЖАНИЕ

ВВЕДЕНИЕ. 4

1. ПОСТАНОВКА задачки.. 5

2. метод ПОЛОВИННОГО ДЕЛЕНИЯ.. 6

3 .СООТВЕТСТВИЕ МЕЖДУ ПЕРЕМЕННЫМИ, ПРИНЯТЫМИ ПРИ ОПИСАНИИ задачки И В ПРОГРАМЕ. 9

4. СТРУКТУРНАЯ СХЕМА ПРОГРАММ И ЕЕ ОПИСАНИЕ. 12

5. ЛИСТИНГ ПРОГРАМЫ.. 20

6. КОНТРОЛЬНЫЙ ПРИМЕР И анализ РЕЗУЛЬТАТА.. 21

7. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ.. 26

ЗАКЛЮЧЕНИЕ. 27

СПИСОК ЛИТЕРАТУРЫ.. 28

ПРИЛОЖЕНИЯ.. 29

приложение А.. 30

ПРИЛОЖЕНИЕ Б.32

ПРИЛОЖЕНИЕ Д.33

ВВЕДЕНИЕ

Паскаль − один из более всераспространенных процедурно-ориентированных языков программирования 80 — 90-х годов, имеет свою довольно увлекательную историю, начало которой положило объявление в 1965 г. конкурса по созданию новейшего языка программирования — преемника Алгола — 60. Роль в конкурсе принял швейцарский ученый Николаус Вирт, который работал на факультете информатики Стэндфордского института. Проект, предложенный им, был отторгнут комиссией в 1967 г. Но Вирт не закончил работу. Возвратившись в Швейцарию, вместе с сотрудниками Швейцарского федерального института технологии в Цюрихе, он уже в 1968 г. разработал новейшую версию языка Паскаль, нареченного так в честь величавого французского математика и механика Блеза Паскаля, создавшего в 1642 г. первую счетную машинку. В 1971 г. Н. Вирт выпустил описание собственного языка, а в 1975 г. было создано управление для юзеров версии Паскаля, которая фактически легла в базу эталона языка. Но эталон языка возник лишь в 1982 г.

Созданный для обучения, язык оказался весьма обычным и сразу серьезным. Но скоро выяснилось, что он также является довольно действенным в самых разных приложениях. Pascal поддерживает самые современные методологии проектирования программ (нисходящее, модульное проектирование, структурное программирование). В связи с сиим возникли бессчетные реализации языка для различных машинных архитектур и более успешной и пользующейся популярностью оказалась разработка компании Borland International для индивидуальных IBM — совместимых ЭВМ . Эта реализация языка получила заглавие Turbo Pascal (Турбо Паскаль) и имеет уже несколько версий.

Turbo Pascal представляет собой систему программирования, включающую в себя текстовый редактор, компилятор, компоновщик, загрузчик, отладчик, файловую систему, системную библиотеку, справочную систему. Все эти составляющие объединены в интегрированную среду с многооконным интерфейсом и развитой системой меню, что обеспечивает высшую производительность труда программера при разработке программ производственного, научного и коммерческого предназначения.

1. ПОСТАНОВКА ЗАДАЧИ

Написать программку на языке программирования Pascal, выполняющую решение нелинейного уравнения. Итог работы программки должен выводиться на экран и в файл.

В программке воплотить последующее меню:

1-Ввести данные из файла

2-Ввести данные с клавиатуры

3-Показать итог

4-Сохранить итог в файл

0-Выход

Отладить программку на уравнении f(x)=x2
-x-6 с точностью 0,001

2. ВЫБОР И ОПИСАНИЕ МЕТОДОВ РЕШЕНИЯ

процесс нахождения приближенного значения корней уравнения можно подразделить на два шага 1) отделение корней; 2) уточнение корней до данной степени точности. Корень ξ считается
на отрезке [a,b], если на этом отрезке уравнение

: способ половинного деления, Ньютона

2.1. метод ПОЛОВИННОГО ДЕЛЕНИЯ

Пусть дано уравнение
(
) = 0, где
(
) – непрерывная функция. Требуется отыскать корень этого уравнения ξ с точностью до ε, где е – некое положительное довольно маленькое число.

Будем считать, что корень ξ разделен и находится на отрезке [
,
], т. е. имеет пространство неравенство
≤ ξ ≤
. Числа
и
– приближенные значения корня ξ соответственно с недочетом и с излишком. Погрешность этих приближений не превосходит длины отрезка

. Если

≤ε, то нужная точность вычислений достигнута, и за приближенное а
, или
. Но если

> ε, то требуемая точность вычислений не достигнута и нужно сузить интервалов котором находится корень ξ, т. е. подобрать такие числа
и
, чтоб производились неравенства
< ξ <
и . При вычисления следует закончить и за приближенное а
, или
. Необходимо подчеркнуть, что а
и
, а середина этого отрезка, т.е. . Погрешность в этом случае не превосходит величины .

Способ проб
. Пусть дано уравнение
(
) = 0 [
(
) – непрерывная функция] и корень ε разделен на отрезке [
,
], т. е.
(
) ∙
(
) < 0, при этом

> ε. Требуется отыскать

Рис. 2.1

Принцип решения уравнения типа y=f(x) способом проб

Рис. 2.2

Принцип решения уравнения типа y=f(x) способом половинного деления

На отрезке [
,
] выберем произвольным образом точку a1
, которая поделит его на два отрезка [a, a1
] и [a1
,b]. Из этих 2-ух отрезков следует избрать тот, на концах которого функция воспринимает значения, обратные по знаку. В нашем примере
(
) ∙
(
1
) > 0,
(
1
) ∙
(
) < 0; потому следует избрать отрезок [
1
,
]. Потом на этом суженом отрезке снова произвольным образом возьмем точку
2
и найдем знаки произведений
(
1
) ∙
(
2
) и
(
2
) ∙
(
). Потому что
(
2

(
) < 0, то избираем отрезок [
2
,
]. Этот процесс продолжаем до того времени, пока длина отрезка, на котором находится корень, не станет меньше ε. Корень ξ получим как среднее арифметическое концов отысканного отрезка, при этом погрешность корня не превосходит ε/2.

в таком виде на ЭВМ не применяется. Для составления программ и расчетов на ЭВM способ проб применяется в виде так именуемого способа половинного деления
.

Пусть корень ξ уравнения
(
) = 0 разделен и находится на отрезке [
,
], т.е.
(
) ∙
(
) < 0, при этом

> ε [тут
(х) – непрерывная функция]. Как и ранее, возьмем на отрезке [
,
] промежную точку, но не произвольным образом, а так, чтоб она являлась серединой отрезка [
,
], т. е.
= (
+
)/2. Тогда отрезок [
,
] точкой с разделится на два равных отрезка [
,
] и [
,
], длина которых равна (

)/2 (рис. 2.2). Если
(
) = 0, то
– четкий корень уравнения
(
) = 0. Если же
(
) ≠ 0, то из 2-ух образовавшихся отрезков [
,
] и [
,
] выберем тот, на концах которого функция
(х) воспринимает значения обратных символов; обозначим его [
l
,
1
]. Потом отрезок [
l
,
1
] также делим напополам и проводим те же рассуждения. Получим отрезок [
2
,
2
], длина которого равна (

)/22
. процесс деления отрезка напополам производим до того времени, когда на каком-то n-м шаге или середина отрезка будет корнем уравнения (вариант, очень изредка встречающийся на практике), или будет получен отрезок [
n
,
n
] таковой, что
n

n
= (
– а)/2n
≤ ε и
n
≤ ξ ≤
n
(число
показывает на количество проведенных делений). Числа
n
и
n
– корешки уравнения
(
) = 0 с точностью до ε. За приближенное a
n
+
n
)/2, при этом погрешность не превосходит (

)/2n
+1
.

2.2. способ ХОРД

Способ хорд является одним из всераспространенных способов решения алгебраических и непознаваемых уравнений. В литературе он также встречается под наименованиями «способа неверного положения» (regulafalsi), «способа линейного интерполирования» и «способа пропорциональных частей».

Пусть дано уравнение f(х) = 0, где f (х) – непрерывная функция, имеющая в интервале [а, b] производные первого и второго порядков. Корень считается отделенным и находится на отрезке [а, b], т.е. f(a)-f (b) < 0.

Мысль способа хорд заключается в том, что на довольно малом промежутке [а, b] дуга кривой у = f (x) заменяется стягивающей ее хордой. В качестве приближенного значения корня принимается точка пересечения хорды с осью Ох.

Ранее мы разглядели четыре варианта расположения дуги кривой, беря во внимание значения первой и 2-ой производных.

Разглядим случаи, когда 1-ая и 2-ая производные имеют однообразные знаки, т. е, f'(х) ∙ f» (х) > 0.

Пусть, к примеру, f(a) < 0, f(b) > 0, f'(х) > 0, f»(х) > 0 (рис. 3.18, а). График функции проходит через точки А0
(a; f(a)), В(b; f(b))- Разыскиваемый корень уравнения f(х) = 0 есть абсцисса точки пересечения графика функции у = f(х) с осью Ох. Эта точка нам неведома, но заместо нее мы возьмем точку x1
пересечения хорды А и В с осью Ох. Это и будет приближенное

Уравнение хорды, проходящей через точки А0
и В, имеет вид

Найдем

Эта формула носит заглавие формулы способа хорд. сейчас корень ξ находится снутри отрезка [x1
, b]. Если способ хорд к отрезку [х1
, b].

Рис

Соединим точку А1
(x1
; f (x1
) с точкой В (b; f (b)) и найдем х2
– точку пересечения хорды А1
В с осью Ох:

Продолжая этот процесс, находим

и совершенно

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

По приведенным выше формулам рассчитываются корешки и для варианта, когда f(а) > 0, f(b) < 0, f'(x) < 0, f»(x) < 0 (рис. 3.18, б).

сейчас разглядим случаи, когда 1-ая и 2-ая производные имею различные знаки, т.е. f'(x) ∙ f'(x) < 0.

Пусть, к примеру, f(a) > 0, f(b) < 0, f'(х) < 0, f»(х) > 0 (рис. 3.19, а). Соединим точки A (a; f (а)) и В0
(b; f (b)) и запишем уравнение хорды, проходящей через А и B0
:

Найдем х1
, как точку пересечения хорды с осью Ох, полагая у = 0:

Корень ξ сейчас заключен снутри отрезка [a, x1
]. Применяя клинок од хорд к отрезку [а, x1
], получим

и совершенно

По сиим же формулам находится приближенное

Итак, если f'(х) ∙ f»(х) > 0, то приближенный корень рассчитывается по формулам (1) и (2); если же f(х) ∙ f»(x) < 0, то – по формулам (3) и (4).

Но выбор тех либо других формул можно выполнить, пользуясь обычным правилом: недвижным концом отрезка является тот, для которого символ функции совпадает со знаком 2-ой производной.

Если f(b) ∙ f» (х) > 0, то неподвижен конец b, а все приближения к корню ξ лежат со стороны конца а [формулы (1) и (2)]. Если f(а)×f»(x) > 0. то неподвижен конец а, а все приближения к корню ξ лежат со стороны конца b [формулы (3) и (4).

2.3. МЕТОД НЬЮТОНА (способ КАСАТЕЛЬНЫХ)

Пусть корень уравнения
(х) = 0 разделен на отрезке [
,
], при этом
‘(
) и
«(
) непрерывны и сохраняют неизменные знаки на всем отрезке [а, b].

Геометрический смысл
заключается в том, что дуга кривой у =
(х) заменяется касательной к данной нам кривой (отсюда и 2-ое заглавие:
).

1-ый вариант
. Пусть
(
) < 0,
(
) > 0,
’(
) > 0,

(х) > 0 (рис. 1, а) либо
(а) > 0,
(
) < 0,
(х) < 0,
»(х) < 0 (рис. 1,
). Проведем касательную к кривой
=
(
) в точке
0
(
;
(
)) и найдем абсциссу точки пересечения касательной с осью

. Понятно, что уравнение касательной в точке
0
(
;
(
)) имеет вид

Полагая у = 0, х = х1, получим

(1)

сейчас корень уравнения находится на отрезке [
,
1
]. Применяя опять способ Ньютона, проведем касательную к кривой в точке
1
(
1
;
(
1
)) и полечим

и совершенно

(2)

Получаем последовательность приближенных значений
1
,
2
, …,
n
, …, любой следующий член которой поближе к корню ξ, чем предшествующий. Но все
n
, остаются больше настоящего корня ξ, т.е.
n
– приближенное

2-ой вариант
. Пусть
(
) < 0,
(
) > 0,
‘(
) > 0,
»(
) < 0 (рис. 2, а) либо
(а)> 0,
(
) < 0,
‘(
) < 0,
»(
) > 0 (рис. 2, б). Если опять провести касательную к кривой
=
(
) в точке
, то она пересечет ось абсцисс в точке, не принадлежащей отрезку [a, b]. Потому проведем касательную в точке
0
(
;
(
)) и запишем ее уравнение для данного варианта:

Полагая у = 0, x = x1 находим

(3)

Корень ξ находится сейчас на отрезке [
1
,
]. Применяя опять способ Ньютона, проведем касательную в точке
1
(
1
;
(
1
)) и получим

и совершенно

(4)

Получаем последовательность приближенных значений
1
,
2
, … ,
n
,…, любой следующий член которой поближе к настоящему корню ξ, чем предшествующий, т.е.
n
– приближенное

Сравнивая эти формулы с ранее выведенными, замечаем, что они различаются друг от друга лишь выбором исходного приближения: в первом случае за
0
принимался конец
отрезка, во 2-м – конец
.

При выбирании исходного приближения корня нужно управляться последующим правилом: за начальную точку следует выбирать тот конец отрезка [
,
], в каком символ функции совпадает со знаком 2-ой производной. В первом случае
(
) ∙
»(
) > 0 и исходная точка
= x0
, во 2-м
(
) ∙
«(
) > 0 и в качестве исходного приближения берем
=
0
.

3 .СООТВЕТСТВИЕ МЕЖДУ ПЕРЕМЕННЫМИ, ПРИНЯТЫМИ ПРИ ОПИСАНИИ задачки И В ПРОГРАМЕ

Соответствие меж переменными, применяемыми в блок-схеме и в программном коде главной программки приведено в Таблице 1.

Соответствие меж переменными, применяемыми в блок-схеме и в программном коде процедуры Save приведено в Таблице 2.

Таблица 1

Соответствие меж переменными, применяемыми в блок-схеме и в программном коде главной программки

Обозначения принятые при описании задачки

Обозначения в

программке

Наименование

а
а
Левая граница интервала

b
b
Правая граница интервала

е
е
Точность

х
х
Корень

Key
Key
Содержит знак нажатой клавиши

Таблица 2

Соответствие меж переменными, принятыми при описании задачки и в процедуре Save

Обозначения принятые при описании задачки

Обозначения в

программке

Наименование

f
f
Файловая переменная

S
S
Заглавие файла

4. СТРУКТУРНАЯ СХЕМА ПРОГРАММ И ЕЕ ОПИСАНИЕ

Структурная схема главной программки приведена на рис. 4.1.

Блок 1: ввод клавиши выбора пт меню;

Блок 2: если производится условие Key=’1’ то выполнить блок, 3 по другому выполнить блок 4;

Блок 3: воззвание к процедуре ввода начальных данных Vvod;

Блок 4: если производится условие Key=’2’ то выполнить блок 5, по другому выполнить блок 6;

Блок 5: воззвание к процедуре поиска корня и вывода его на экранVivRez;

Блок 6: если производится условие Key=’3’ то выполнить блок 7, по другому выполнить блок 8;

Блок 7: воззвание к процедуре поиска корня и сохранения его в файл;

Блок 8: если производится условие Key=’0’ то выйти из программки, по другому возвратиться к блоку 1.

Структурная схема подпрограммы функции f изображена на Рис. 4.2.

Блок 1: присваивание заголовку функции данного варианта.

Структурная схема подпрограммы процедуры PolDelизображена на Рис. 4.3.

Блок 1: вычисление исходного значения х;

Блок 2: если значение функции в точке х отстоит от 0 на величину превосходящую заданную точность е то выполнить цикл уточнения – перейти к блоку 3, по другому выйти из подпрограммы;

Блок 3: если функция в точке а и в точке х имеет однообразный символ то выполнить блок 4, по другому выполнить блок 5;

Блок 4: левая граница {перемещается} в точку х;

Блок 5: правая граница {перемещается} в точку х;

Блок 6: вычисление новейшего значения х.

Структурная схема подпрограммы процедуры Vvodизображена на Рис. 4.4.

Блок 1: вывод запроса на ввод левой границы интервала;

Блок 2: ввод а – левой границы интервала;

Блок 3: вывод запроса на ввод правой границы интервала;

Блок 4: ввод b– правой границы интервала;

Блок 5: вывод запроса на ввод точности вычисления корня уравнения;

Блок 6: ввод е – точности вычисления корня уравнения.

Структурная схема подпрограммы процедуры Vivrezизображена на Рис. 4.5.

Блок 1: воззвание к процедуре вычисления корня уравнения PolDel;

Блок 2: вывод отысканного корня.

Структурная схема подпрограммы процедуры Saveизображена на Рис. 4.6.

Блок 1: вывод запроса наименования файла;

Блок 2: ввод наименования файла;

Блок 3: воззвание к процедуре подключения файла с введённым именованием;

Блок 4: воззвание к процедуре открытия файла для записи;

Блок 5: воззвание к процедуре вычисления корня уравнения PolDel;

Блок 6: вывод в файл приобретенного значения корня;

Блок 7: воззвание к процедуре закрытия файла.

5. ЛИСТИНГ ПРОГРАМЫ

Листинг программки находится в приложении А.

6. КОНТРОЛЬНЫЙ ПРИМЕР И анализ РЕЗУЛЬТАТА

Для контрольного примера найдём

Найдём этот корень с помощью программки (см. рис 6.2.-6.3). Приобретенное с помощью программки

Таблица. 6.1

Расчетные точки графика функции f(x)=x2
-x-6, приобретенные с помощью программки MicrosoftExcel

x
y

0
-6

1
-6

2
-4

3
0

4
6

5
14

Рис. 6.1.

Рис. 6.1.

Рис. 6.2.

7. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ

Для работы с программкой необходимо запустить программку POLDEL.EXE, находящийся на дискете в приложении D, занимающий 20 кБ.

Опосля пуска программки на дисплее возникает меню программки в каком содержатся последующие пункты (см. Прил. Б).

1) 1-Ввести данные

2) 2-Показать итог

3) 3-Сохранить итог в файл

4) 0-Выход

Для ввода начальных данных
нужно в меню надавить 1 ввести по очереди

Для просмотра результата вычисления
нужно в меню надавить 2. По окончанию просмотра нажмите всякую кнопку.

Для сохранения результата
нужно надавить в основном меню 3 и опосля возникновения запроса ввести имя файла, в который следует записать итог.

Для выхода из программки
нужно в меню надавить 0.

ЗАКЛЮЧЕНИЕ

В данной курсовой работе была разработана программка, решающая нелинейное уравнение. Для его решения был избран способ половинного деления.

СПИСОК ЛИТЕРАТУРЫ

1. Кетков Ю.Л., Кетков А.Ю. Практика программирования: Бейсик, Си, Паскаль. Самоучитель. – СПб.: БХВ-Петербург, 2001. 408 с.: ил.

2. Любиев О.Н., Филиппенко Л.Н., Филиппенко Г.Г. Методические указания к выполнению курсовой работы по дисциплинам «Программирование на ЯВУ, Информатика», Новочеркасск, ЮРГТУ, 2003г. – 256 с.

3. Фаронов В.В. «Турбо Паскаль 7.0» Исходный курс. Учебное пособие. Издание 7-е, переработанное. – М.: «Нлидж», издатель Молчалева С.В., 2001.-576 с. с ил.

4. Абрамов В.Г., Трифонов Н.П. Введение в язык Паскаль. – М. :Наука, 1988.-320 с.

ПРИЛОЖЕНИЯ

ПРИЛОЖЕНИЕ А

ЛИСТИНГ ПРОГРАМЫ

Program PolD;

Uses

CRT;

Var

a,b,e,x:real;

Function F(var x:real):real;

begin

f:=sqr(x)-x-6;

end;

{================================}

Procedure PolDel(a,b,e:real; var x:real);

begin

x:=(a+b)/2;

while абс(F(x))>e do

begin

if F(a)*F(x)>0 then a:=x

else b:=x;

x:=(a+b)/2;

end;

end;

{===============================}

Procedure Vvod;

begin

Clrscr;

Writeln(‘Vvedite levuju granicu intervala’);

Readln(a);

Writeln(‘Vvedite pravuju granicu intervala’);

ReadLn(b);

Writeln(‘Vvedite tochnost’);

ReadLn(e);

end;

{===============================}

Procedure Vivrez;

begin

Clrscr;

PolDel(a,b,e,x);

Writeln(‘Uravnenie x^2-x-6 na intervale (‘,a:0:2,’,’,b:0:2,’)’);

Writeln(‘Imeet reshenie ‘,x:0:2);

ReadKey

end;

{===============================}

Procedure Save;

var

f:text;

S:string;

begin

Clrscr;

Writeln(‘Vvedite nazvanie faila’);

ReadLn(S);

Assign(f,s);

{$I-}

ReWrite(f);

{$I+}

PolDel(a,b,e,x);

Writeln(f,’Uravnenie x^2-x-6 na intervale (‘,a:0:2,’,’,b:0:2,’)’);

Writeln(f,’Imeet reshenie ‘,x:0:2);

Close(f)

end;

{===============================}

var

Key:Char;

Begin

repeat

Clrscr;

Writeln(‘1-Vvesti dannie’);

Writeln(‘2-Otobrazit rezultat’);

Writeln(‘3-Sohranit rezulat v fail’);

Writeln(‘0-Vihod’);

Key:=ReadKey;

Case Key of

‘1’:Vvod;

‘2’:VivRez;

‘3’:Save;

end;

until Key=’0′;

end.

приложение Б.

МЕНЮ ПРОГРАММЫ

ПРИЛОЖЕНИЕ Д.

ДИСКЕТА С ПРОГРАММОЙ

]]>