Шрифт:
END; S := S*H;
WRITELN (‘ИНТЕГРАЛ РАВЕН ’, S);
END.
Подпрограмма на языке Basic
10 DEF FNA(X)=EXP(-Х*Х)
20 PRINT "N,B0,B9,H1"; : INPUT N,B0,B9,H1
30 C=2/SQR(PI) : A=0 : S1=0
40 FOR B=B0 TO B9 SТЕР H1
50 GOSUB 100
60 S1=S1+S : A=B
70 PRINT B,C*S1 : NEXT В
90 GOTO 10
100 H=(B-A)/N : S1=(FNA(A)+FNA(B))/2
110 FOR I = 1 TO N-1 : S=S+FNA(A+ I *H) : NEXT I
120 S=S*H
190 RETURN
110 REM МЕТОД ТРАПЕЦИИ
120 INPUT . “Входные переменные A,B,N =”;A,B,N
130 H = (B-A)/N
140 S = O
150 X = A
160 FOR I = 1 TO N-1
170 X = X+H
180 S = S + FNY (X)
190 NEXT I
200 S = H*(FNY(A) + FNY(B) + 2*S) / 2
210 RETURN
Подпрограмма на языке Pascal
VAR N,I,K:INTEGER; A,B,B0,B9,H,C,S,S1:REAL;
FUNCTION F(X:REAL):REAL;BEGIN
F:=EXP(-X*X);END;
PROCEDURE TRAP(VAR A,B:REAL;
N:INTEGER; FUNCTION F:REAL;S:REAL);
VAR I:INTEGER;H:REAL;
BEGIN H:=(B-A)/N;S:=(F(A)+F(B))/2;
FOR I:=1 TO N-1 DO S:=S+F(A+I*H);
S:=S*H;END;
BEGIN C:=2/SQRT(3.14159265);
REPEAT WRITE('N,B0,B9,H?'); READLN(N,B0,B9,H);
K:=ROUND((B9-B0)/H+1.0); B:=B0; A:=0.0; S1:=0.0;
FOR I:= 1 TO K DO BEGIN TRAP(A,B,N,F,S); S1:=S1+S; A:=1.;
WRITELN(B,' ',C*S1); B:=B*H; END; UNTIL FALSE;END.
Формула СИМПСОНА
S= (b-a)/(6N)(f (x0) + f (x2N) + i=12N-1 (3 + (-1) i-1) f (xi)) шаг:h=(b-a)/2N
Геометрическая интерпретация метода:
Пример программы на языке C#
Программа реализует оба метода – ТРАПЕЦИЙ и СИМПСОНА для функции f(x) с подбором шага интегрирования.
public double f(double x) {return x-Math.Cos(x);}
while (Math.Abs(r – r1) > p) { r1 = r; s=0; x=0;
if (radioButton1.Checked == true) k = n; else k = 2 * n;
h = (b – a) / k; for (int i=1;i<=k-1;i++) { x=x+h;
if (radioButton1.Checked == true) s = s + f(x);
else s = s+(3+Math.Pow(-1,i-1))*f(x); }
if (radioButton1.Checked == true) { r = h * (f(a) + f(b) + 2 * s) / 2; }
else { r = h * (f(a) + f(b) + s) / 3; }
n = n + 10; } textBox1.Text=Convert.ToString(r);
textBox2.Text=Convert.ToString(n);
Пример программы на языке Pascal
VAR I,K:INTEGER; Е,Z,Z0,Z9,H,S:REAL;
FUNCTION F(X:REAL):REAL;
BEGIN F:=SQRT(1.0-Z*SQR(SIN(X)); END;
PROCEDURE SIMPE(A,B,E:REAL; FUNCTION F:REAL;VAR S:REAL);
VAR I:INTEGER; C1,H,H2,S1,S2,S3,X:REAL;
BEGIN E1:=E*15.0; H:=(B-A)/2;
S:=2*F(A+H); S1:=F(A)+F(B)+S; S:=S1+S;
REPEAT S2:=0.0; S3:=S; H2:=H; H:=H/2; X:=A+H;
WHILE (X<B)=(H>0.0) DO BEGIN S2:=S2+F(X); X:=X+H2; END; S2:=2*S2; S1:=S1+S2; S:=S1+S2; UNTIL ABS(1.0-S/(2*S3))<=C1; S:=S*H/3.0;END;
BEGIN
REPEAT WRITE ('C,Z0,Z9,H?');READLN(C,Z0,Z9,H); K:=ROUND((Z9-Z0)/Н+1.0); Z:=Z0;
FOR I:=1 TO К DO BEGIN SIMPE(0.0,3.1415925/2,E,F,S);
WRITELN(Z,' ',S); Z:=Z+H; END; UNTIL FALSE; END.
Пример программы на языке Basic
10 DEF FNA(Х) =SQR(1-Z*SIN(X)^2)
20 PRINT "E,Z0,Z9,H1";: INPUT E,Z0,Z9,H1
30 A=0 : B=PI/2
40 FOR Z=Z0 ТО Z9 STEP H1
50 GOSUB 100
40 PRINT Z,S : NEXT Z
90 GOTO 10
100 E1=E*15 : H=(B-A)/2
110 S=2*FNA(A+H) : S1=FNA(A)+FNA(B)+S : S=S1+S
120 S2=0 : S3=S : H2=H : H=H/2
130 FOR X=A+H TO В STEP H2 : S2=S2+FNA(X):NEXT X
140 S2=2*S2 : S1=S1+S2 : S=S1+S2
150 IF ABS(1-S/(2*S3))>E1 THEN 120
140 S=S*H/3
190 RETURN
Метод МОНТЕ-КАРЛО
Программно генерируются случайные числа и значение интеграла определяется как соотношение количества чисел, попавших в пределы функции, к общему количеству чисел.
Геометрическая интерпретация метода: