Реферат по предмету "Информатика"


Исследование точности численного интегрирования 2

--PAGE_BREAK--
2. Результаты исследования


Приведем пример построения зависимости количества итераций от критерия точности для подынтегральной функции 1/x, решенный при помощи метода трапеций, критерий точности вычисляется как отношение разности значений интегралов, полученных на смежных итерациях, к аналитическому значению.

Входные данные: номер зависимости (в данном случае – 1), номер делителя (аналитическое значение -2), номер метода, номер функции, верхний и нижний пределы, коэффициент m, равный 1.

Критерий точности автоматически изменяется от 10-7 до 10-3, с каждым шагом увеличиваясь в 101/24, таким образом, получается 25 точек, которых вполне хватает для исследования зависимости. На каждой итерации кол-во отрезков, на которое делится отрезок интегрирования увеличивается в два раза, т.е n= 2iter, где itter– кол-во итераций. Циклически вычисляется до достижения заданного критерия точности.

Вычисленные значения сохраняются в файле “D:\Zavisimost1.txt”. После переноса значений в MSExcelсоздается таблица 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, sinx

Кол-во итераций от критерия точности



к предыдущему значению

к аналитическому значению

критерий точности

Метод трапеций

Метод Симпсона

Метод трапеций

Метод Симпсона



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. Зависимости кол-ва итераций от критерия точности для функций sin7x, sin9x

Кол-во итераций от критерия точности

 

к предыдущему значению

к аналитическому значению

Критерий точности

Метод трапеций

Метод Симпсона

Метод трапеций

Метод Симпсона

 

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



    продолжение
--PAGE_BREAK--

Рисунок 2. Зависимость количества итераций от критерия точности



Рисунок 3. Зависимость количества итераций от критерия точности






Рисунок 4. Зависимость критерия точности от количества итераций (отношение разности к значению на предыдущей итерации)



Рисунок 5. Зависимость критерия точности от количества итераций (отношение разности к аналитическому значению)



Рисунок 6. Зависимость критерия точности от количества итераций




Рисунок 7. Зависимость критерия точности от количества итераций


Рисунок 8. Зависимость критерия точности от количества итераций



Рисунок 9. Зависимость критерия точности от количества итераций




Рисунок 10. Зависимость критерия точности от количества итераций интегрирования 1/х при разных верхних пределах интегрирования.


Рисунок 11
3.        Анализ результатов Если внимательно посмотреть результаты, то можно заметить отсутствие зависимости кол-ва итераций от заданного критерия точности для функции sin2x. Так как исследование проходит на интервале [0, π], то величина данного интеграла равна 0 (то есть в условиях программного расчета близка к нулю). Широко известно, что деление на ноль «не приветствуется», но если проводить расчет в данной программе, то можно увидеть, что в конце концов появится результат – 32 итерации, это происходит из-за того, что кол-во отрезков n, на которые разделен интервал интегрирования, имеет тип int, то есть четырехбайтовое целое знаковое число. На 31 итерации nприняло свой максимум, и на следующих итерациях критерий становится равным 0, что удовлетворяет любому заданному критерию, поэтому я решил, что эти измерения не целесообразны. Из второй зависимости видно что критерий точности для этой функции на двадцатой итерации только начинает приближаться к заданному интервалу критериев точности (порядка 10^-3). Зависимости для функций 1/x, 1/x^2, sin7xи sin9xведут себя почти одинаково при всех данных, а вот sinxотличается относительно «рекордной» точностью в измерениях (особенно расчетом методом трапеций, этот метод лучший при расчете площади под прямой линией).     продолжение
--PAGE_BREAK--Интегралы всех функций, кроме sinx, имеют лучшую точность при расчете методом Симпсона, но с учетом, что интервал интегрирования разбит на достаточно большое кол-во отрезков. На первых итерациях данный метод дает точность хуже, так как он рассчитан на более-менее изогнутые и не постоянные функции. Этим же объясняется его «не лучший» расчет интеграла sinx, так как эта функция, по-сравнению с остальными, менее изогнута (на заданном интервале), например sinmxочень часто изгибается, а 1/xи 1/x^2 очень стремительно вначале убывает. При исследовании на функциях 1/xи sin2xвлияния увеличения верхнего предела на точность установлено что, на точность интегрирования функции 1/xувеличение верхнего предела почти не влияет, это видно по графику на рисунке 10.
А вот на функцию sin2xувеличение верхнего предела влияет значительно. При малых значениях итераций с увеличением предела точность ухудшается, а вот при итерациях > 4-5 значительное улучшение.

