Блок-схема алгоритма
В приведенную выше блок-схему подставим данные для расчета функции sin x, добавив вывод данных для графиков и защиту от зацикливания. Расчет текущего члена ряда на каждой итерации цикла осуществляется по полученной рекуррентной формуле.
Пояснения.
1) В переменной F хранится эталонное значение функции, вычисленное по стандартной программе, для последующего сравнения этого значения с полученной суммой ряда (|F–Sn|).
2) В процессе суммирования ряда формируются файлы с расширением .txt, содержащие таблицы зависимости значений членов ряда и частичных сумм от номера члена ряда (Блок вывода *). Таблицы состоят из строк, в которых через пробел записаны значения функции и аргумента.
!Открыть три файла
open(1, file=‘An.txt’); open(1, file=‘Sn.txt’)
open(1, file=‘F.txt’)
!Вывод данных для графика
write(1, *) N, An; write(2, *) N, Sn
write(3, *) N, F
Эталонное значение функции F не зависит от номера члена ряда N, на графике ему соответствует линия, параллельная горизонтальной оси.
Для построения графика воспользуйтесь пакетом AGrapher.
3) Для предотвращения зацикливания программы из-за возможных ошибок, количество членов ряда N ограничено значением Nmax (например, 100). При N > Nmax суммирование прекращается и выдается аварийное сообщение с дополнительной информацией.
4) Для вывода результатов суммирования и аварийного сообщения в отладке удобно использовать оператор namelist.
5) В цикле do whileпеременная N служит для хранения номера последнего члена ряда, вошедшего в сумму. Поскольку в нашем примере члены ряда в разложении функции нумеруются с 0, то количество просуммированных членов ряда равно N+1 . Единица добавляется к N после выхода из цикла (Блок **).
Текст программы
Отладка программы
Если программа завершилась аварийно, или если полученные результаты не соответствуют ожидаемым результатам, рекомендуется провести анализ возможных причин этого.
Если вследствие ошибок в программе исследуемый ряд стал расходящимся, то программа обязательно закончится аварийно. Но это не значит, что аварийно завершается только суммирование расходящихся рядов.
Предположим, что выбранное значение Nmax=100, а для достижения заданной точности при выбранном аргументе требуется сумма из 120 слагаемых. Ряд сходится, но программа при этом завершится аварийно.
При аварийном завершении программы обычно рекомендуется выводить информацию, позволяющую анализировать создавшуюся ситуацию. Так и в нашей программе выводятся значения x, An, F, Sn, N, Nmax. Отличить расходящийся ряд от сходящегося можно, анализируя значение последнего просуммированного члена ряда An. Если значение его модуля приближается к значению заданной погрешности, то, возможно, ряд просто «не успел» сойтись, поэтому рекомендуется увеличить значение Nmax и повторить вычисления.
Если же значение | An | на порядки превышает значение погрешности, то бесполезно изменять Nmax, потому что ряд расходится. К этому могут привести следующие ошибки:
- Значение аргумента x не принадлежит области сходимости ряда.
- Заданная погрешность вычислений ε не согласована с типом используемых переменных; например, используя переменные типаrealнельзя получить результат с точностью до 17-го десятичного знака (минимальная допустимая погрешность ε =10-6 ÷ 10-7).
- Допущены ошибки в рекуррентной формуле, алгоритме или программе.
Дата добавления: 2017-09-19; просмотров: 671;