Основы программирования (Иванова Г.С. Основы программирования), страница 11
Описание файла
PDF-файл из архива "Иванова Г.С. Основы программирования", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика" в общих файлах.
Просмотр PDF-файла онлайн
Текст 11 страницы из PDF
Практикум. Точность решения задачвычислительной математикиВычислительная математика занимается рассмотрением численных методов вычисления значений функций, решения алгебраических и трансцендентных уравнений, систем уравнений, интерполяции функций и т.д. К тойже группе задач относится и задача о нахождении суммы ряда, рассмотренная в предыдущем параграфе. Естественно в рамках одного параграфа невозможно рассмотреть алгоритмы решения всех задач данного раздела математики, но попробуем на примере двух из них продемонстрировать проблемыдостижения заданной точности результатов, которые возникают при решении задач этой области.Пример 3.6. Разработать программу вычисления определенного интеграла функции f(x) на заданном отрезке [а, Ь] методом прямоугольников.Определенный интеграл вычисляется как площадь фигуры, ограниченной графиком функции, отрезком оси абсцисс и вертикальными линиями,проходящими через границы отрезка.
Метод прямоугольников предполагает,что площадь определяется как сумма площадей п прямоугольников, основанием которых является п-я часть отрезка [а,Ь], а стороной - значение функции на одном из концов отрезка (например, левом, как на рис. 3.15).ИтакSl= f(xi)x5 + f(x2)x6 + f(x3)x5 + ...+ f(x„)x5 = 5xZ f(xi),i=lгде 5 = (b-a) / n.Значение определенного интеграла SI,определенное по данной формуле, является неточным, причем с увеличением количества отрезков п точность значения S1 увеличивается.Считают, что значение определено с заданнойточностью, если абсолютная величина разности двух последовательных приближений результата, полученных при разных значенияхп, не превышает заданной погрешности.Для определения момента достижениязаданной точности необходимо организоватьОаb Xп=6Рис.
3.15. Вычислениеопределенного интеграламетодом прямоугольника63Часть L Основы алгоритмизации и процедурное программирование/(Начало j©/Ввод у/a,b,eps /S1:=0Sl:=10''r^i:=l,n,lVnn:=5S2:=S1n:=2n1d:=(b-a)/nx:=a^Рис. 3.16. Схема алгоритма вычисления определенного интегралаеще один - внешний цикл, в котором значение п будем увеличивать, например, в два раза, и рассчитывать значение S1, предварительно сохранив предыдущее значение S1 в переменной S2. Цикл должен завершаться, когда абсолютная величина разности двух приближений S1 и S2 станет меньше s. Исходное значение S2 примем достаточно большим, чтобы цикл не завершилсяпри лервой проверке условия.Схема алгоритма вычисления определенного интеграла для функцииf(x) = х^ - 1 приведена на рис.
3.16.Ниже приведена программа, реализующая данную схему алгоритма.Program ex;Var а, b,Sl,S2,d, eps,x:real:n, i.'longint;BeginWriteLnCВведите a, b и эпсилон:');ReadLnfa, b, eps);S1:=1E+10;n:=5;643. Управляющие операторы языкаrepeatS2-S1;п:=п*2;d:^(b'a)/n;х:=а;S1-0;for i:=l to п dobeginS]:=SI+x*X'l;x:=x+d;end;SJ:=SJ*d;until abs(Sl-S2)<eps:WriteLnCI=\Sl:10:6);EndПри выполнении программы с разными значениями погрешности eps иотрезком [0,2] получаем разные приближения результата I (табл. 3.2). Точноезначение определенного интеграла равно 2/3. Определим абсолютную и относительную погрешности результата.В данном случае абсолютная погрешность результата всегда будетменьше eps, так как это определяется самим методом.
Последнее верно недля любого метода.Пример 3.7. Разработать программу, которая определяет корень непрерывной функции f(x) на заданном отрезке [а, Ь] методом хорд.Метод работает в том случае, если значения функции на концах отрезкаразных знаков, т.е. если функция только касается оси абсцисс, то ее кореньданным методом определить нельзя. Если на заданном отрезке у функции несколько корней, то, используя данный метод, найдем один из них.Метод хорд заключается в следующем. Значения функции на концах отрезка соединяют отрезком прямой.
В точке пересечения этой прямой с осьюабсцисс определяют значение функции. Если это значение меньше заданнойпогрешности функции, то абсцисса точки пересечения считается корнемТ а б л и ц а 3.2epsпIAl5i,%6400.6604200.0060.90.00151200.6658850.00020.060.0001409600.6665690.000040.0120.01165Часть 1. Основы алгоритмизации и процедурное программированиефункции, иначе корень функцииищется на том отрезке из двух полученных, для которого значенияфункции на концах разных знаков.На рис.
3.17 показана графическаяинтерпретация метода.На рис. 3.18 представлена схема алгоритма программы для функции f(x) = х^ - 1.Полученный алгоритм является не структурным, так как цикл,который в нем использован, не является ни циклом-до, ни цикломпока. Для преобразования алгоритма в структурный используем при-Рис. 3.17. Нахождение корняметодом хордГ Начало j//Вводa,b,epsУ/fa:=a*a-lfb:=b*b-lнет-^^2-<fa*fb>07' "Метод неприменим(КонецjРис.
3.18. Схема алгоритма нахождения корня методом хорд66Часть L Основы алгоритмизации и процедурное программированиеРис. 3.19. Соотношение Лу и А^ в зависимости от вида функции:а ~ угол наклона производной в корне больше 45**; б - меньше 45**функции. Однако, если бы производная функции в точке корня была близкак нулю, это соотношение было бы обратным (рис. 3.19), и, следовательно,метод оказался бы неприменимым.В качестве альтернативы можно предложить алгоритм, в котором выходиз цикла вычислений выполняется, когда разность между двумя соседнимиприближениями значений корня становится меньше заданного eps (по аналогии с примером 3.6).
Однако этот алгоритм был бы не применим для поискакорня, если угол наклона производной функции в корне больше 45°.Следовательно, применяя тот или иной методы вычислительной математики, необходимо проверять обеспечение точности получаемых результатов.Задания для самопроверкиЗадание 1. Разработайте программу вычисленияarctg X = X - х^/З + х5/5 - х^/7 + ...при заданном значении х и точности 10*^, 10"^. Оцените количество итераций вкаждом случае.Задание 2.
Разработайте программу, которая определяет сумму первых к чиселпоследовательности Фибоначчи. Последовательность задана закономF, = l,Fn = F.п-1 + F,п-2для п > 2.Задание 3. Разработайте программу вычисления длины кривой на отрезке [0,4].Кривая задана уравнением у=х^^. Вычисления выполните с точностью 10'^, Ю""*.Оцените количество итераций в каждом случае.Задание 4. Разработайте программу, которая определяет, является ли введенноечисло п простым.__,,,Задание 5.
Разработайте программу вычисления:683, Управляющие операторы языкаем, рассмотренный в примере 3.3. А именно: повторяем в конце тела циклаоператоры, выполняемые в начале цикла до условия, и организуем цикл, какцикл-пока. Поскольку выход из цикла-пока осуществляется по нарушениюусловия цикла, придется также изменить условие цикла. Программа, реализующая структурный вариант алгоритма, имеет следующий вид:Program ex;Var a,bjjajb,eps,x:real;BeginWriteLnCBeedume a, b и эпсилон: *);ReadLn(a, b, eps);fa:^a*a-l;Jb:^b''b'l;iffa*fb>-0 then WriteLn(*Метод не пргшеним. *)elsebeginx:=(b'a) *abs(fa)/abs(fa'fb)+a;while abs(f)>-eps dobegin{условие выхода из цикла}iffaj<0 thenbegin b:=x; Jb:=f; endelse begin a:=x; fa:=f; end;х:-(Ыа) *abs(fa)/abs(fa'fb)'^a;f:-x*x-l;end;WriteLnCnpu x= \ x:9:6, ' y= \ f:10:8);end;EndМеняя значение погрешности, получим разные значения корня и значения функции в корне (табл.
3.3). Зная точное значение корня х=1, определимпредельную абсолютную и относительную погрешности в каждом случае.Из таблицы видно, что погрешность корня меньше погрешности значенияТ а б л и ц а 3.3eps = AyXУАх5х, %0.010.997260-0.005471950.0030.30.0010.999695-0.000609480.000310.030.00010.999966-0.000067740.0000340.003673, Управляющие операторы языка3.6. Неструктурные алгоритмы и их реализацияС точки зрения теории программирования неструктурные оператор ипроцедуры передачи управления являются «лишними», так как любой алгоритм может быть преобразован в структурный и реализован без них. Однакоинтуитивно построенные алгоритмы, как это видно на ттредыдущих примерах, часто получаются неструктурными, и для их реализации может потребоваться использование неструктурных вариантов передач управления.
Проанализируем достоинства и недостатки реализации неструктурных алгоритмов.Для организации неструктурных передач управления используют оператор безусловной передачи управления goto и специальные процедуры.Оператор безусловной передачи управления. Этот оператор передаетуправление в точку, определенную специальной меткой (рис.
3.20).Все метки в программе должны быть описаны инструкцией объявленияметок label (рис. 3.21). Метка ставится перед любым выполняемым оператором программы, причем на один оператор можно поставить несколько меток.Неструктурную передачу управления таюке осуществляют следующиепроцедуры:Break - реализует выход из цикла любого типа;Continue - осуществляет переход на следующую итерацию цикла,игнорируя оставшиеся до конца тела цикла операторы;Halt (<код, завершения>) - осуществляет выход из программы, возвращая операционной системе заданный код завершения. Считается, что программа завершилась нормально, если код завершения равен нулю.
Возвращение кода завершения, отличного от нуля, обычно означает,что программа завершена по обнаружении каких-либо ошибок. Коды завершения назначаются программистом, а информация о них помещается в программную документацию;Exit- осуществляет выход из подпрограммы (см. главу 5). Если процедура использована в основной программе, то она выполняется аналогичноHalt.-*/^ label Л - j-*/goto V-H МеткаРис.