Приближенное вычисление четырехкратных интегралов по формуле Макария. Алгоритм стандартной подпрограммы

Математическая модель процесса приближенного интегрирования. Вычисление четырехкратных интегралов по формуле Макария. Алгоритмическое описание процесса приближенного интегрирования. Повышение эффективности вычислений при использовании подпрограммы.

Рубрика Программирование, компьютеры и кибернетика
Вид курс лекций
Язык русский
Дата добавления 26.01.2019
Размер файла 805,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http: //www. allbest. ru/

Руководство программиста

Приближенное вычисление четырехкратных интегралов по формуле Макария. Алгоритм стандартной подпрограммы

Разработчик: Гончаров В.И.

Самара 2011

Содержание

Введение

1. Исходная формулировка задачи

2. Математическая модель процесса приближенного интегрирования

3. Алгоритмическое описание процесса приближенного интегрирования

4. Область определения подынтегральной функции

5. Область применения алгоритма

6. Повышение эффективности вычислений при использовании подпрограммы

7. Тестирование стандартной подпрограммы

8. Текст стандартной подпрограммы

Литература

Введение

приближенный интегрирование четырехкратный алгоритмический

Руководство содержит данные, необходимые для составления стандартной подпрограммы на языке программирования высокого уровня.

Руководство предназначено для системных программистов.

1. Исходная формулировка задачи

Разработать алгоритм приближенного вычисления четырехкратных интегралов

([1], С.367) с заданной степенью точности.

В качестве области определения подынтегральной функции принять область интегрирования четырехмерного евклидова пространства, в котором задана аффинная система координат: фиксированная точка O выбрана за начало координат; система векторов взята за ортонормированный базис; аффинные координаты произвольной точки пространства обозначены через . Для унификации алгоритма выбрать среди разнообразных областей интегрирования простейшую область в виде четырехмерного прямоугольного параллелепипеда ([2], С.223)

,

ребра которого параллельны координатным осям.

В качестве теоретической базы применить установленное в теореме ([1], С.333) свойство четырехкратных интегралов, выражаемое равенством

где функция интегрируема в области

при ; .

Здесь обозначает среднее значение, которое рассматривается в качестве числовой характеристики подынтегральной функции в области интегрирования. Для некоторых функций среднее значение может не принадлежать множеству принимаемых ею значений. Когда функция непрерывна, то суть наименьшее и наибольшее значения функции в области интегрирования, факт существования которых установлен в теореме Вейерштрасса ([2], С.240). В этом случае промежуточное значение по теореме Больцано - Коши ([2], С.238) принимается функцией в некоторой точке области т. е.

.

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

2. Математическая модель процесса приближенного интегрирования

На основе теоремы ([1], С.333) построим формулу Макария. Для вывода формулы выполним регулярное разбиение области интегрирования на частичных областей

гиперплоскостями семейства

,

которые отвечают координатам

,

гиперплоскостями семейства , которые отвечают координатам

,

гиперплоскостями семейства

,

которые отвечают координатам

и гиперплоскостями семейства , которые отвечают координатам

.

Каждая частичная область представляет собой четырехмерный прямоугольный параллелепипед

.

В выбранном разбиении области интегрирования разности

принимаются в качестве измерений каждой частичной области .

Для приближенного представления функции регулярно выберем в области интегрирования узлов интерполяции

, где

обозначает шаг между соседними узлами по оси

шаг между соседними узлами по оси

шаг между соседними узлами по оси ,

шаг между соседними узлами по оси число шагов по оси (или по оси , или по оси или по оси ). Следует отметить, что для может быть задано взаимно однозначное отображение множества на множество : каждый узел интерполяции принадлежит соответственно одной и только одной частичной области; каждая частичная область включает один и только один узел интерполяции,

т. е. .

В каждой частичной области в качестве приближающей функции используем алгебраический многочлен нулевой степени , где константа. Узлом интерполяции выбираем точку . Требуется, чтобы значение функции в этом узле совпадало со значением функции

: .

Составим уравнение, из которого однозначно определяется коэффициент

.

Тогда приближающая функция в частичной области имеет вид

.

В каждой частичной области : - значения функции в точках примем равными значениям приближающей функции

- вычислим четырехкратный интеграл от приближающей функции

Составим сумму по всем частичным областям

