Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр3.docx
Скачиваний:
1
Добавлен:
14.09.2019
Размер:
172.68 Кб
Скачать

End { Made_Integr } ; {

}

Begin ClrScr;

Made_Integr(n); h:=step; Ih:= Integral;

Made_Integr(m); k:=step; Ik:= Integral;

Integral:= Ih + ((Ih-Ik)/{((k*k)/(h*h)) - 1) ) ;

Writeln (' ':20,'For n = ',n,1 and m = ',m,1 Integral =

',Integral:3:7);

Repeat

Until KeyPressed;

End.

Результат работы программы:

For n = 15 and m = 80 Intrgral = -21.9974762;

Действительно, результат вчисления намного точнее , чем в первом примере.

3. Правило Симпсона.

Р

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

Формула Симпсона выводится из (4) при четном п и при к 2h и окончательно имеет вид:

Листинг программы для считающей значение интеграла по правилу Симпсона:

{ ЛАБОРАТОРНАЯ РАБОТА № 3. "ЧИСЛЕННЫЕ МЕТОДЫ"

" Численное интегрирование"

Программа № 3 : PRAVILO SIMPS0NA }

Program lab_3_3;

Uses Crt;

Const n = 20 ; { n mod 2=0}

a = -1.1; b = 0.8;

Type Ar = array[0..N] of real;

Var X : Ar;

Integral, h : real; i : byte;

{ }

Function Func (Xrreal) : real;

{ подынтегральная функция }

(6)

Begin

Func:= 0.66*cos(2.31*X)-0.04*exp(-2.61*X)-9.58*X*X*X*X + 9.4*X*X*X - 8.96*X*X-5.51;

End { Func };

{ }

Begin ClrScr; h:= (b-a)/n;

X[0]:=a; X[n]:=b;

For i:=l to n-1 do X[i]:=X[i-l] + h;

Integral:= 0.0;

For i:=0 to n-1 do If odd(i) then

Integral:= Integral + (h/3)*(2*Func(X[i]) + Func(X[i+1])) else

Integral:= Integral + (h/3)*(Func(X[i]) + 2*Func(X[i+1])); Writeln (' ':20,'For n = ',n,' Integral = Integral:3:7);

Repeat

Until KeyPressed;

End.

Результат работы программы:

For n = 20 Integral -21. 997 6684.-P

For n = 40 Integral = -21.9974831;

For n = 60 Integral = -21.99747,32;

11оследний результат очень близок к нашему «тестовому» значению. Расхождение на- блюдается лишь в миллионных долях числа, что по сути считается очень высокой точностью по гребоваиям данной лабораторной работы.

4. Метод Гаусса.

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

Порядок численного интегрирования по методу Гаусса следующий:

1. Изменяем пределы интегрирования так, чтобы они стали равными (-1, +1). Для этого вводим

2х- (b + а) 1 1

u = х = — • (Ь - а) • u + — • (Ь + а)

новую переменную b - а так, что 2 2

Интеграл (1) после такой подстановки запишется в виде:

2. Вычисляем значение искомого интеграла по формуле:

где для заданного знаяения п из соответствующих справочников (значения указаны в

массивах-константах нижеприведенного листинга программы) выбираются ординаты ui и весо- вые коэффициенты А,.

В общем случае , при (п+1) ординате получается точная формула для нахождения интер- вала от многочлена степени (2п+1).

Листинг программы:

{ ЛАБОРАТОРНАЯ РАБОТА № 3. "ЧИСЛЕННЫЕ МЕТОДЫ"

" Численное интегрирование"

Программа № 4 : METOD GAUSSA. }

Program lab_3_4;

Uses Crt;

Type Ar = array[1..6] of real;

Const n = 6; { n = only 2 . . 6 !!!!!!!!!! }

a = -1.1; b = 0.8;

Mu2 : Ar = (0.5773502692, -0.5773502692, 0, 0 ,0, 0);

Mu3 : Ar = (0.7745966692, -0.7745966692, 0.000000000, 0, 0, 0)

Mu4 : Ar = (0.8611363116, -0.8611363116, 0.3399810436,

-0.3399810436, 0, 0);

Mu5 : Ar = (0.9061798459, -0.9061798459, 0.5384 693101,

-0.5384693101, 0.0000000000, 0);

Mu6 : Ar = (0.9324695142, -0.9324695142, 0.6612093865,

-0.6612093865, 0.2386191861, 0.2386191861);

Ac2 : Ar = (1.0000000000, 1.0000000000,0,0,0,0);

Ac3 : Ar = (0.5555555556, 0.5555555556, 0.8888888889,0,0,0);

Ac4 : Ar = (0.3478548451, 0.3478548451, 0.6521451549,

0.6521451549, 0, 0);

Ac5 : Ar = (0.2369268851, 0.2369268851, 0.4786286705,

0.4786286705, 0.5688888889, 0);

Ac6 : Ar = (0.1713244924, 0.1713244924, 0.3607615730,

0.3607615730, 0.4679139346, 0.467913934 6);

Var Mu, Ac : Ar;

h, Integral : real; i : byte;

{ }

Function Func (X:real) : real;

Begin

Func:= 0.66*cos(2.31*X)-0.04*exp(-2.61*X)-9.58*X*X*X*X + 9.4*X*X*X - 8.96*X*X-5.51;

End { Func } ;

f }

Function Fi (W : real) : real;

Begin

Fi:= (1/2)*(b-a)*Func((1/2)*(b-a)*W + (1/2)*(b+a));

End ( Fi } ; f }

Begin

ClrScr;

Integral:= 0.0;

If n=2 then

For i:=l to n do Begin Ac[i] :=Ac2 [ i] ;

Mu[i]:=Mu2 [ i]

End

else if n=3 then For i:=l to n do Begin Ac[i]:=Ac3[i];

Mu[i]:=Mu3[i]

End

else if n=4 then For i:=l to n do Begin Ac[i]:=Ac4 [ i] ;

Mu[i] :=Mu4 [i]

End

else if n=5 then For i:=l to n do Begin Ac[i]:=Ac5 [i] ;

Mu[i]:=Mu5[i]

End

else

For i:=l to n do Begin Ac[i]:=Ac6[i];

Mu[i]:=Mu6[i]

End;

For i:=1 to n do

Integral:= Integral + Ac[i]*Fi(Mu[i]);

Writeln (' ':25,'For n = ',n, ' Integral = Integral:3:10);

Repeat

Until KeyPressed;

End.

For

n = 2

Integral =

-21.7430760684;

For

n = 3

Integral =

-21.9928666993;

For

n = 4

Integral =

-21.9975249206;

For

n = 5

Integral =

-21.9974691836;

For

n = 6

Integral =

-21.9974707523;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]