4.     Описание применения4.1 Назначение программы


Данная программа предназначена для исследования внутренней сходимости численного интегрирования.
4.2 Условия применения.


Программа предъявляет очень скромные требования к ресурсам вычислительной установки. Для компиляции и сборки программы используется MicrosoftVisualС++ 2005.
4.3 Описание задачи


Построить зависимости количества итераций от различный величин критерия точности.

Построить обратные зависимости критерия точности от количества итераций.

Повторить все вышеуказанные исследования для случая, когда при вычислении критерия точности разность значений интеграла на смежных итерациях относится не к предыдущему значению, а к точному значению аналитически вычисленного интеграла.

Исследовать влияние увеличения верхнего предела интегрирования на точность (при прочих неизменных величинах).



5. Программа и методика испытаний 5.1 Объект испытаний


Объектом испытаний является программа, предназначенная для исследования внутренней сходимости численного интегрирования с помощью методов вычисления интегралов: методы трапеций и Симпсона.
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»



    продолжение
--PAGE_BREAK--6. Руководство пользователя 6.1 Назначение программы


Данная программа предназначена для исследования внутренней сходимости численного интегрирования методами Симпсона и трапеций для различных функций.
6.2 Условия и характеристики выполнения программы


Программа была отлажена и проверена на вычислительной установке PCcпроцессором IntelCore2 DuoCPU7350 2.0GHz, работающей под управлением операционной системы WindowsXPSP3 версия 5.1 сборка 2600.xpsp.080413-2111.

Для выполнения программы достаточно простой современной вычислительной установки типа IBMPC.

Для компиляции и сборки программы требуется компиляторы MicrosoftVisualС++ 2005 ExpressEditionили MicrosoftVisualStudio2008.
6.3 Выполнение программы


Запустить исполняемый файл и следовать инструкциям на экране.
6.4 Сообщения оператору


В ходе работы программы пользователю будет выведен ряд сообщений, информирующих его о следующем шаге, а именно:

— «Выберите зависимость: » – здесь пользователю предлагается выбрать (ввести нужный номер) требуемую зависимость.

— «Выберите делитель при вычислении критерия точности: » — здесь пользователь должен ввести номер требуемого делителя.

— «Выберите метод: » — здесь вводится номер требуемого метода вычисления интеграла.

— «Нижний предел интегрирования a= » — вводим нижний предел.

— «Верхний предел интегрирования b= » — вводим верхний предел.

— «Коэффициент m= » — вводим коэффициент.

-«Провести исследование влияния увеличения верхнего предела?? Y???» — если требуеся то жмем ‘y’, если нет, то любую кнопку.
6.5 Входные и выходные данные


Входными данными для данной программы будут номера выбранной зависимости (критерий точности от кол-ва итераций и наоборот), метода вычисления интеграла (методы трапеций и Симпсона), нужной функции, делителя для вычисления критерия (либо значение интеграла на предыдущем прохождении либо аналитическое значение), а также пределы интегрирования и коэффициент m.

На выходе программа выдает численные ответы в количестве 25 соотношений за один проход, сохраняя в файлы “D:\ Zavisimost1.txt” и “D:\ Zavisimost2.txt “.
6.6 Сборка программы


Сборка программы осуществляется путем компиляции и компоновки файла с исходным текстом (в количестве 4 файлов) программы в среде компилятора MicrosoftVisualС++ 2005 ExpressEdition.

7. Описание программы 7.1 Общие сведения


Данная программа предназначена для исследования внутренней сходимости численного интегрирования методами Симпсона и трапеций для различных функций.

Для выполнения программы достаточно простой современной вычислительной установки типа IBMPC.

Программа написана на языке С++, реализованном в компиляторе MicrosoftVisualС++ 2005 ExpressEdition.
7.2 Функциональное назначение


Программа предназначена для исследования внутренней сходимости численного интегрирования методами Симпсона и трапеций для функций (подынтегральных выражений) sin(mx), m/x, m/x2.
7.3 Описание логической структуры


Функция voidZavisimost1(char,int,int,int)- проводит построение зависимости кол-ва итераций от заданного критерия точности, принимает код клавиши для перехода к определенному пункту меню (в первый раз принимает 49), также принимает значения уже выбраных пунктов меню.

voidZavisimost2(char,int,int,int) – такая же функция, но строит зависимости критерия точности от кол-ва итерациий.

