Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Схема с автоматическим выбором шага по заданной точности



Метод 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

Функция f(x) a b Метод интегрирования Значение интеграла
–2 средних 5.983
трапеций –6.699
Симпсона 8.896
автомат-метод 2 6.118
Гаусса 2 6.067
Гаусса 3 –3.367
средних 0.100
трапеций 0.153
–8 Симпсона 713.3
–2 автомат-метод 2 –69.42
–5 Гаусса 2 167.6
–1 Гаусса 3 22.09
средних 3.533
–2 автомат-метод 2 154.73
–4 Симпсона 20.375
трапеций 0.153

Литература

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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.031 с.)
Главная | Случайная страница | Обратная связь