Вычислительная математика
Шрифт:
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))
Геометрическая интерпретация метода:
Пример программы на языке 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
Метод
Программно генерируются случайные числа и значение интеграла определяется как соотношение количества чисел, попавших в пределы функции, к общему количеству чисел.
Геометрическая интерпретация метода:
Пример программы на языке Basic
10 DEF FNY(X)=COS(P*X-Z*SIN(X))
20 PRINT "ВАРИАНТ"; : INPUT I
30 PRINT "N,P,Z"; : INPUT N,P,Z
35 A=0 : B=PI
40 IF I = 1 THEN GOSUB 100
50 IF I=2 THEN GOSUB 200
60 PRINT "S="S/PI
90 GO TO 20
100 H=B-A : S=0
110 FOR I = 1 TO N : S=S+FNY(A+RND(1)*H) : NEXT I
120 S=H*S/N
190 RETURN
200 H=B-A : S=0 : R=0
210 F=FNY(A+RND(1)*H)
215 IF RND(1)<ABS(F) THEN S=S+SGN(F)
220 R=R+1 : IF R< N THEN 210
230 S=H*S/N
290 RETURN
РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ ВИДА – ФУНКЦИЯ ОТ Х = 0
Метод половинного деления
Уравнение может быть записано в общем виде: F(X)=0.
Решение задачи состоит из двух этапов:
1) отделение корней – выделение отрезков [ab], принадлежащих области определения функции f(x), на которых расположен один и только один корень уравнения, то есть один нуль функции f(X).
2) уточнение корней с любой степенью точности – построение процесса, позволяющего как угодно сузить границы выделенного отрезка. Критерием является следующий: функция f(x) на отрезке [a b] должна быть непрерывна и монотонна, а ее значения на концах отрезка должны иметь разные знаки. Для отделения корней используются два метода.
Аналитический метод: Для отделения действительных корней необходимо указать интервалы монотонности функции f(x), т.е. интервалы, в которых знак первой производной постоянный, а для этого решить уравнение f'(x) = 0 и подсчитать значение функции f(x) в точках корней уравнения и в граничных точках области определения функции. Отрезки, на концах которых у функции разные знаки, содержат корень.
Графический метод: Нужно построить график функции f(x) и выделить отрезки, где функция непрерывна, монотонна и имеет разные знаки на его концах.
Алгоритм метода половинного деления:
Геометрическая интерпретация метода:
Решить задачу:
Методом половинного деления найти корень уравнения x-Cos(x)=0.
Пример программы на языке C#