Провести
исследование внутренней сходимости численного интегрирования методами Симпсона
и трапеций различных функций, задаваемых с помощью функций языка C.
1.2 Подробное описание
задания
Постройте зависимости количества итераций от различный величин
критерия точности.
Постройте обратные зависимости критерия точности от количества
итераций.
Повторите все вышеуказанные исследования для случая, когда при
вычислении критерия точности разность значений интеграла на смежных итерациях
относится не к предыдущему значению, а к точному значению аналитически
вычисленного интеграла.
Исследуйте влияние увеличения верхнего предела интегрирования на
точность (при прочих неизменных величинах).
Предполагается,
что отрезок интегрирования [a,b] разбит на n равных частей системой точек (сеткой). Контроль внутренней
сходимости заключается в циклическом вычислении приближенных значений интеграла
для удваиваемого по сравнению со значением на предыдущем прохождении цикла
числа п. Отношение абсолютной величины разности этих значений к абсолютной
величине предыдущего приближенного значения принимается в качестве критерия достижения
точности вычисления интеграла.
Приведем
пример построения зависимости количества итераций от критерия точности для
подынтегральной функции 1/x, решенный при помощи метода трапеций, критерий точности
вычисляется как отношение разности значений интегралов, полученных на смежных
итерациях, к аналитическому значению.
Входные
данные: номер зависимости (в данном случае – 1), номер делителя (аналитическое
значение -2), номер метода, номер функции, верхний и нижний пределы,
коэффициент m,
равный 1.
Критерий
точности автоматически изменяется от 10-7 до 10-3, с
каждым шагом увеличиваясь в 101/24, таким образом, получается 25
точек, которых вполне хватает для исследования зависимости. На каждой итерации
кол-во отрезков, на которое делится отрезок интегрирования увеличивается в два
раза, т.е n
= 2iter, где itter – кол-во итераций. Циклически вычисляется до достижения заданного
критерия точности.
Вычисленные
значения сохраняются в файле “D:\Zavisimost1.txt”. После переноса значений в MS Excel создается таблица 1 и
строится график, изображенный на рисунке 1.
Таблица 1
критерий точности
1,00E-07
1,47E-07
2,15E-07
3,16E-07
4,64E-07
6,81E-07
1,00E-06
1,47E-06
2,15E-06
Кол-во итераций
22
21
20
20
19
19
18
18
17
критерий точности
3,16E-06
4,64E-06
6,81E-06
1,00E-05
1,47E-05
2,15E-05
3,16E-05
4,64E-05
6,81E-05
Кол-во итераций
17
16
16
15
15
14
14
13
13
критерий точности
1,00E-04
1,47E-04
2,15E-04
3,16E-04
4,64E-04
6,81E-04
1,00E-03
Кол-во итераций
12
12
11
11
11
10
10
Рисунок 1
Результаты
всех измерений приведены в таблицах 2, 3, 4, 5, 6.
Таблица 2 - Зависимости кол-ва итераций от критерия точности для
функций 1/x, 1/x^2, sin x
Кол-во итераций от
критерия точности
к предыдущему значению
к аналитическому
значению
критерий точности
Метод трапеций
Метод Симпсона
Метод трапеций
Метод Симпсона
1/x2
1/x
sin x
1/x2
1/x
sin x
1/x2
1/x
sin x
1/x2
1/x
sin x
1,00E-07
22
22
10
21
21
15
22
22
10
21
21
15
1,47E-07
21
21
10
20
20
14
21
21
10
20
20
14
2,15E-07
20
20
10
20
20
13
20
20
10
20
20
13
3,16E-07
20
20
10
19
19
13
20
20
10
19
19
13
4,64E-07
19
19
10
19
19
12
19
19
10
19
19
12
6,81E-07
19
19
10
18
18
12
19
19
10
18
18
12
1,00E-06
18
18
10
18
18
11
18
18
10
18
18
11
1,47E-06
18
18
10
17
17
11
18
18
10
17
17
11
2,15E-06
17
17
10
17
17
10
17
17
10
17
17
10
3,16E-06
17
17
10
16
16
10
17
17
10
16
16
10
4,64E-06
16
16
9
15
15
9
16
16
9
15
15
9
6,81E-06
16
16
9
15
15
8
16
16
9
15
15
8
1,00E-05
15
15
9
14
14
8
15
15
9
14
14
8
1,47E-05
15
15
9
14
14
7
15
15
9
14
14
7
2,15E-05
14
14
9
13
13
7
14
14
9
13
13
7
3,16E-05
14
14
8
13
13
6
14
14
8
13
13
6
4,64E-05
13
13
8
12
12
6
13
13
8
12
12
6
6,81E-05
13
13
8
12
12
5
13
13
8
12
12
5
1,00E-04
12
12
8
11
11
5
12
12
8
11
11
5
1,47E-04
12
12
7
11
11
5
12
12
7
11
11
5
2,15E-04
11
11
7
10
10
5
11
11
7
10
10
5
3,16E-04
11
11
7
10
10
4
11
11
7
10
10
4
4,64E-04
11
11
7
9
9
4
11
11
7
9
9
4
6,81E-04
10
10
6
9
9
4
10
10
6
9
9
4
1,00E-03
10
10
6
9
9
4
10
10
6
9
9
4
Таблица 3 - Зависимость критерия точности интегрирования для функций 1/x^2, 1/x
Критерий точности от
кол-во итераций
к предыдущему значению
к аналитическому
значению
кол-во итераций
Метод трапеций
Метод Симпсона
Метод трапеций
Метод Симпсона
1/x2
1/x
1/x2
1/x
1/x2
1/x
1/x2
1/x
1
4,25E-01
4,79E-01
3,81E-01
4,69E-01
1,38E+00
4,89E+00
8,68E-01
3,26E+00
2
3,06E-01
4,46E-01
2,15E-01
4,17E-01
5,72E-01
2,38E+00
3,03E-01
1,54E+00
3
1,57E-01
3,81E-01
7,35E-02
3,27E-01
2,04E-01
1,12E+00
8,14E-02
7,06E-01
4
5,87E-02
2,77E-01
1,71E-02
2,06E-01
6,42E-02
5,05E-01
1,75E-02
2,99E-01
5
1,89E-02
1,58E-01
4,52E-03
9,55E-02
1,95E-02
2,09E-01
4,55E-03
1,10E-01
6
6,17E-03
6,89E-02
1,81E-03
3,13E-02
6,23E-03
7,66E-02
1,82E-03
3,26E-02
7
2,20E-03
2,38E-02
8,72E-04
7,28E-03
2,21E-03
2,47E-02
8,74E-04
7,35E-03
8
8,77E-04
7,16E-03
4,34E-04
1,42E-03
8,79E-04
7,24E-03
4,34E-04
1,42E-03
9
3,82E-04
2,08E-03
2,17E-04
3,66E-04
3,82E-04
2,08E-03
2,17E-04
3,66E-04
10
1,77E-04
6,32E-04
1,08E-04
1,49E-04
1,77E-04
6,33E-04
1,09E-04
1,49E-04
11
8,49E-05
2,12E-04
5,42E-05
7,19E-05
8,49E-05
2,12E-04
5,43E-05
7,19E-05
12
4,16E-05
7,99E-05
2,71E-05
3,58E-05
4,16E-05
7,99E-05
2,71E-05
3,58E-05
13
2,06E-05
3,34E-05
1,36E-05
1,79E-05
2,06E-05
3,34E-05
1,36E-05
1,79E-05
14
1,02E-05
1,51E-05
6,78E-06
8,94E-06
1,02E-05
1,51E-05
6,78E-06
8,94E-06
15
5,10E-06
7,12E-06
3,39E-06
4,47E-06
5,10E-06
7,12E-06
3,39E-06
4,47E-06
16
2,55E-06
3,46E-06
1,70E-06
2,24E-06
2,55E-06
3,46E-06
1,70E-06
2,24E-06
17
1,27E-06
1,70E-06
8,48E-07
1,12E-06
1,27E-06
1,70E-06
8,48E-07
1,12E-06
18
6,36E-07
8,45E-07
4,24E-07
5,59E-07
6,36E-07
8,45E-07
4,24E-07
5,59E-07
19
3,18E-07
4,21E-07
2,12E-07
2,79E-07
3,18E-07
4,21E-07
2,12E-07
2,79E-07
20
1,59E-07
2,10E-07
1,06E-07
1,40E-07
1,59E-07
2,10E-07
1,06E-07
1,40E-07
Таблица 4.
Зависимости кол-ва итераций от критерия точности для функций sin 7x, sin 9x
Кол-во итераций от
критерия точности
к предыдущему значению
к аналитическому
значению
Критерий точности
Метод трапеций
Метод Симпсона
Метод трапеций
Метод Симпсона
sin(7x)
sin(9x)
sin(7x)
sin(9x)
sin(7x)
sin(9x)
sin(7x)
sin(9x)
1,00E-07
21
21
20
21
21
21
20
21
1,47E-07
20
21
20
20
20
21
20
20
2,15E-07
20
20
19
20
20
20
19
20
3,16E-07
19
20
18
19
19
20
18
19
4,64E-07
19
19
18
19
19
19
18
19
6,81E-07
18
19
17
18
18
19
17
18
1,00E-06
17
18
17
18
17
18
17
18
1,47E-06
17
18
16
17
17
18
16
17
2,15E-06
16
17
16
16
16
17
16
16
3,16E-06
16
16
15
16
16
16
15
16
4,64E-06
10
16
15
15
10
16
15
15
6,81E-06
10
15
14
15
10
15
14
15
1,00E-05
10
10
13
14
10
10
13
14
1,47E-05
10
10
13
14
10
10
13
14
2,15E-05
10
10
12
13
10
10
12
13
3,16E-05
10
10
12
13
10
10
12
13
4,64E-05
10
10
11
12
10
10
11
12
6,81E-05
10
10
11
11
10
10
11
11
1,00E-04
10
10
10
11
10
10
10
11
1,47E-04
10
10
10
10
10
10
10
10
2,15E-04
10
10
9
10
10
10
9
10
3,16E-04
9
10
9
9
9
10
9
9
4,64E-04
9
9
8
9
9
9
8
9
6,81E-04
9
9
8
8
9
9
8
8
1,00E-03
9
9
7
8
9
9
7
8
Таблица 5 - Зависимость критерия точности интегрирования для функций
sin x, sin 2x
Критерий точности от
кол-во итераций
к предыдущему значению
к аналитическому
значению
кол-во итераций
Метод трапеций
Метод Симпсона
Метод трапеций
Метод Симпсона
sin x
sin 2x
sin x
sin 2x
sin x
sin 2x
sin x
sin 2x
1
2,09E+02
6,67E-01
2,50E+02
9,00E-01
7,83E-01
3,94E+03
1,04E+00
5,91E+03
2
2,06E-01
5,00E-01
4,32E-02
1,59E-03
1,62E-01
9,87E+02
4,52E-02
1,05E+00
3
4,08E-02
5,01E-01
2,34E-03
5,01E-01
3,87E-02
4,93E+02
2,35E-03
3,29E+02
4
9,62E-03
5,01E-01
2,30E-04
5,02E-01
9,50E-03
2,46E+02
2,30E-04
1,64E+02
5
2,34E-03
5,02E-01
5,98E-05
5,03E-01
2,33E-03
1,23E+02
5,99E-05
8,21E+01
6
5,63E-04
5,04E-01
2,65E-05
5,06E-01
5,63E-04
6,16E+01
2,65E-05
4,11E+01
7
1,31E-04
5,08E-01
1,31E-05
5,12E-01
1,31E-04
3,08E+01
1,31E-05
2,05E+01
8
2,78E-05
5,17E-01
6,51E-06
5,26E-01
2,78E-05
1,54E+01
6,51E-06
1,03E+01
9
4,52E-06
5,35E-01
3,26E-06
5,54E-01
4,52E-06
7,70E+00
3,26E-06
5,13E+00
10
9,11E-08
5,75E-01
1,63E-06
6,21E-01
9,11E-08
3,85E+00
1,63E-06
2,57E+00
11
6,33E-07
6,75E-01
8,14E-07
8,19E-01
6,33E-07
1,93E+00
8,14E-07
1,28E+00
12
4,64E-07
1,04E+00
4,07E-07
2,26E+00
4,64E-07
9,63E-01
4,07E-07
6,42E-01
13
2,69E-07
1,29E+01
2,03E-07
8,96E-01
2,69E-07
4,81E-01
2,03E-07
3,21E-01
14
1,43E-07
4,64E-01
1,02E-07
2,36E-01
1,43E-07
2,41E-01
1,02E-07
1,60E-01
15
7,40E-08
1,58E-01
5,09E-08
9,56E-02
7,40E-08
1,20E-01
5,09E-08
8,02E-02
16
3,76E-08
6,84E-02
2,54E-08
4,36E-02
3,76E-08
6,02E-02
2,54E-08
4,01E-02
17
1,89E-08
3,20E-02
1,27E-08
2,09E-02
1,89E-08
3,01E-02
1,27E-08
2,01E-02
18
9,50E-09
1,55E-02
6,36E-09
1,02E-02
9,50E-09
1,50E-02
6,36E-09
1,00E-02
19
4,75E-09
7,62E-03
3,18E-09
5,06E-03
4,75E-09
7,51E-03
3,18E-09
5,01E-03
20
2,39E-09
3,81E-03
1,58E-09
2,51E-03
2,39E-09
3,79E-03
1,58E-09
2,49E-03
Таблица 6 - Зависимость критерия точности интегрирования для функций
sin 7x, sin 9x
Критерий точности от
кол-во итераций
к предыдущему значению
к аналитическому
значению
кол-во итераций
Метод трапеций
Метод Симпсона
Метод трапеций
Метод Симпсона
sin 7x
sin 9x
sin 7x
sin 9x
sin 7x
sin 9x
sin 7x
sin 9x
1
3,04E+01
2,28E+01
3,66E+01
2,72E+01
5,59E+00
6,91E+00
7,47E+00
9,18E+00
2
2,17E-01
1,95E-01
4,10E-02
4,53E-02
1,17E+00
1,41E+00
2,98E-01
4,31E-01
3
1,04E+00
1,04E+00
1,37E+00
1,36E+00
6,87E+00
8,95E+00
9,55E+00
1,24E+01
4
1,92E+00
3,28E+00
6,00E-01
1,33E+00
5,56E-01
1,06E+00
1,55E+00
4,40E+00
5
1,41E-01
2,74E-01
2,58E-02
7,72E-02
1,19E-01
2,02E-01
2,66E-02
8,43E-02
6
2,89E-02
4,93E-02
2,50E-03
5,57E-03
2,79E-02
4,64E-02
2,51E-03
5,61E-03
7
6,48E-03
1,08E-02
7,11E-04
1,25E-03
6,43E-03
1,07E-02
7,12E-04
1,26E-03
8
1,37E-03
2,26E-03
3,23E-04
5,39E-04
1,37E-03
2,26E-03
3,24E-04
5,40E-04
9
2,22E-04
3,66E-04
1,60E-04
2,64E-04
2,22E-04
3,66E-04
1,60E-04
2,65E-04
10
4,46E-06
7,37E-06
7,98E-05
1,32E-04
4,46E-06
7,37E-06
7,98E-05
1,32E-04
11
3,10E-05
5,13E-05
3,99E-05
6,59E-05
3,10E-05
5,13E-05
3,99E-05
6,59E-05
12
2,27E-05
3,75E-05
1,99E-05
3,30E-05
2,27E-05
3,75E-05
1,99E-05
3,30E-05
13
1,32E-05
2,17E-05
9,97E-06
1,65E-05
1,32E-05
2,17E-05
9,97E-06
1,65E-05
14
7,03E-06
1,16E-05
4,99E-06
8,24E-06
7,03E-06
1,16E-05
4,99E-06
8,24E-06
15
3,63E-06
6,00E-06
2,49E-06
4,12E-06
3,63E-06
6,00E-06
2,49E-06
4,12E-06
16
1,84E-06
3,04E-06
1,25E-06
2,06E-06
1,84E-06
3,04E-06
1,25E-06
2,06E-06
17
9,28E-07
1,53E-06
6,23E-07
1,03E-06
9,28E-07
1,53E-06
6,23E-07
1,03E-06
18
4,66E-07
7,70E-07
3,12E-07
5,15E-07
4,66E-07
7,70E-07
3,12E-07
5,15E-07
19
2,33E-07
3,86E-07
1,56E-07
2,58E-07
2,33E-07
3,86E-07
1,56E-07
2,58E-07
20
1,17E-07
1,93E-07
7,79E-08
1,29E-07
1,17E-07
1,93E-07
7,79E-08
1,29E-07
Рисунок 2. Зависимость количества итераций от критерия точности
Рисунок 3. Зависимость количества итераций от критерия точности
Рисунок 4. Зависимость критерия точности от количества итераций
(отношение разности к значению на предыдущей итерации)
Рисунок 5. Зависимость критерия точности от количества итераций
(отношение разности к аналитическому значению)
Рисунок 6. Зависимость критерия точности от количества итераций
Рисунок 7. Зависимость критерия точности от количества итераций
Рисунок 8. Зависимость критерия точности от количества итераций
Рисунок 9. Зависимость критерия точности от количества итераций
Рисунок 10. Зависимость критерия точности от количества итераций
интегрирования 1/х при разных верхних пределах интегрирования.
Если внимательно посмотреть результаты, то можно заметить отсутствие
зависимости кол-ва итераций от заданного критерия точности для функции sin2x. Так как исследование проходит на интервале
[0, π], то величина данного интеграла равна 0 (то есть в условиях
программного расчета близка к нулю). Широко известно, что деление на ноль «не
приветствуется», но если проводить расчет в данной программе, то можно увидеть,
что в конце концов появится результат – 32 итерации, это происходит из-за того,
что кол-во отрезков n, на которые разделен интервал интегрирования,
имеет тип int, то есть четырехбайтовое целое знаковое число.
На 31 итерации n приняло свой максимум, и на следующих
итерациях критерий становится равным 0, что удовлетворяет любому заданному
критерию, поэтому я решил, что эти измерения не целесообразны. Из второй зависимости
видно что критерий точности для этой функции на двадцатой итерации только
начинает приближаться к заданному интервалу критериев точности (порядка 10^-3).
Зависимости для функций 1/x, 1/x^2, sin7x и sin9x ведут себя почти
одинаково при всех данных, а вот sinx отличается относительно
«рекордной» точностью в измерениях (особенно расчетом методом трапеций, этот
метод лучший при расчете площади под прямой линией).
Интегралы всех функций, кроме sinx, имеют лучшую точность при расчете методом Симпсона, но с учетом, что
интервал интегрирования разбит на достаточно большое кол-во отрезков. На первых
итерациях данный метод дает точность хуже, так как он рассчитан на более-менее
изогнутые и не постоянные функции. Этим же объясняется его «не лучший» расчет
интеграла sinx, так как эта функция, по-сравнению с
остальными, менее изогнута (на заданном интервале), например sin mx очень часто
изгибается, а 1/x и 1/x^2 очень
стремительно вначале убывает.
При исследовании на функциях 1/x и sin2x влияния увеличения
верхнего предела на точность установлено что, на точность интегрирования
функции 1/x увеличение верхнего предела почти не влияет,
это видно по графику на рисунке 10.
А вот на
функцию sin2x
увеличение верхнего предела влияет значительно. При малых значениях итераций с
увеличением предела точность ухудшается, а вот при итерациях > 4-5
значительное улучшение.
Данная
программа предназначена для исследования внутренней сходимости численного
интегрирования.
4.2 Условия применения.
Программа
предъявляет очень скромные требования к ресурсам вычислительной установки. Для
компиляции и сборки программы используется Microsoft Visual С++ 2005.
4.3 Описание задачи
Построить зависимости количества итераций от различный величин
критерия точности.
Построить обратные зависимости критерия точности от количества
итераций.
Повторить все вышеуказанные исследования для случая, когда при
вычислении критерия точности разность значений интеграла на смежных итерациях
относится не к предыдущему значению, а к точному значению аналитически
вычисленного интеграла.
Исследовать влияние увеличения верхнего предела интегрирования на
точность (при прочих неизменных величинах).
Объектом
испытаний является программа, предназначенная для исследования внутренней
сходимости численного интегрирования с помощью методов вычисления интегралов:
методы трапеций и Симпсона.
5.2 Цель испытаний
Целью
испытаний является проверка точности работы программы для данной задачи.
5.3 Требования к программе
Во время
испытаний следует проверить правильное вычисление заданных интегралов и
критериев точности.
5.4 Средства и порядок испытаний
Испытания
следует проводить на установке удовлетворяющей п.1.2. Для проверки корректности
работы программы достаточно провести более трех вычислений различных
интегралов.
5.5 Методы испытаний
В качестве
метода испытаний предоставляется следующий пример работы программы.
При запуске
программы выдается сообщение о выборе зависимости. Нажимаем 2 и ENTER. Далее выбираем делитель
для вычисления критерия точности, выберем аналитическое значение (жмем 2 и ENTER). Далее выберем метод
трапеций вычисления значений интеграла, жмем 1 и подтверждаем кнопкой ENTER. Выберем функцию m/x (это номер 2). Вводим
пределы 1 и 3 и коэффициент m=1. Исследовать влияние увеличение верхнего предела не будем,
жмем любую кнопку, кроме ‘y’. Ждем, и после сообщения возвращаемся в самое начало
нажатием ESC. Теперь в файле “D:\Zavisimost1.txt” должны быть записаны данные.
Данные файла
“D:\Zavisimost1.txt”:
«Данные для
построения зависимости критерий точности от кол-ва итераций
Выбранное отношение
для критерия точности -2
Выбранный
метод -1
Выбранная
функция -2
Нижний предел
интегрирования a=2,000000
Верхний предел
интегрирования b=3,000000
Коэффициент
m=1,000000
Кол-во
итераций Критерий точности
1 4,316031e-001
2 2,108191e-001
3 1,040970e-001
4 5,171560e-002
5 2,577427e-002
6 1,286624e-002
7 6,427892e-003
8 3,212639e-003
9 1,605993e-003
10 8,029148e-004
11 4,014370e-004
12 2,007134e-004
13 1,003554e-004
14 5,017739e-005
15 2,508862e-005
16 1,254429e-005
17 6,272139e-006
18 3,136068e-006
19 1,568034e-006
20 7,840168e-007»
6. Руководство пользователя
6.1 Назначение программы
Данная
программа предназначена для исследования внутренней сходимости численного
интегрирования методами Симпсона и трапеций для различных функций.
6.2 Условия и характеристики выполнения программы
Программа
была отлажена и проверена на вычислительной установке PC c процессором Intel Core 2 Duo CPU 7350 2.0GHz, работающей под
управлением операционной системы Windows XP SP 3 версия 5.1 сборка
2600.xpsp.080413-2111.
Для
выполнения программы достаточно простой современной вычислительной установки
типа IBM PC.
Для
компиляции и сборки программы требуется компиляторы Microsoft Visual С++ 2005 Express Edition или Microsoft Visual Studio 2008.
6.3 Выполнение программы
Запустить
исполняемый файл и следовать инструкциям на экране.
6.4 Сообщения оператору
В ходе работы
программы пользователю будет выведен ряд сообщений, информирующих его о
следующем шаге, а именно:
- «Провести
исследование влияния увеличения верхнего предела?? Y???» - если требуеся то
жмем ‘y’,
если нет, то любую кнопку.
6.5 Входные и выходные данные
Входными
данными для данной программы будут номера выбранной зависимости (критерий
точности от кол-ва итераций и наоборот), метода вычисления интеграла (методы
трапеций и Симпсона), нужной функции, делителя для вычисления критерия (либо
значение интеграла на предыдущем прохождении либо аналитическое значение), а
также пределы интегрирования и коэффициент m.
На выходе
программа выдает численные ответы в количестве 25 соотношений за один проход,
сохраняя в файлы “D:\ Zavisimost1.txt” и “D:\ Zavisimost2.txt “.
6.6 Сборка программы
Сборка
программы осуществляется путем компиляции и компоновки файла с исходным текстом
(в количестве 4 файлов) программы в среде компилятора Microsoft Visual С++ 2005 Express Edition.
Данная
программа предназначена для исследования внутренней сходимости численного
интегрирования методами Симпсона и трапеций для различных функций.
Для
выполнения программы достаточно простой современной вычислительной установки
типа IBM PC.
Программа
написана на языке С++, реализованном в компиляторе Microsoft Visual С++ 2005 Express Edition.
7.2 Функциональное назначение
Программа
предназначена для исследования внутренней сходимости численного интегрирования
методами Симпсона и трапеций для функций (подынтегральных выражений) sin(mx), m/x, m/x2.
7.3 Описание логической структуры
Функция void Zavisimost1(char,int,int,int)- проводит построение
зависимости кол-ва итераций от заданного критерия точности, принимает код
клавиши для перехода к определенному пункту меню (в первый раз принимает 49),
также принимает значения уже выбраных пунктов меню.
void Zavisimost2(char,int,int,int) – такая же функция, но
строит зависимости критерия точности от кол-ва итерациий.
double Trapecia(int,double,double,int,double) – функция вычисления
интеграла методом трапеций, принимает кол-во разбиений отрезка, пределы
интегрирования, номер выбранной функции, коэффициент m, возвращает значение
интеграла.
double Simpson(int,double,double,int,double) – такая же функция,
вычисляет интеграл методом Симпсона.
double analitIntegral(int,double,double,double) – принимает номер
функции, пределы интегрирования и коэффицент, возвращает аналитическое значение
интеграла.
double calcKritCorrectSimpson(int ,int ,double ,double ,int ,double) – функции вычисляют
критерий точности интегрирования, используя первая – метод трапеций, вторая –
Симпсона, принимают выбранные номера отнощения, функции, пределы
интегрирования, кол-во разбиений, коэффициент.
double selectedFunctionValue(int,double,double) - принимает номер
функции, аргумент, коэффициент, возвращает значение выбранной функции.
Далее следуют
все функции выбора и проверки его правильности:
int selectZavisimost()-выбор зависимости.
int selectedZavisimostFunction()-проверка, вывод повторного выбора
при неправильности.
Программа
была отлажена и проверена на вычислительной установке PC c процессором Intel Core 2 Duo CPU 7350 2.0GHz, работающей под
управлением операционной системы Windows XP SP 3 версия 5.1 сборка
2600.xpsp.080413-2111.
Для
выполнения программы достаточно простой современной вычислительной установки
типа IBM PC.
7.5 Входные и выходные данные
Входными
данными для данной программы будут номера выбранной зависимости (критерий
точности от кол-ва итераций и наоборот), метода вычисления интеграла (методы
трапеций и Симпсона), нужной функции, делителя для вычисления критерия (либо
значение интеграла на предыдущем прохождении либо аналитическое значение), а
также пределы интегрирования и коэффициент m.
На выходе
программа выдает численные ответы в количестве 25 соотношений за один проход,
сохраняя в файлы “D:\ Zavisimost1.txt” и “D:\ Zavisimost2.txt “.
8.Текст
программы
//файл Kursovoy.h подключаемый во все файлы
//прототипы всех испульзуемых функций и подключение библиотек
#ifndef Kursovoy_h
#define Kursovoy_h
#include "stdafx.h"
#include <iostream>
#include "math.h"
#include "locale.h"
#include "conio.h"
using namespace std;
void main(); //головная функция, самое начало программы
int selectZavisimost(); //функция вывода меню выбора зависимости
int selectedZavisimostFunction(); //функция проверки
неправильности выбора зависимости и вывода соответствующего сообщения
int selectOtnoshenie(); //выбор отношения
int selectedOtnoshenieFunction(FILE*,int); //вывод сообщения о
неправильности выбора и возврат к выбору
int selectMethod(); //тот же выбор, но метода
int selectedMethodFunction(FILE*,int,int); //опять же про
неправильный выбор, параметры - ссылка на файл, и значения выбранных
зависимости и делителя
int selectFunction(); //выбор функции
int selectedFunctionFunction(FILE*,int,int,int); //по аналогии можно догадаться
double Trapecia(int,double,double,int,double); //метод трапеций
(возвращает значение интеграла для данной функции,пределов и кол-ва отрезков
разбиения)
f=fopen("D:\\Zavisimost1.txt","at");//файл для записи данных
fprintf(f,"%s","Данные для построения зависимости
кол-во итераций от критерия точности\t\n");
double krT; //переменная, значения которой сравниваются с заданным
критерием точности
//далее следует цикл выбора исходных данных при повторном
выполнении программы (чтобы не начинать всю программу с самого начала)
do
{
if (key==49) selectedOtnoshenie=selectedOtnoshenieFunction(f,1);//если
была нажата кнопка 1 (по умолчанию в первый раз выполнения программы),
выполняется функция выбора делителя
if (key==49||key==50)
selectedMethod=selectedMethodFunction(f,1,selectedOtnoshenie);//кнопка 2 (также
выполняется и при предыдущем выборе
if (key==49||key==50||key==51)
selectedFunction=selectedFunctionFunction(f,1,selectedOtnoshenie,selectedMethod);
//клавиша 3
else {cout<<"\nПожалуйста еще
разок";key=_getch();}//если требуемая клавиша не нажата
}
while((key!=49)&&(key!=50)&&(key!=51)); //то цикл
выполняется снова
double a =
selectedNizhPredel(f,1,selectedOtnoshenie,selectedMethod,selectedFunction);//запускается функция выбора нижнего предела
double b = selectedVerhPredel(f); //верхнего
double m = selectedKoefM(f); //коэффициента m
printf("%s\t","Критерий точности");
printf("%s\n","Кол-во итераций"); //вывод на
экран
fprintf(f,"%s\t","Критерий точности"); //и в
файл
fprintf(f,"%s\n","Кол-во итераций");
double krT0=1e-7; //начинается цикл решения
for(int i=0; i<25; i++) //25 точек для установления зависимости
вполне должно хватить
{
double itter=0;
int N=1;
do
{
itter++; //текущая иттерация
N=2*N; //кол-во отрезков для интегрирования с каждым разом
удваивается
if(selectedMethod==1) //если был выбран метод 1, запускается
функция для определения критерия точности, используящая в вычислении метод
Трапеций
//файл ReturnKurs.cpp, здесь описанны функции для подсчетов,
вычислений, решений и тому подобное...
#include "stdafx.h"
#include "Kursovoy.h"
double calcKritCorrectTrapecia(int selectedOtnoshenie,int
selectedFunction,double a,double b,int N,double m) //вычисляет критерий точности с помощью метода трапеций
double Trapecia(int N,double a,double b,int selectedFunction,double
m) //вот ОН - сам метод трапеций
{
double I,h,x; //переменные значение интеграла, шаг по пределу
интегрирования, значение аргумента на данном шаге
x=a;
h=(b-a)/N; //так вычислется h
I=h*(selectedFunctionValue(selectedFunction,b,m)+selectedFunctionValue(selectedFunction,a,m))/2;//первое
значение интеграла при не разбиении его вообще на отрезки
for(int i=0;i<N;++i) //на каждом шаге
{
x=x+h;
I=I+h*selectedFunctionValue(selectedFunction,x,m);//к значению
прибавляется значение функции в данной точке умноженное на значение аргумента
}
return I; //возвращается значение интеграла (конечно же не точное,
в ином случае смысла в этой программе не было бы совсем)
}
double Simpson(int N,double a,double b,int
selectedFunction,double m) //не менее важный метод Симпсона
{
double I,h,x; //тоже самое
h=(b-a)/N;
I=h*(selectedFunctionValue(selectedFunction,b,m)+selectedFunctionValue(selectedFunction,a,m))/3;//но первое значение чуть по другой формуле
x=a;
for(int i=1;i<N;++i) //два цикла, для четных x и нет, этот для четных
{
x=x+2*h; //т.е от первоначального значения отдаляемся на два шага