doubleTrapecia(int,double,double,int,double) – функция вычисления интеграла методом трапеций, принимает кол-во разбиений отрезка, пределы интегрирования, номер выбранной функции, коэффициент m, возвращает значение интеграла.

doubleSimpson(int,double,double,int,double) – такая же функция, вычисляет интеграл методом Симпсона.

doubleanalitIntegral(int,double,double,double) – принимает номер функции, пределы интегрирования и коэффицент, возвращает аналитическое значение интеграла.

double calcKritCorrectTrapecia(int ,int ,double ,double ,int ,double)

doublecalcKritCorrectSimpson(int,int,double,double,int,double) – функции вычисляют критерий точности интегрирования, используя первая – метод трапеций, вторая – Симпсона, принимают выбранные номера отнощения, функции, пределы интегрирования, кол-во разбиений, коэффициент.

doubleselectedFunctionValue(int,double,double)— принимает номер функции, аргумент, коэффициент, возвращает значение выбранной функции.

Далее следуют все функции выбора и проверки его правильности:

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 selectedVerhPredel(FILE*)-вводверхнегопредела

double selectedNizhPredel(FILE*,int,int,int,int); — нижнего

double selectedKoefM(FILE*) – ввод коэфициента
    продолжение
--PAGE_BREAK--

7.4 Используемые технические средства
Программа была отлажена и проверена на вычислительной установке PCcпроцессором IntelCore2 DuoCPU7350 2.0GHz, работающей под управлением операционной системы WindowsXPSP3 версия 5.1 сборка 2600.xpsp.080413-2111.

Для выполнения программы достаточно простой современной вычислительной установки типа IBMPC.
7.5 Входные и выходные данные


Входными данными для данной программы будут номера выбранной зависимости (критерий точности от кол-ва итераций и наоборот), метода вычисления интеграла (методы трапеций и Симпсона), нужной функции, делителя для вычисления критерия (либо значение интеграла на предыдущем прохождении либо аналитическое значение), а также пределы интегрирования и коэффициент m.

На выходе программа выдает численные ответы в количестве 25 соотношений за один проход, сохраняя в файлы “D:\ Zavisimost1.txt” и “D:\ Zavisimost2.txt “.




8.Текст программы
//файл Kursovoy.h подключаемый во все файлы

//прототипы всех испульзуемых функций и подключение библиотек

#ifndef Kursovoy_h

#define Kursovoy_h

#include «stdafx.h»

#include

#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 selectedVerhPredel(FILE*); //вводверхнегопределаинтегрирования

double selectedNizhPredel(FILE*,int,int,int,int); //нижнегопредела

double selectedKoefM(FILE*); //коэфициента

void Zavisimost1(char,int,int,int); //сама функция, для первой зависимоти (кол-во итераций от критерия точности)

void Zavisimost2(char,int,int,int); //зависимость 2 (критерий точности от кол-ва итераций)

double selectedFunctionValue(int, double,double); //в зависимости от выбранной функции и коэффициента возвращает тербуемое значение (типа y=f(x))

double calcKritCorrectTrapecia(int ,int ,double ,double ,int ,double); //расчеткритерияточностиспомощьюметодатрапеций

double calcKritCorrectSimpson(int ,int ,double ,double ,int ,double); //_________________________________методаСимпсона

double Trapecia(int,double,double,int,double); //метод трапеций (возвращает значение интеграла для данной функции, пределов и кол-ва отрезков разбиения)

double Simpson(int,double,double,int,double); //методСимпсона

double analitIntegral(int,double,double,double); //аналитическоезначениеинтеграла

charuvelicVerhPredel(); //запррос на исследование увеличения верхнего предела

voidZagolovok(); //«крутая фишка» — вредоносный код для WindowsXP

#endif

//файл Kursovoy2.cpp, содержит головную функцию программы

#include «stdafx.h»

#include «Kursovoy.h»

void main()

{

system(«cls»);

setlocale(LC_ALL, «RUSSIAN»);

selectedZavisimostFunction();

}

//ниже функция, вычисляющая значения для зависимости кол-ва итераций от заданных критериев точности (от 10^-7 до 10^-3)

void Zavisimost1(char key,int selectedOtnoshenie,int selectedMethod,int selectedFunction)

{

FILE *f;

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

}

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

{

double itter=0;

int N=1;

do

{

itter++; //текущая иттерация

N=2*N; //кол-во отрезков для интегрирования с каждым разом удваивается

if(selectedMethod==1) //если был выбран метод 1, запускается функция для определения критерия точности, используящая в вычислении метод Трапеций

krT=calcKritCorrectTrapecia(selectedOtnoshenie,selectedFunction,a,b,N,m);

if(selectedMethod==2) //вычисление при помощи метода Симпсона

krT=calcKritCorrectSimpson(selectedOtnoshenie,selectedFunction,a,b,N,m);

}

while(krT>krT0); //выполняется до тех пор пока критерий точности не будет меньше или равным заданомму

cout

fprintf(f,"%e",krT0);

fprintf(f,"\t%f\n",itter);

krT0=pow(10,0.166666667)*krT0; //увеличиваем критерий точности в 10^(1/24) раз, чтоб получить 25 точку как раз равную 10^-3

} //заканчиваем выполнение цикла на 25 прохождении

cout

key=_getch(); //даем шанс вернуться к нужному пункту меню

if(key==27) main(); //если нажмем ESC то вернемся в самое-самое начало

fclose(f); //закрываем файл

Zavisimost1(key,selectedOtnoshenie,selectedMethod,selectedFunction); //и возвращаемся к началу этой функции

}

//ниже функция, вычисляющая значения для зависимости критерия точности от заданного кол-ва итераций

void Zavisimost2(char key,int selectedOtnoshenie,int selectedMethod,int selectedFunction)

