Программная реализация методов

Все методы реализованы в виде одной процедуры-функции (см. ПРОГРАММУ 5.1), в которой параметр MetInt определяет выбранный метод интегрирования. Если известно аналитическое выражение для интегрируемой функции, необходимо выполнить подготовительную работу - написать подпрограмму, которая будет заполнять таблицу значений x и F(x).

Одновременно с расчетом интеграла процедура рассчитывает среднее и действующее значение кривой любым из методов, что достигается делением значения интеграла на величину интервала аргумента xn - x0. Также в программе значение шага h не постоянно, а рассчитывается по текущим значениям аргумента xi.. Это позволяет использовать процедуры при обработке расчетных данных с переменным шагом по аргументу. В процедуре рассчитывается необходимое число точек для методов средних прямоугольников и парабол Nr.

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

ПРОГРАММА 5.1

{ Процедурa-функция для расчета величины определенного

интеграла, среднего и действующего значений функции, заданной таблично }

{_________ В вызывающей программе :____________________}

{Const NMax=500; Макс. число точек в таблице функции }

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

{ Type VecF=array[0..NMax] Of Real; }

{___________ Расчет определенного интеграла ____________}

Function Integral (N:Integer; x,F:VecF; MetInt:Integer;

Var Sr:Real; Var Eff:Real):Real;

{ N - число узлов функции F(x) }

{ x - массив аргументов }

{ F - массив значений интегрируемой функции }

{ MetInt - выбираемый метод интегрирования }

{ Sr - среднее значение функции }

{ Eff - действующее значение функции }

Var

i, { Cчетчик циклов }

Nr { Расчетное число узлов функции }: Integer;

Sum,

Sum1 {Переменные для накопления сумм интегралов}: Real;

F1 { Массив значений вспомогательной функции }

{для расчета действующего значения }: VecF;

Begin

{ Заполнение массива вспомогательной функции }

For i:=0 to N do

F1[i]:=F[i]*F[i];

Nr:=N ;{ Исходное расчетное число узлов функции }

{ Коррекция Nr для методов средних прямоугольников и парабол }

If MetInt > 3 Then Nr:=(N div 2)*2;

Sum:=0.0;

Sum1:=0.0; { Начальное обнуление сумм }

Case MetInt of { Выбор метода интегрирования }

1 :{ Метод левых прямоугольников }

Begin

For i:=0 to Nr-1 do Sum:=Sum+F[i]*(x[i+1]-x[i]);

For i:=0 to Nr-1 do Sum1:=Sum1+F1[i]*(x[i+1]-x[i]);

End;

2 :{ Метод правых прямоугольников }

Begin

For i:=0 to Nr-1 do Sum:=Sum+F[i+1]*(x[i+1]-x[i]);

For i:=0 to Nr-1 do Sum1:=Sum1+F1[i+1]*(x[i+1]-x[i]);

End;

3 :{ Метод трапеций }

Begin

For i:=0 to Nr-1 do Sum:=Sum+0.5*(F[i+1]+F[i])*(x[i+1]-x[i]);

For i:=0 to Nr-1 do Sum1:=Sum1+0.5*(F1[i+1]+F1[i])*(x[i+1]-x[i]);

End;

4 :{ Метод средних прямоугольников}

Begin

i:=1;

Repeat

Sum:=Sum+F[i]*(x[i+1]-x[i-1]);

Sum1:=Sum1+F1[i]*(x[i+1]-x[i-1]);

i:=i+2;

Until i > Nr;

End;

5:{ Метод парабол (Симпсона)}

Begin

i:=1;

Repeat

Sum:=Sum+(F[i-1]+4.0*F[i]+F[i+1])*(0.5*(x[i+1]-x[i-1]))/3.0;

Sum1:=Sum1+(F1[i-1]+4.0*F1[i]+F1[i+1])*(0.5*(x[i+1]-x[i-1]))/3.0;

i:=i+2;

Until i > Nr;

End; End;

Integral:=Sum; { Значение интеграла }

Sr:= Sum/(x[Nr]-x[0]); { Cреднее значение кривой }

Eff_Znach:=Sqrt(Sum1/(x[Nr]-x[0])); { Действующее значение кривой }

End ;{ Integral_____________________________________________}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow