Пример 3.4 выполнения задания
Вычисление определённых интегралов Для вычисления значений определённых интегралов существует множество методов. Рассмотрим три из них – метод прямоугольников, метод трапеций и метод парабол (метод Симпсона) на примерах при следующей постановке задачи. Составить фрагмент программы для вычисления приближенного значения определённого интеграла при заданных подынтегральной функции f(x), пределах интегрирования a и b и числе N разбиений интервала на подынтервалы. При этом шаг изменения аргумента Δx следует найти по формуле Δx=(b-a)/N. Суть этих методов – в накоплении, с учетом знаков, сумм площадей прямоугольников, трапеций или параболических трапеций, заменяющих на каждом подынтервале в общем случае криволинейную трапецию. Для метода прямоугольников высоты таких прямоугольников следует вычислять как значение функции в серединах (или на границах) подынтервалов, для метода трапеций высоты сторон трапеций – как значения функции на границах подынтервала, а для метода Симпсона используются значения функций и на границах и в серединах подынтервалов. Соответствующие формулы в общем виде и фрагменты программ вычисления интегралов для подынтегральной функции sin x приведены в рассмотренных ниже примерах. Пример 1. Использование метода прямоугольников с вычислением высот прямоугольников в серединах подынтервалов. В этом методе формула приближенного значения определённого интеграла представляется в виде Для уменьшения объёма вычислений множитель Δx следует вынести за знак суммы: , а для вычисления текущих значений центров xi подынтервалов будем использовать приём накопления суммы.
z:=0; dx:=(b-a)/N;
x:=a+dx/2;//Середина первого подынтервала for i:=1 to N do begin z:=z+Sin(x); x:=x+dx end; z:=z*dx;
Пример 2. Использование метода трапеций. В этом методе формула приближенного значения определённого интеграла представляется в виде Преобразование её к виду
позволяет исключить повторные вычисления высот трапеций на внутренних подынтервалах и таким образом сократить объём вычислений.
z:=(Sin(a)+Sin(b))/2; dx:=(b-a)/N; x:=a+dx; for i:=1 to N-1 do begin z:=z+Sin(x); x:=x+dx end; z:=z*dx;
Пример 3. Использование метода параболических трапеций (Симпсона). В этом методе формула приближенного значения определённого интеграла представляется в виде или, взяв N в 2 раза большим, то есть разбив весь интервал на четное количество участков, в 2 раза меньшей длины . Используем вторую формулу в следующем фрагменте программы.
ReadLn(a,b,N); Integ:=Sin(a); dx:=(b-a)/N; for i:=1 to N div 2 do begin x:=a+2*i*dx; Integ:=Integ+2*Sin(x)+4*Sin(x-dx); end; Integ:=(Integ-Sin(b))*dx/3; WriteLn(Integ:10:5); Itoch:=-(Cos(b)-Cos(a)); WriteLn(Itoch:10:5); ReadLn;
Пример 3.4 выполнения задания Составить программу вычисления приближенных значений определённого интеграла методом прямоугольников и методом Симпсона, а также точное его значение по первообразной . Вычислить также абсолютную и относительную ошибки для каждого приближенного метода. Пределы интегрирования a и b, а также число N подынтервалов задавать при вводе. Для метода Симпсона используем первую формулу из предыдущего примера.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var A,B,Q,dX,dX2,X,Z,Z0:Extended; i,N:Integer; begin Write('Введите A, B, Q и N: ');ReadLn(A,B,Q,N); //МЕТОД ПРЯМОУГОЛЬНИКОВ WriteLn('Метод прямоугольников при N = ',N); Z:=0; dX:=(B-A)/N; X:=A+dX/2; for i:=1 to N do begin Z:=Z+Exp(Q*X)*(Sqr(Q)*Cos(X)-2*Sin(X)*Q-Cos(X)); X:=X+dX end; Z:=Z*dX; WriteLn(Z,' - приближенное значение интеграла'); Z0:=Exp(Q*B)*(Q*Cos(B)-Sin(B))-Exp(Q*A)*(Q*Cos(A)-Sin(A)); WriteLn(Z0,' - точное значение интеграла'); WriteLn(Abs(Z0-Z),' - абсолютная ошибка'); WriteLn(Abs((Z0-Z)/Z0),' - отностиельная ошибка'); WriteLn; //МЕТОД ПАРАБОЛ
WriteLn('Метод Симпсона при N = ',N); dX:=(B-A)/N; dX2:=dX/2; Z:=(Exp(Q*A)*(Sqr(Q)*Cos(A)-2*Sin(A)*Q-Cos(A)) +Exp(Q*B)*(Sqr(Q)*Cos(B)-2*Sin(B)*Q-Cos(B)))/2 +2*Exp(Q*(B-dX2)) *(Sqr(Q)*Cos(B-dX2)-2*Sin(B-dX2)*Q-Cos(B-dX2)); X:=A+dX; for i:=1 to N-1 do begin Z:=Z+Exp(Q*X)*(Sqr(Q)*Cos(X)-2*Sin(X)*Q-Cos(X)) +2*Exp(Q*(X-dX2)) *(Sqr(Q)*Cos(X-dX2)-2*Sin(X-dX2)*Q-Cos(X-dX2)); X:=X+dX end; Z:=Z*dX/3; WriteLn(Z,' - приближенное значение интеграла'); Z0:=Exp(Q*B)*(Q*Cos(B)-Sin(B))-Exp(Q*A)*(Q*Cos(A)-Sin(A)); WriteLn(Z0,' - точное значение интеграла'); WriteLn(Abs(Z0-Z),' - абсолютная ошибка'); WriteLn(Abs((Z0-Z)/Z0),' - отностиельная ошибка'); ReadLn; end.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|