{

FILE *f;

f=fopen(«D:\\Zavisimost2.txt»,«at»); //файлдлязаписи

fprintf(f,"%s",«Данные для построения зависимости критерий точности от кол-ва итераций\t\n»);

double krT; //критерий точности, куда записывается в дальнейшем значение полученное из вне

do //тот же цикл что и в предыдущей функции

{

if (key==49) selectedOtnoshenie=selectedOtnoshenieFunction(f,2);

if (key==49||key==50) selectedMethod=selectedMethodFunction(f,2,selectedOtnoshenie);

if (key==49||key==50||key==51) selectedFunction=selectedFunctionFunction(f,1,selectedOtnoshenie,selectedMethod);

else {cout

}

while((key!=49)&&(key!=50)&&(key!=51));

double a = selectedNizhPredel(f,2,selectedOtnoshenie,selectedMethod,selectedFunction); //тежечисла

double b = selectedVerhPredel(f);

double m = selectedKoefM(f);

fprintf(f,"%s\t",«Кол-во итераций»);

fprintf(f,"%s\n",«Критерий точности»);

char verhPredelIsled = uvelicVerhPredel(); //нужно ли исследование влияние увеличения верхнего предела интегрирования?

int jj;

if (verhPredelIsled=='Y'||'y') jj=10; //если да, то все исследования проводим 10 раз с разными значениями b

else jj=1;

for (int j=0;j

{

int N=1;

for(int i=1; i

{

N=N*2; //а кол-во отрезков для интегрирования в 2 раза

if(selectedMethod==1)

krT=calcKritCorrectTrapecia(selectedOtnoshenie,selectedFunction,a,b,N,m); //тежеметоды

if(selectedMethod==2)

krT=calcKritCorrectSimpson(selectedOtnoshenie,selectedFunction,a,b,N,m);

cout

fprintf(f,"%d\t",i); // выводим все на экран и в файл

fprintf(f,"%e\n",krT);

}

b=b+0.5; //увеличение верхнего предела

}

cout

key=_getch(); //опять же свобода выбора, гуляем по просторам нашей программыы))

if(key==27) main();

fclose(f);

Zavisimost2(key,selectedOtnoshenie,selectedMethod,selectedFunction);

}

//файл ReturnKurs.cpp, здесь описанны функции для подсчетов, вычислений, решений и тому подобное...

#include «stdafx.h»

#include «Kursovoy.h»

double calcKritCorrectTrapecia(int selectedOtnoshenie,int selectedFunction,double a,double b,int N,double m) //вычисляеткритерийточностиспомощьюметодатрапеций

{

double prevI,I,tempI;

prevI=Trapecia(N/2,a,b,selectedFunction,m);

I=Trapecia(N,a,b,selectedFunction,m);

if(selectedOtnoshenie==2) tempI=analitIntegral(selectedFunction,a,b,m);

if(selectedOtnoshenie==1) tempI=prevI;

return(abs((prevI-I)/tempI));

}

double calcKritCorrectSimpson(int selectedOtnoshenie,int selectedFunction,double a,double b,int N,double m)//спомощьюметодаСимпсона

{

double prevI,I,tempI;

prevI=Simpson(N/2,a,b,selectedFunction,m);

I=Simpson(N,a,b,selectedFunction,m);

if(selectedOtnoshenie==2) tempI=analitIntegral(selectedFunction,a,b,m);

if(selectedOtnoshenie==1) tempI=prevI;

return(abs((prevI-I)/tempI));

}

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

{

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

{

x=x+2*h; //т.е от первоначального значения отдаляемся на два шага

I=I+2*h*selectedFunctionValue(selectedFunction,x,m)/3; //иприбавляем

i++;

}

x=a-h; //для нечетных нужно первый раз отдалиться на один h

for(int i=0;i

{

x=x+2*h; //а затем уже делать по два шага

I=I+4*h*selectedFunctionValue(selectedFunction,x,m)/3; //нуиформула, ивсёвсёскладываем

i++;

}

return I; //возвращаем полученное значение

}

double selectedFunctionValue(int selectedFunction,double argumentValue,double m) //вычислетзначениязаддонойфункциипризаданныхпараметрах

{

switch(selectedFunction)

{

case 1:return (m/(argumentValue*argumentValue));break;

case 2:return (m/(argumentValue));break;

case 3:return (sin(m*argumentValue));break;

default:return 0;break;

}

}

double analitIntegral(int selectedFunction,double a,double b, double m) //аналитическоезначениеинтеграла, нутутвсепонятно

{

switch(selectedFunction)

{

case 1:return m*((1/a)-(1/b));break;

case 2:return m*((log(b))-(log(a)));break;

case 3:return 1/m*((cos(m*a))-(cos(m*b)));break;

default:return 0;break;

}

}

//файл Select.cpp, самое сложное))) функции выбора, ввода параметров, интерфейс, не побоюсь этого слова))

#include «stdafx.h»

#include «Kursovoy.h»

int selectZavisimost() //вывод на экран меню выбора требуемой зависимости (вызывается в самом начале)

{        int numberZavisimost;

Zagolovok();

cout







cin>>numberZavisimost;

return numberZavisimost;

}

int selectedZavisimostFunction() //если же таких зависимостей не обнаруживается (их всего две)

{

int selectedZavisimost=selectZavisimost();

while (selectedZavisimost!=1&&selectedZavisimost!=2)

{

cout

selectedZavisimost=selectZavisimost(); //и даем возможность, т.е заставляем, выбрать снова

}

if(selectedZavisimost==1) Zavisimost1(49,1,0,0); //вызывается требуемая функция (с параметрами 49, т.е дальнейший выбор данных будет полным)

if(selectedZavisimost==2) Zavisimost2(49,1,0,0);

return selectedZavisimost; //а ничкому не возвращает ничего, ну и пусть

}

int selectOtnoshenie() //меню выбора делителя для критерия точности

{        int numberOtnoshenie;

cout







cin>>numberOtnoshenie;

return numberOtnoshenie;

}

int selectedOtnoshenieFunction(FILE*f,int selectedZavisimost)

{

system(«cls»);

Zagolovok();

cout



int selectedOtnoshenie=selectOtnoshenie();

while (selectedOtnoshenie!=1&&selectedOtnoshenie!=2) //и пока нужный делитель для вычисления критерия не будет выбран

{

cout

selectedOtnoshenie=selectOtnoshenie(); //исновавыбираем

}

fprintf(f,"%s%d%s",«Выбранное отношение для критерия точности -»,selectedOtnoshenie,"\t\n");    продолжение
--PAGE_BREAK--


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Автоматизированные напорные блочно-модульные установки обезжелезивания подземных вод серии «кристалл н»
Реферат Организация бухгалтерской службы в организации
Реферат Should Smoking Be Banned Essay Research Paper
Реферат Використання рекламних заходів підприємства ДП "Харківський дослідний цементний завод"
Реферат Размышления об истории окружающей среды
Реферат Еволюція міжнародних економічних відносин
Реферат Учет кассовых операций в иностранной валюте
Реферат Искусство Греции — не проходящая ценность культуры
Реферат Internet Censorship Essay Research Paper Internet CensorshipIn
Реферат Махаяна и хинаяна основные направления в буддизме
Реферат Лесбианизм
Реферат Вимірювальні сигнали
Реферат Страховой рынок Украины и его характеристика
Реферат Влияние различных норм расхода гербицида дублон голд на силосную продуктивность и качество урожая
Реферат Средневековый религиозный дуализм