Учебная работа. Курсовая работа: Метод половинного деления 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.
приложение Б.
МЕНЮ ПРОГРАММЫ
ПРИЛОЖЕНИЕ Д.
ДИСКЕТА С ПРОГРАММОЙ
]]>