Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Схема с автоматическим выбором шага по заданной точности ⇐ ПредыдущаяСтр 7 из 7
Метод 1. Одним из вариантов вычисления интеграла с заданной точностью является следующий. Задают первоначальное число интервалов разбиения m и вычисляют приближенное значение интеграла S1 выбранным методом. 2. Число интервалов удваивают m = 2m. Вычисляют значение интеграла S2. 4. Если |S1 – S2| ³ e (e – заданная погрешность), то S1 = S2, расчет повторяют – переход к пункту 2. 5. Если |S1 – S2| < e, т.е. заданная точность достигнута, выполняют вывод результатов: S2 – найденное значение интеграла с заданной точностью e, m – количество интервалов. Метод 2. Анализ формул (9.1), (9.2) и (9.3) показывает, что точное значение интеграла находится между значениями ФСР и ФТР, при этом имеет место соотношение ФСИ = (ФТР - 2× ФСР)/3. Это соотношение часто используется для контроля погрешности вычислений. Расчет начинается с m = 2 и производится по двум методам, в результате получают ФСР, ФТР. Если |ФСР – ФТР| ³ e, увеличивают m = 2m и расчет повторяют. Формулы Гаусса При построении предыдущих формул в качестве узлов интерполяционного многочлена выбирались середины и (или) концы интервала разбиения. При этом оказывается, что увеличение количества узлов не всегда приводит к уменьшению погрешности, т.е. за счет удачного расположения узлов можно значительно увеличить точность. Суть методов Гаусса порядка n состоит в таком расположении n узлов интерполяционного многочлена на отрезке [xi, xi+1], при котором достигается минимум погрешности квадратурной формулы. Анализ показывает, что узлами, удовлетворяющими такому условию, являются нули ортогональнoго многочлена Лежандра степени n (см. подразд. 8.1). Для n = 1 один узел должен быть выбран в центре отрезка, следовательно, метод средних является методом Гаусса 1-го порядка. Для n = 2 узлы должны быть выбраны следующим образом: , и соответствующая формула Гаусса 2-го порядка имеет вид . Для n = 3 узлы выбираются следующим образом: , и соответствующая формула Гаусса 3-го порядка имеет вид .
9.2. Пример выполнения задания Написать и отладить программу вычисления интеграла от функции f(x) = 4x - 7sinx на интервале [-2, 3] методом Симпсона с выбором: по заданному количеству разбиений n и заданной точности e. Панель диалога будет иметь вид, представленный на рис. 9.4. Как и в предыдущих примерах, приведем только тексты функций-обработчиков соответствующих кнопок: typedef double (*type_f)(double); double fun(double); double Simps(type_f, double, double, int); //--------------------- Текст функции-обработчика кнопки РАСЧЕТ -------------------- double a, b, x, eps, h, Int1, Int2, pogr; int n, n1; a = StrToFloat(Edit1-> Text); b = StrToFloat(Edit2-> Text); eps = StrToFloat(Edit3-> Text); n = StrToInt(Edit4-> Text); h = (b - a)/100; // Шаг вывода исходной функции Chart1-> Series[0]-> Clear(); for(x = a-h; x< b+h; x+=h) Chart1-> Series[0]-> AddXY(x, fun(x)); switch(RadioGroup2-> ItemIndex) { case 0: Memo1-> Lines-> Add(" Расчет по разбиению на n = " + IntToStr(n)); Int1 = Simps(fun, a, b, n); break; case 1: n1=2; Memo1-> Lines-> Add(" Расчет по точности eps" ); Int1 = Simps(fun, a, b, n1); do { n1*=2; Int2 = Simps(fun, a, b, n1); pogr = fabs(Int2-Int1); Int1 = Int2; } while(pogr > eps); Memo1-> Lines-> Add(" При n = " +IntToStr(n1)); break; } Memo1-> Lines-> Add(" Значение интеграла = " + FloatToStrF(Int1, ffFixed, 8, 6)); //------------------------- Метод Симпсона ------------------------------- double Simps(type_f f, double a, double b, int n) { double s=0, h, x; h=(b-a)/n; x=a; for(int i=1; i< =n; i++) { s+=f(x)+4*f(x+h/2)+f(x+h); x+=h; } return s*h/6; } //----------------- Подынтегральная функция f(x) --------------------- double fun(double x) { return 4*x - 7*sin(x); // На интервале [-2, 3] значение 5, 983 }
Рис. 9.4 9.3. Индивидуальные задания Написать и отладить программу вычисления интеграла указанным методом двумя способами – по заданному количеству разбиений n и заданной точности e (метод 1). Реализацию указанного метода оформить отдельной функцией, алгоритм которой описать в виде блок-схемы. Таблица 9.1
Литература 1. Бусько, В. Л. Основы программирования в среде С++ Builder: лаб.практикум по курсу «Основы алгоритмизации и программирования» для студ. 1 – 2-го курсов БГУИР. В 2 ч. Ч. 1 / Бусько В. Л. [и др.]. – Минск: БГУИР, 2007. 2. Батура, М. П. Основы алгоритмизации и программирования. Язык Си: учеб.пособие / М. П. Батура, В. Л. Бусько, А. Г. Корбит, Т. М. Кривоносова. – Минск: БГУИР, 2007. 3. Синицын, А. К. Программирование алгоритмов в среде Builder C++: лаб.практикум по курсам «Программирование» и «Основы алгоритмизации и программирование» для студ. 1-2 курсов всех спец. БГУИР дневн. и веч. форм обуч.: в 2 ч. / А. К. Синицын – Минск: БГУИР. Ч. 1. – 2004, Ч. 2. – 2005. 4. Вирт, Н. Алгоритмы и структуры данных / Н. Вирт – СПб.: Невский диалект, 2001. 7. Архангельский, А. Я. Программирование в С++ Builder 6 / А. Я. Архангельский. – М.: ЗАО “Издательство БИНОМ”, 2002. 8. Демидович, Е. М. Основы алгоритмизации и программирования. Язык СИ / Е. М. Демидович. – Минск: Бестпринт, 2001. 9. Кнут, Д. Искусство программирования: т. 1–3. Основные алгоритмы / Д. Кнут – М.: Издательский дом «Вильямс», 2004. 10. Топп, У. Структуры данных в С++: пер. с англ. / У. Топп, У. Форд – М.: ЗАО «Издательство БИНОМ», 2000. 11. Синицын, А. К. Алгоритмы вычислительной математики: учебно-метод. пособие по курсу «Основы алгоритмизации и программирования» / А. К. Cиницын, А. А. Навроцкий. – Минск: БГУИР, 2007. 12. Калиткин, Н. Н. Численные методы / Н. Н. Калиткин – М.: Наука, 1978. 13. Бахвалов, Н. С. Численные методы / Н. С. Бахвалов – М.: Наука, 1975. 14. Егоров, А. А. Вычислительные алгоритмы линейной алгебры: учеб. пособие / А. А. Егоров – Минск: БГУ, 2005. 15. Волков, Е. А. Численные методы / Е. А. Волков – М.: Наука, 1982. 16. Васильков, Ю. В. Компьютерные технологии вычислений в математическом моделировании / Ю. В. Васильков, Н. Н. Василькова – М.: Финансы и статистика, 2001. 17. Крылов, В. И. Вычислительные методы высшей математики. Т.1 / В. И. Крылов и др. – Минск: Выш. шк., 1972. 18. Крылов, В. И. Вычислительные методы высшей математики. Т.2 / В. И. Крылов и др. – Минск: Выш. шк., 1975.
Св. план 2008, поз. 46
Учебное издание
БуськоВиталий Леонидович, КорбитАнатолий Григорьевич, КривоносоваТатьяна Михайловна, НавроцкийАнатолий Александрович Шилин Дмитрий Леонидович
Основы программирования в среде C++ Builder
Лабораторный практикум по курсу «Основы алгоритмизации и программирования» для студентов 1 – 2-го курсов БГУИР В 2-х частях Часть 2
Редактор Е. Н. Батурчик __________________________________________________________________________ Подписано в печать. Формат 60x84 1/16 Бумага офсетная. Печать ризографическая. Гарнитура «Times» Усл. печ. л. Уч. изд. л. Тираж 500 экз. Заказ __________________________________________________________________________ Издатель и полиграфическое исполнение: Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники» Лицензия ЛП №156 от 05.02.2001. Лицензия ЛП №509 от 03.08.2001. 220013, Минск, П. Бровки, 6 * Стандартными операциями при работе со стеками являются – добавление элемента в стек push (), извлечение – pop () и чтение информации из вершины без извлечения – peek(). Популярное:
|
Последнее изменение этой страницы: 2016-07-13; Просмотров: 1363; Нарушение авторского права страницы