Метод Хемминга
Информация - Математика и статистика
Другие материалы по предмету Математика и статистика
?одимо отметить, что несмотря на отсутствие входных и выходных данных, внутри данного модуля задаются начальные значения и выводятся результаты вычислений в числовом виде и графиков, а также оценка по быстродействию (TIME) и количеству выполненных операций (FLOPS), однако эти данные нельзя охарактеризовать как входные и выходные.
2. Hem.m
Модуль, которые непосредственно и решает систему ОДУ ме
тодом Хемминга.
Входные данные:
FunFcn - имя функции, вычисляющей левые части
X0,XK - начальное и конечное значение для счета
Q - шаг интегрирования
J - число, определяющее во сколько раз нужно уменьшать шаг интегрирования методом Рунге-Кутта (далее Р-К) на участке "разгона" для получения того же порядка точности, что и в методе Хемминга
N - порядок системы
Y - вектор начальных значений
W - вектор коэффициентов для вычисления невязки
UR - число, определяющее период печати
Выходные данные:
x - матрица точек, для которых вычислено решение
y - матрица решений
dg - ошибка интегрирования
Язык реализации: PC MathLab.
Операционная система: MS-DOS 3.30 or higher
Пояснения к тексту модуля:
Данный модуль содержит в своем теле всего одну функцию,входные и выходные данные которой являются входными и выходными данными текущего модуля. Они описаны выше. Мы же займемся описанием данной функции:
После описания функции HEM устанавливается формат выходных данных LONG E, а также происходит инициализация рабочих массивов, как массивы значений функции в точках i-3, i-2, i-1;массивы значений производных в этих же точках, массивы правых частей и т.д. Всвязи с отсутствием в языке MathLab конструкции безусловного перехода, используется конструкции While 1 (бесконечный цикл), Break (переход к началу While) и IF (Если).
Из-за таких немного "странных" конструкций вся дальнейшая часть программы может быть весьма условно представлена такой схемой:
While (не конец расчетов)
While 1
...
IF
...
...
END
...
...
IF
...
...
...
END
...
end
end
В целом, в данных циклах вычисляется номер шага, и если он меньше 5, то вычисления сводятся к вычислению методом Р-К,а если больше 5, то производятся вычисления по методу Хемминга со всеми своими дополнительными действиями, как вычисление по корректирующей формуле и т.д. В обоих случаях происходит обновление рабочих и других промежуточных массивов и вывод информации на экран. В случае решения в точках "разгона" вычисляются также коэффициенты K1, K2, K3, K4, используемые в методе Р-К. Также функция сама проверяет точность вычислений и в случае необходимости корректирует шаг. Если шаг "сделан", то программа выводит результаты на экран и заносит их в массив,который представлен в виде нескольких столбцов. Также в необходимых для функции случаях она обращается к подпрограмме FunFcn, которая занимается вычислением левых частей, вызов и возврат значений которой должен быть следующим:
Z=feval(FunFcn,x,y), где
Z - вектор вычисленных левых частей,
X,Y - векторы точек, для которых производится вычисление.
Для удобства отладки и описания, программа разбита на части, обозначенные русскими заглавными буквами (Ш,Щ,Л и т.д.), которые соответствуют блокам, обозначенным в примере программы, приведенной в задании. Несмотря на то, что приведенная программа написана на условном языке, прокомментировать текст нашей программы на языке MathLab довольно удобно с использованием данных обозначений (Конечно, часть блоков опущена, в связи с отсутствием принципиальной значимости. Кроме того изменен порядок появления блоков в программе):
"Э" - начальное вычисление левых частей.
"Ф" - общий цикл, в котором и происходят собственно все вычисления. Он начинается с конструкций:
While (xk-x1)>0
While 1,
то есть пока не будет достигнут конец, все вычисления происходят внутри этого цикла.
Также внутри блока "Ф" происходят вычисления корректирующей формулы IAR(i) а также оценка погрешности вычислений G,если они еще не были рассчитаны на предыдущем шаге.
"Ц" - вычисление левых частей.
"Щ" - на этом этапе происходит перемещение данных в рабочих массивах и X=X+H, то есть происходит переход к следующему шагу. Также на этом этапе происходит вывод на экран и формирование выходных массивов Yout, Xout, DGout.
"Л" - в этом блоке происходит расчет самой предсказывающей формулы метода Хемминга - P(i) и Y(i) и происходит расчет левых частей, т.е. снова в программе появляется блок "Ц".
Затем опять продолжается блок "Ф". Идет проверка на каком шаге мы находимся и, если он (шаг) меньше 5, то идет подготовка к расчету методом Р-К, то есть идет участок "разгона". Соответственно идет расчет коэффициентов K1, K2, K3 и K4, необходимых для метода Р-К. Также внутри данного блока еще раз встречается блок "Ц", в котором происходит расчет левых частей, необходимых для метода Р-К.
Далее происходит проверка шага и уменьшение или увеличение его в соответствии с заданной точностью. Для возможности "отката" в случае большого или маленького шага используется переменная Х1. Также еще раз встречается блок "Ц". Затем, в случае если все коэффициенты К1-К4 вычислены и шаг удовлетворяет требованиям ?/p>