где объем каждой частичной области в указанном разбиении области интегрирования. Коэффициент рассматривается также как вес частных значений подынтегральной функции в узлах интерполяции. Формулу (1) используем для построения модели приближенного вычисления интеграла. Выполним тождественное преобразование формулы (1). Для геометрической интерпретации алгоритма приближенных вычислений суммирование по множеству заменим суммированием по множеству (основание: ):

где среднее арифметическое частных значений подынтегральной функции в узлах. По формуле Макария (2) сумма частных значений подынтегральной функции в узлах с учетом их веса принимается как приближенное значение интеграла , которое соответствует выбранному разбиению области интегрирования на частичных областей

. (3)

Если точное значение интеграла неизвестно, то для оценки погрешности

формулы (3) при выбранном разбиении области интегрирования на частичных областей необходимо использовать остаточный член формулы (3). С другой стороны, формула для позволила бы выбирать число частичных областей, которое обеспечило бы заданную степень точности. В противном случае формула Макария мало пригодна для приближенных вычислений интеграла. Следует подчеркнуть, что вывод формулы для остаточного члена в данном руководстве не рассматривается. В выбранном разбиении области интегрирования формула Макария содержит параметров: , которые не зависят от функции Указанные параметры надо выбрать так, чтобы погрешность формулы Макария не превышала заданную погрешность. Среди перечисленных параметров только параметр является свободным, остальные параметры зависят от параметра . Таким образом, для обеспечения требуемой точности вычисления интеграла необходимо изменять значение параметра . С этой целью выполним последовательное разбиение области интегрирования на 16, 81, 256, 625, 1296, … частичных областей и для каждого разбиения вычислим по формуле (2) суммы . Составим числовую последовательность (первый член последовательности условно принят равным нулю, т. е. ). Члены этой последовательности рассматриваются как приближения интеграла. Отметим три свойства этой последовательности, которые будут использованы при построении математической модели. 1) Последовательность имеет своим конечным пределом ([1], С.332)

С помощью сумм значение четырехкратного интеграла для каждой интегрируемой функции может быть вычислено с любой степенью точностью: при возрастании n до бесконечности абсолютная погрешность формулы Макария безгранично убывает. 2) Последовательность имеющая конечный предел , удовлетворяет критерию Коши ([2], С.107): для любого числа существует такой номер что для всех номеров

и

выполняется неравенство

.

3) Извлечем из последовательности

частичную последовательность, используя суперпозицию функций . Функция представляет собой возрастающую функцию от , принимающую натуральные значения и стремящуюся к бесконечности при возрастании . Суперпозиция функций дает сложную функцию , которая через посредство и сама является функцией от . В дальнейшем используется сокращенное обозначение функции

Установлено ([2], С.105), если последовательность имеет определенный предел , то тот же предел имеет и частичная последовательность

Последовательность может быть использована для построения гипотетической математической модели и разработки алгоритма. Однако в этом случае для получения в качестве окончательного результата алгоритма требуется большой объем вычислений (для расчета используется частных значений подынтегральной функции). Для построения математической модели используем вместо последовательности частичную последовательность

.

Последняя соответствует последовательному разбиению области интегрирования на m = 0, 1, 2,… частичных конгруэнтных областей. Члены числовой последовательности примем в качестве приближений интеграла Для характеристики - го приближения интеграла будем использовать следующие параметры: число узлов интерполяции по оси (или по оси , или по оси , или по оси ), шаг между соседними узлами по оси шаг между соседними узлами по оси , шаг между соседними узлами по оси шаг между соседними узлами по оси сумма частных значений подынтегральной функции в узлах интерполяции, приближенное значение интеграла в выбранном разбиении области интегрирования.

Следует отметить, что выражение определяет число шагов между узлами интерполяции по оси (или по оси , или по оси , или по оси ). Эти параметры составляют семь числовых последовательностей. Для определения числовых последовательностей применим рекуррентные формулы. Последовательность определяется заданием - го члена последовательности. Вывод формул выполнен с помощью тождественных преобразований формулы Макария (2). Начальное приближение (для m = 0) выберем в виде

Формулы для определения последовательностей

имеют вид

где множество узлов интерполяции, выбранных на -ой итерации.

Для определения множества будем рассматривать каждый узел интерполяции как точку пересечения гиперплоскостей семейства семейства семейства

и семейства

,

,

,

,

,

,

,

,

где множество гиперплоскостей семейства , выбранных на предыдущих итерациях;

множество гиперплоскостей семейства , выбранных на текущей итерации;

множество гиперплоскостей семейства , выбранных на предыдущих итерациях;

множество гиперплоскостей семейства , выбранных на текущей итерации;

множество гиперплоскостей семейства , выбранных на предыдущих итерациях и на текущей итерации;

множество гиперплоскостей семейства , выбранных на предыдущих итерациях;

множество гиперплоскостей семейства , выбранных на текущей итерации;

множество гиперплоскостей семейства , выбранных на предыдущих итерациях и на текущей итерации;

множество гиперплоскостей семейства , выбранных на предыдущих итерациях и на текущей итерации;

множество гиперплоскостей семейства , выбранных на текущей итерации.

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

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

Вычислены частных значений функции в узлах интерполяции, выбранных на предыдущих итерациях, и включены в состав суммы .

При выполнении -ой итерации: выбрано гиперплоскостей семейства , гиперплоскостей семейства, гиперплоскостей семейства , гиперплоскостей семейства , точки пересечения которых образуют узлов интерполяции;

выбрано гиперплоскостей семейства , гиперплоскостей

семейства , гиперплоскостей семейства , гиперплоскостей семейства , точки пересечения которых образуют узлов интерполяции; выбрано гиперплоскостей семейства , гиперплоскостей семейства , гиперплоскостей семейства , гиперплоскостей семейства , точки пересечения которых образуют узлов интерполяции; выбрано гиперплоскостей семейства , гиперплоскостей семейства , гиперплоскостей семейства , гиперплоскостей семейства , точки пересечения которых образуют узлов интерполяции; дополнительно вычислены частные значения подынтегральной функции в [] узлах интерполяции, выбранных на текущей итерации, и включеныв состав суммы .

Таким образом, после выполнения -ой итерации: общее число выбранных узлов интерполяции функции выражается формулой

;

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

где заданная погрешность (основание: второе свойство последовательности). Тогда в качестве приближенного значения интеграла полагают т. е. Эта математическая модель в дальнейшем используется для разработки алгоритма. В этом случае для получения в качестве окончательного результата алгоритма требуется вычислить

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

частных значений подынтегральной функции.

Приведем алгоритм процесса приближенного интегрирования.

3. Алгоритмическое описание процесса приближенного интегрирования

Форма реализации алгоритмического процесса: стандартная подпрограмма. Имя подпрограммы устанавливается разработчиком. Определены следующие формальные параметры подпрограммы: нижний предел интеграла по оси ; верхний предел интеграла по оси; нижний предел интеграла по оси ; верхний предел интеграла по оси; нижний предел интеграла по оси ; верхний предел интеграла по оси; нижний предел интеграла по оси ; верхний предел интеграла по оси; абсолютная погрешность приближенного значения интеграла; символьная переменная, содержащая полное имя подпрограммы, предназначенной для вычисления значений подынтегральной функции. Форма выполнения алгоритмического процесса: вызов стандартной подпрограммы из основной программы. Вызов осуществляется по имени стандартной подпрограммы; после имени должны следовать аргументы, заключенные в круглые скобки. Из основной программы в стандартную подпрограмму передаются десять аргументов, которые соответствуют формальным параметрам стандартной подпрограммы. Стандартная подпрограмма возвращает в основную программу приближенное значение интеграла. В соответствии с описанием десятого формального параметра основная программа должна содержать подпрограмму для вычисления частных значений подынтегральной функции . Эта подпрограмма должна иметь в качестве формальных параметров аргументы подынтегральной функции . Совокупность возможных исходных данных для алгоритма (стандартной подпрограммы) определяется десятью аргументами, которые передаются в стандартную подпрограмму из основной программы. Совокупность возможных результатов алгоритма определяется приближенным значением интеграла которое при выполнении стандартная подпрограмма возвращает в основную программу. Совокупность промежуточных результатов алгоритма определяется семью числовыми последовательностями , которые заданы формулами и начальными условиями. Для вычисления новых членов каждой из последовательностей используется итерационный метод. В состав промежуточных результатов также включены: - параметры предыдущей итерации В качестве этих параметров предварительно регистрируются параметры текущей итерации до перехода к следующей итерации. Выполнение алгоритма начинается с вычисления начального приближения интеграла (для )

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

- вычислить шаг между соседними узлами по оси по формуле

- вычислить шаг между соседними узлами по оси по формуле

- вычислить шаг между соседними узлами по оси по формуле

- вычислить шаг между соседними узлами по оси по формуле

- присвоить начальное значение

,

где

сумма частных значений функции в узлах интерполяции, выбранных на текущей итерации; множество узлов интерполяции, выбранных на текущей итерации. На предыдущих итерациях сумма частных значений функции в узлах вычислена и установлена в качестве члена последовательности На текущей итерации эта сумма дополняется частными значениями функции во вновь выбранных узлах. Для этого выполнить следующие операции: - присвоить начальное значение координате определяющей текущую гиперплоскость семейства

- присвоить начальное значение признаку текущей гиперплоскости семейства

.

Для вычисления суммы использовать цикл со счетчиком (начальное значение счетчика равно 1, конечное значение равно , в котором в состав суммы включаются частные значения функции в узлах интерполяции, выбранных на текущей итерации. В цикле последовательно выбирается каждая гиперплоскость семейства . Общее число гиперплоскостей семейства равно [в том числе, прежде выбранных гиперплоскостей семейства и вновь выбранных гиперплоскостей семейства ]. В теле цикла последовательно выполнить следующие операции: - инвертировать значение признака . Если значение признака равно "истина", то признаку присвоить значение "ложь", иначе признаку присвоить значение "истина". Условно принято присваивать признаку значение "истина" для вновь выбранной гиперплоскости семейства и значение "ложь" - для прежде выбранной гиперплоскости семейства ; - присвоить начальное значение координате определяющей текущую гиперплоскость семейства

- присвоить начальное значение признаку текущей гиперплоскости семейства

;

Для вычисления суммы использовать цикл со счетчиком (начальное значение счетчика равно 1, конечное значение равно , в котором в состав суммы включаются частные значения функции во вновь выбранных узлах интерполяции, принадлежащих текущей гиперплоскости семейства . В цикле последовательно выбирается каждая гиперплоскость семейства . Общее число гиперплоскостей семейства равно [в том числе, прежде выбранных гиперплоскостей семейства и вновь выбранных гиперплоскостей семейства ]. В теле цикла последовательно выполнить следующие операции: - инвертировать значение признака . Если значение признака равно "истина", то признаку присвоить значение "ложь", иначе признаку присвоить значение "истина". Условно принято присваивать признаку значение "истина" для вновь выбранной гиперплоскости семейства и значение "ложь" - для прежде выбранной гиперплоскости семейства ; - присвоить начальное значение координате определяющей текущую гиперплоскость семейства

- присвоить начальное значение признаку текущей гиперплоскости семейства

;

Для вычисления суммы использовать цикл со счетчиком (начальное значение счетчика равно 1, конечное значение равно , в котором в состав суммы включаются частные значения функции во вновь выбранных узлах интерполяции, принадлежащих текущим гиперплоскостям семейства и семейства . В цикле последовательно выбирается каждая гиперплоскость семейства . Общее число гиперплоскостей семейства равно [в том числе, прежде выбранных гиперплоскостей семейства и вновь выбранных гиперплоскостей семейства ]. В теле цикла последовательно выполнить следующие операции: - инвертировать значение признака . Если значение признака равно "истина", то признаку присвоить значение "ложь", иначе признаку присвоить значение "истина". Условно принято присваивать признаку значение "истина" для вновь выбранной гиперплоскости семейства и значение "ложь" - для прежде выбранной гиперплоскости семейства ; - в зависимости от значения признака , соответствующего текущей гиперплоскости семейства , значения признака , соответствующего текущей гиперплоскости семейства , значения признака , соответствующего текущей гиперплоскости семейства , присвоить: начальное значение параметру , определяющему текущую гиперплоскость семейства ; значение параметру , определяющему шаг между выбранными гиперплоскостями семейства ; значение параметру , определяющему число выбранных гиперплоскостей семейства . Для этого использовать условный оператор блочной структуры: если ( или или ) равно "истине", то

иначе

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

.

Здесь интерпретируется как вызов подпрограммы для вычисления значения подынтегральной функции; из стандартной подпрограммы в эту подпрограмму передаются в качестве аргументов: (координата, определяющая текущую гиперплоскость семейства ), (координата, определяющая текущую гиперплоскость семейства ), (координата, определяющая текущую гиперплоскость семейства ), (координата, определяющая текущую гиперплоскость семейства ); - вычислить координату, определяющую следующую гиперплоскость семейства ,

и передать управление в начало цикла ;

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

и передать управление в начало цикла ; - после выполнения цикла вычислить координату, определяющую следующую гиперплоскость семейства

и передать управление в начало цикла ; - после выполнения цикла вычислить координату, определяющую следующую гиперплоскость семейства

и передать управление в начало цикла ;

- после выполнения цикла вычислить сумму частных значений подынтегральной функции в узлах интерполяции, выбранных на итерациях

;

- вычислить приближенное значение четырехкратного интеграла на текущей итерации

- проверить неравенство

.

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

4. Область определения подынтегральной функции

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

где

разность множеств ( содержит все кортежи , относящиеся к множеству, но не относящиеся к множеству ). Учитывая, что функция принадлежит классу интегрируемых функций, тогда, в силу свойства интегрируемых функций ([1], С.253), функция интегрируема во всем прямоугольном параллелепипеде и

В частном случае, когда условно принимают , то четырехкратный интеграл

выражает объем области определения .

Для существования четырехкратного интеграла и, как следствие, результативности алгоритма необходимо, чтобы область определения подынтегральной функции была ограниченной, замкнутой, кубируемой и односвязной (или многосвязной) областью.

Для того чтобы область была кубируемой, необходимо и достаточно, чтобы ее граница (границы многосвязной области) имела нулевой объем ([2], С.362). Этим свойством обладает широкий класс поверхностей, из которых может быть составлена граница (или границы) области: непрерывные поверхности, выражаемые явными уравнениями ([2], С.362); поверхности, составленные из нескольких непрерывных поверхностей; гладкие поверхности; кусочно-гладкие поверхности ([1], С.331).

5. Область применения алгоритма

Стандартная программа, реализующая приведенный алгоритм, может быть использована для приближенного вычисления четырехкратного интеграла в тех случаях, когда его нельзя свести к повторному интегралу ([1], С.334) или нельзя свести к интегралу меньшей размерности по формуле, обобщающей известную формулу Остроградского ([1], С.339) на случай любого числа переменных и связывающую интеграл, взятый по -мерной замкнутой поверхности с неким -кратным интегралом, распространенным на ограниченное ею область ([1], С.339). При этом подынтегральная функция четырех действительных переменных должна принадлежать к одному из следующих классов интегрируемых функций: непрерывных функций в области определения; ограниченных функций в области определения, все разрывы которых лежат на конечном числе поверхностей с нулевым объемом ([1], С.332). Следовательно, поверхности разрыва могут быть составлены: из непрерывных поверхностей, выражаемых явными уравнениями; из поверхностей, составленных из нескольких непрерывных поверхностей; из гладких поверхностей; из кусочно-гладких поверхностей.

6. Повышение эффективности вычислений при использовании подпрограммы

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

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

при сохранении других приведенных условий.

Если объем области интегрирования превышает 10000, то для повышения эффективности вычислений обычно разбивают область на конечное число областей

,

представляющих собой четырехмерные прямоугольные параллелепипеды.

Тогда четырехкратный интеграл по области представляется суммой четырехкратных интегралов, распространенных в отдельности на эти частичные области ([1], С.332)

Для вычисления каждого из этих четырехкратных интегралов применяется стандартная подпрограмма. Как правило, необходимо использовать эту составную формулу Макария для приближенного вычисления четырехкратного интеграла от функции , которая имеет в области интегрирования поверхности разрыва. Эффективность вычислений возрастает, если поверхности разрыва будут принадлежать частичным областям небольшого объема.

7. Тестирование стандартной подпрограммы

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

8. Текст стандартной подпрограммы

Для иллюстрации в качестве примера приведем текст стандартной подпрограммы SPVM967.PRG. Среда программирования и выполнения подпрограммы: операционная система MS DOS, система программирования CLIPPER 5.0.

// --

// ПРИБЛИЖЕННОЕ ВЫЧИСЛЕНИЕ ЧЕТЫРЕХКРАТНЫХ ИНТЕГРАЛОВ

// ПО ФОРМУЛЕ МАКАРИЯ. СТАНДАРТНАЯ ПОДПРОГРАММА

FUNCTION SPVM967 (pg1, pg2, pg3, pg4, pg5, pg6, pg7, pg8, pg9, pg10)

// pg1 - нижний предел интеграла по оси

// pg2 - верхний предел интеграла по оси

// pg3 - нижний предел интеграла по оси

// pg4 - верхний предел интеграла по оси

// pg5 - нижний предел интеграла по оси

// pg6 - верхний предел интеграла по оси

// pg7 - нижний предел интеграла по оси

// pg8 - верхний предел интеграла по оси

// pg9 - абсолютная погрешность приближенного значения интеграла

// pg10 - имя подпрограммы для вычисления значений подынтегральной функции

LOCAL is, js, ks, ns, pc1, pc2, pc3, pc4, pc5, pc6, pc7, pc8, pc9:= 0, pc10,; pc11, pc12, pc13, pc14, pc15, pc16, pc17, pc18, pc19

// pc1 - измерение области интегрирования по оси ; шаг между соседними узлами по оси на текущей итерации

// pc2 - измерение области интегрирования по оси; шаг между соседними узлами по оси на текущей итерации

// pc3 - измерение области интегрирования по оси; шаг между соседними узлами по оси на текущей итерации

// pc4 - измерение области интегрирования по оси; шаг между соседними узлами по оси на текущей итерации

// pc5 - объем области интегрирования

// pc6 - число узлов по оси (или по оси , или по оси , или по оси ) на предыдущей итерации

// pc7 - число узлов по оси (или по оси , или по оси , или по оси ) на текущей итерации

// pc8 - приближенное значение интеграла на предыдущей итерации

// pc9 - приближенное значение интеграла на текущей итерации

// pc10 - координата , определяющая текущую гиперплоскость семейства

// pc11 - координата , определяющая текущую гиперплоскость семейства

// pc12 - координата z, определяющая текущую гиперплоскость семейства

// pc13 - признак текущей гиперплоскости семейства (pc13=.T. - вновь выбранная гиперплоскость; pc13=.F. - прежде выбранная гиперплоскость)

// pc14 - признак текущей гиперплоскости семейства (pc14=.T. - вновь выбранная гиперплоскость; pc14=.F. - прежде выбранная гиперплоскость)

// pc15 - признак текущей гиперплоскости семейства (pc15=.T. - вновь выбранная гиперплоскость; pc15=.F. - прежде выбранная гиперплоскость)

// pc16 - число выбранных гиперплоскостей семейства

// pc17 - шаг между выбранными гиперплоскостями семейства

// pc18 - координата , определяющая текущую гиперплоскость семейства

// pc19 - сумма частных значений подынтегральной функции в узлах интерполяции

IF pg1 # pg2 .AND. pg3 # pg4 .AND. pg5 # pg6 .AND. pg7 # pg8

pc1 pg2 - pg1

pc2 pg4 - pg3

pc3 pg6 - pg5

pc4 pg8 - pg7

pc5 pc1 * pc2 * pc3 * pc4

pc6 2

pc19 &pg10.(pg1, pg3, pg5, pg7) + &pg10.(pg1, pg3, pg5, pg8) +;

&pg10.(pg1, pg3, pg6, pg7) + &pg10.(pg1, pg3, pg6, pg8) +;

&pg10.(pg1, pg4, pg5, pg7) + &pg10.(pg1, pg4, pg5, pg8) +;

&pg10.(pg1, pg4, pg6, pg7) + &pg10.(pg1, pg4, pg6, pg8) +;

&pg10.(pg2, pg3, pg5, pg7) + &pg10.(pg2, pg3, pg5, pg8) +;

&pg10.(pg2, pg3, pg6, pg7) + &pg10.(pg2, pg3, pg6, pg8) +;

&pg10.(pg2, pg4, pg5, pg7) + &pg10.(pg2, pg4, pg5, pg8) +;

&pg10.(pg2, pg4, pg6, pg7) + &pg10.(pg2, pg4, pg6, pg8)

pc8 pc5 * (pc19 / pc6 ** 4)

DO WHILE .T.

pc7 2 * pc6 - 1

pc1 pc1 / 2

pc2 pc2 / 2

pc3 pc3 / 2

pc4 pc4 / 2

pc10 pg1

pc13 .T.

FOR is 1 TO pc7

pc13 .NOT. pc13

pc11 pg3

pc14 .T.

FOR js 1 TO pc7

pc14 .NOT. pc14

pc12 pg5

pc15 .T.

FOR ks 1 TO pc7

pc15 .NOT. pc15

IF pc13 .OR. pc14 .OR. pc15

pc18 pg7

pc17 pc4

pc16 pc7

ELSE

pc18 pg7 + pc4

pc17 pc4 * 2

pc16 pc7 - pc6

ENDIF

FOR ns 1 TO pc16

pc19 pc19 + &pg10.(pc10, pc11, pc12, pc18)

pc18 pc18 + pc17

NEXT

pc12 pc12 + pc3

NEXT

pc11 pc11 + pc2

NEXT

pc10 pc10 + pc1

NEXT

pc9 pc5 * (pc19 / pc7 ** 4)

IF ABS (pc8 - pc9) < pg9 .AND. pc7 > 5

EXIT

ENDIF

pc6 pc7

pc8 pc9

ENDDO

ENDIF

RETURN pc9

// -------------------

Примечания:

1. В приведенном примере вызов подпрограммы для вычисления значения подынтегральной функции из стандартной подпрограммы производится с использованием макропеременной &pg10.(pg1, pg3, pg5, pg7), где & - операция макроподстановки, pg10 - макропеременная, точка (.) является макроразделителем и используется для маркировки конца макропеременной и отделения ее от примыкающего текста в выражении, pg1, pg3, pg5, и pg7 - аргументы, которые передаются из стандартной подпрограммы в подпрограмму для вычисления значения подынтегральной функции. В процессе выполнения стандартной подпрограммы содержимое макропеременной компилируется макрокомпилятором и выполняется. При этом скомпилированный код не сохраняется. 2. В приведенном примере вызов подпрограммы для вычисления значения подынтегральной функции может быть заменен исполнением блока кода. Например, в основной программе переменной bBlock присвоен блок кода bBlock := { | x, y, z, t| MyFunc(x, y, z, t) }, где MyFunc - имя подпрограммы для вычисления значения подынтегральной функции, x, y, z и t - формальные параметры блока кода. При вызове стандартной подпрограммы SPVM967 из основной программы в качестве десятого аргумента указывается переменная bBlock. В этом случае в стандартной подпрограмме вместо макропеременной &pg10.(pg1, pg3, pg5, pg7) используется функция EVAL() для выполнения блока кода.

В частности, оператор

pc19 &pg10.(pg1, pg3, pg5, pg7) + &pg10.(pg1, pg3, pg5, pg8) +;

&pg10.(pg1, pg3, pg6, pg7) + &pg10.(pg1, pg3, pg6, pg8) +;

&pg10.(pg1, pg4, pg5, pg7) + &pg10.(pg1, pg4, pg5, pg8) +;

&pg10.(pg1, pg4, pg6, pg7) + &pg10.(pg1, pg4, pg6, pg8) +;

&pg10.(pg2, pg3, pg5, pg7) + &pg10.(pg2, pg3, pg5, pg8) +;

&pg10.(pg2, pg3, pg6, pg7) + &pg10.(pg2, pg3, pg6, pg8) +;

&pg10.(pg2, pg4, pg5, pg7) + &pg10.(pg2, pg4, pg5, pg8) +;

&pg10.(pg2, pg4, pg6, pg7) + &pg10.(pg2, pg4, pg6, pg8)

заменяется оператором

pc19 EVAL(pg10, pg1, pg3, pg5, pg7) + EVAL(pg10, pg1, pg3, pg5, pg8) +;

EVAL(pg10, pg1, pg3, pg6, pg7) + EVAL(pg10, pg1, pg3, pg6, pg8) +;

EVAL(pg10, pg1, pg4, pg5, pg7) + EVAL(pg10, pg1, pg4, pg5, pg8) +;

EVAL(pg10, pg1, pg4, pg6, pg7) + EVAL(pg10, pg1, pg4, pg6, pg8) +;

EVAL(pg10, pg2, pg3, pg5, pg7) + EVAL(pg10, pg2, pg3, pg5, pg8) +;

EVAL(pg10, pg2, pg3, pg6, pg7) + EVAL(pg10, pg2, pg3, pg6, pg8) +;

EVAL(pg10, pg2, pg4, pg5, pg7) + EVAL(pg10, pg2, pg4, pg5, pg8) +;

EVAL(pg10, pg2, pg4, pg6, pg7) + EVAL(pg10, pg2, pg4, pg6, pg8)

оператор

pc19 pc19 + &pg10.(pc10, pc11, pc12, pc18)

заменяется оператором

pc19 pc19 + EVAL(pg10, pc10, pc11, pc12, pc18),

где параметр pg10 содержит блок кода, параметры pc10, pc11, pc12 и pc18 содержат аргументы, которые передаются при выполнении блока кода подпрограмме MyFunc.

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

Литература

1. Фихтенгольц Г.М. Основы математического анализа, т.2. 4-е изд. -М.: Наука, 1964. - С.464

2. Фихтенгольц Г.М. Основы математического анализа, т.1. 5-е изд. -М.: Наука, 1964. - С.440

Размещено на Allbest.ru


Подобные документы

  • Рассмотрение методов приближенного численного анализа. Формулы интегрирования, прямоугольников, трапеций, формула Симпсона. Оценка погрешностей интегрирования. Вычисление интеграла по формуле трапеций с тремя десятичными знаками и по формуле Симпсона.

    курсовая работа [995,7 K], добавлен 09.07.2012

  • Средства Delphi для разработки Windows приложений. Математическая формулировка задачи, описание программы вычисления определенного интеграла по формуле левых прямоугольников. Руководство пользователя, методика испытаний продукта. Листинг программы.

    курсовая работа [178,1 K], добавлен 14.11.2010

  • Некоторые сведения теории вероятностей. Математическое ожидание, дисперсия. Точность оценки, доверительная вероятность. Сущность метода Монте-Карло. Генераторы случайных чисел. Вычисление кратных интегралов. Описание пользовательского интерфейса.

    курсовая работа [301,5 K], добавлен 08.11.2013

  • MPI - библиотека передачи сообщений на языке программирования C/C++, ее переносимость, стандартизация, эффективная работа, функциональность. Форматы фактических вызовов MPI. Метод прямоугольников для приближенного вычисления определенного интеграла.

    курсовая работа [286,0 K], добавлен 20.06.2012

  • Методы левых и правых прямоугольников численного интегрирования для вычисления интегралов. Геометрический смысл определённого интеграла. Программная реализация, блок-схемы алгоритмов. Результат работы тестовой программы. Решение задачи с помощью ЭВМ.

    курсовая работа [180,4 K], добавлен 15.06.2013

  • Рассмотрение методов прямоугольников и трапеций как способов вычисления определенных интегралов. Характеристика графика зависимости погрешности от числа разбиений N. Создание приложения по вычислению интеграла с помощью методов приближенного вычисления.

    курсовая работа [1,6 M], добавлен 20.06.2012

  • Методы и алгоритмы вычисления определенных интегралов: метод трапеций и метод Симпсона (метод парабол). Оформление функции вычисления заданного определённого интеграла на Visual Basic 6.0. Программный код функции. Создание приложения для вычисления.

    курсовая работа [483,6 K], добавлен 25.06.2014

  • Составление алгоритма программы, позволяющей получить изображение флага Норвегии. Программирование вычислительного процесса линейной и разветвляющейся структур: вычисление площади треугольника по формуле Герона, табулирование функции, работа с массивами.

    лабораторная работа [50,4 K], добавлен 28.12.2011

  • Реализация решения нелинейного уравнения с заданными параметрами в виде процедуры-подпрограммы. Графический метод отделения корней уравнения. Основные методы уточнения корней уравнения. Описание процедур и функций, общий алгоритм и текст программы.

    курсовая работа [1,7 M], добавлен 27.03.2011

  • Основные модели вычислений. Оценки эффективности параллельных алгоритмов, их коммуникационная трудоемкость. Последовательный алгоритм, каскадная схема и способы ее улучшения. Модифицированная каскадная схема. Передача данных, классификация операций.

    презентация [1,3 M], добавлен 10.02.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.