Страница 1 из 1

Интегрирование Ньютон-Котес

Добавлено: 19 апр 2009, 00:47
dr.Jekill
[syntax=pascal]
Uses crt;
var main:real;

Function Func(x:real):real;
begin
Func:=exp(-1*ln(1-sqr(exp(x))))*exp(x);
end;

FUNCTION NEWCOT(C,D:REAL;N:INTEGER):REAL;
TYPE MS=ARRAY[0..7] OF INTEGER;
MS2=ARRAY [3..7] OF MS;
FF=FILE OF MS2;

VAR H1,H2:MS2;
FC1,FC2:TEXT;
X1,SUM,H,Y1:REAL;
I,J:Byte;
name1,name2:string;

BEGIN
writeln('Vvedite imia, soderzhaschego chislitili koefficientov formul Niutona-Kotesa: ');
readln(name1);
clrscr;
writeln('Vvedite imia, soderzhaschego znamenateli koefficientov formul Niutona-Kotesa: ');
readln(name2);
clrscr;
ASSIGN (FC1,name1);
ASSIGN (FC2,name2);
RESET(FC1);
RESET(FC2);
FOR I := 3 TO 7 DO
FOR J := 0 TO 7 DO READ(FC1,H1[I,J]);
FOR I := 3 TO 7 DO
FOR J := 0 TO 7 DO READ(FC2,H2[I,J]);
CLOSE(FC1);
CLOSE(FC2);
H:=(D-C)/N;
X1:=C;
SUM:=0.0;
FOR I:=0 TO 7 DO
BEGIN
SUM:=SUM+FUNC(X1)*H1[N,I]/H2[N,I];
X1:=X1+H;
END;
NEWCOT:=(D-C)*SUM;
END;

begin
clrscr;
main:=NEWCOT(0,1,7);
writeln('Znachenie integrala: ',main:6:2);
readln;
end.
[/syntax]

Ребят, помогите, пожалуйста, с процедурой формирования коэффициентов Ньютона-Котеса, насколько я помню, они не зависят от функции, а только от кол-ва узлов.
Кол-во узлов n=7.
Пожалуйста, помогите разобраться. Буду признателен!

Re: Интегрирование Ньютон-Котес

Добавлено: 12 май 2009, 15:20
dr.Jekill
С коэффициетами разобрался. Считаются заранее и после этого берутся из файлов (они в атаче). Подскажите кто что знает про адаптивный алгоритм, применительно к этой задаче.
[syntax=pascal]
USES CRT;
var c,d,int,zn:real;
N_:byte;

{funkcia nahozhdenia znachenia podintegralnoi funkcii}
Function Func(x:real):real;
begin
Func:=exp((-1)*ln(1+sqr(exp(x))))*exp(x);
end;

{osnovnaia rabochaia funkcia}
FUNCTION NEWCOT (A,B:REAL;N:INTEGER):REAL;
TYPE MS = ARRAY [0..7] OF INTEGER;
VAR F1,F2:TEXT;
X1,SUM,H,Y1:REAL;
H1,H2:MS;
I,J:BYTE;
BEGIN
ASSIGN(F1,'KOEFF1.txt');
RESET(F1);
FOR J:=0 TO n DO READLN(F1,H1[J]);
CLOSE(F1);

ASSIGN(F2,'KOEFF2.txt');
RESET(F2);
FOR J:=0 TO n DO READLN(F2,H2[J]);
CLOSE(F2);

H:=(B-A)/N;
X1:=A;
SUM:=0.0;
FOR I:=0 TO n DO
BEGIN
SUM:=SUM+FUNC(X1)*H1/H2;
X1:=X1+H;
END;
NEWCOT:=(B-A)*SUM;
END;

{osnovnaia programma}
begin

c:=0;
d:=1;
N_:=7;

int:=NEWCOT(c,d,N_);

clrscr;
writeln('INTEGRIROVANIE PO FORMULE NEWTONA-COTESA');
writeln;
writeln('C=',c:5:2);
writeln('D=',d:5:2);
writeln('N= ',N_);
writeln;
writeln('INTEGRAL = ',int:8:5);
write('Press any key to continue...');
readkey;
clrscr;
write('Vvedite prointegrirovannloe znachenie funkcii: ');
readln(zn);
zn:=abs(zn-int);
writeln('Raznica: ',zn:8:5);
write('Press any key to EXIT...');
readkey;
end.
[/syntax]