logo
ЭУМКД_ДиВМ3

Квадратурная формула Гаусса

Входные параметры: a,b – интервал интегрирования; fun – вид функции.

Выходные параметры: d – погрешность интегрирования; res – значение интеграла функции.

Схема алгоритма показана на рисунке 4.

Пример. Вычислить приближенное значение определенного интеграла с точностью 0,01

Текст программы:

Procedure Kvadratur(fun:string;a,b:real;var res,d:real);

var c,h,h1,c1,x1,x2,x3,f1,f3,s1,s2:real;

n:integer;

begin

c:=sqrt(3/5);

h1:=(b-a)/2;

c1:=c*h1;

x2:=(b+a)/2;

f1:=Execute(fun,x2-c1);

f3:=Execute(fun,x2+c1);

s1:=h1*(5*f1+8*Execute(fun,x2)+5*f3)/9;

n:=2;

repeat

h:=(b-a)/n; h1:=h/2; c1:=c*h1;

x2:=a+h1; x1:=x2-c1; x3:=x2+c1; s2:=0;

for i:=1 to n do

begin

s2:=s2+5*Execute(fun,x1)+8*Execute(fun,x2)+5*Execute(fun,x3);

x1:=x1+h; x2:=x2+h; x3:=x3+h;

end;

s2:=s2*h1/9; d:=abs(s1-s2)/63; s1:=s2; n:=2*n;

until d<h;

res:=s2;

end;

Вычисления по программе привели к следующим результатам:

Результат: - 0.4863854

Погрешность вычисления:0,007

Рисунок 4 - Схема алгоритма квадратурной формулы Гаусса

Варианты заданий для решения задач численного интегрирования и дифференцирования приведены в таблице 2.

Дифференцирование с помощью сплайнов

Входные параметры: a,b – интервал дифференцирования; x – точка дифференцирования; n – число точек дифференцирования; fun – вид функции.

Выходные параметры: y_1,y_2 – значения первой и второй производной в точке x соответственно.

Схема алгоритма показана на рисунке 5.

Пример. Продифференцировать функцию , количество точек разбиения 5, значение точки х=1.

Текст программы:

procedure Spl_Integr(fun:string;a,b,x:real;n:integer;var y_1,y_2:real);

var h,h1,h2,aa:real;

y:array of real;

begin

h:=(b-a)/n;

SetLength(y,n-1);

aa:=a;

for i:=0 to length(y)-1 do

begin

y[i]:=execute(fun,aa); form3.Memo1.Lines.Add(floattostr(y[i]));

aa:=aa+h;

end;

i:=trunc((x-a)/h+h/2);

h1:=2*h; h2:=h*h; if i=0 then

begin

y_1:=(-3*y[0]+4*y[1]-y[2])/h1; y_2:=(2*y[0]-5*y[1]+4*y[2]-y[3])/h2;

end;

if (i>0)and(i<n) then begin

y_1:=(-y[i-1]+y[i+1])/h1; y_2:=(y[i-1]-2*y[i]+y[i+1])/h2; end;

if i=n then

begin

y_1:=(y[n-2]-4*y[n-1]+3*y[n])/h1; y_2:=(-y[n-3]+4*y[n-2]-5*y[n-1]+2*y[n])/h2;

end;

end;

Вычисления по программе привели к следующим результатам:

Первая производная:3,808

Вторая производная:10,00

Рисунок 5 - Схема алгоритма дифференцирования с помощью сплайнов

Варианты заданий приведены в таблице 2.