Шрифт:
Пример программы на языке 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#
double x, left = 0, right = 1;
do { x = ( left + right ) / 2;
if ( ( Math.Cos(x) – x ) * ( Math.Cos(left) – left ) < 0 )
right = x; else left = x; }
while ( Math.Abs( right – left ) >1e-4 );
Console.WriteLine( "Корень равен " + x );
Пример программы на языке Pascal
PROGRAM P9;
FUNCTION FUN(A:REAL):REAL;
BEGIN
FUN:=A-COS(A);
END;
VAR A,B,X:REAL;
BEGIN
WRITELN('Ввести интервал А и В для поиска корня = ');
READLN(A,B);
REPEAT X:=0.5*(A+B);
IF FUN(X)*FUN(A)<0 THEN B:=X ELSE A:=X;
UNTIL ABS(A-B)<1E-4;
WRITELN(' Корень уравнения ',X);
END.
(Тест: Интервал 0 и 1; Ответ = 0.73907470703125)
Решить задачу:
Найти корень уравнения на отрезке [1; 2] с точностью =10-4 методом половинного деления.
Пример программы на языке Pascal
CONST A = 1;B = 2;EPS = 1E-4;
VAR X1, X2, X, Y1, Y2: REAL;F : BOOLEAN;
BEGIN
X1 := A; X2 := B; F := TRUE;
WHILE F DO
IF ABS (X1 – X2) > EPS THEN
BEGIN
Y1 := COS(2/X1) – 2*SIN(1/X1) + 1/X1; X := (X1 + X2)/2;
Y2 := COS(2/X) – 2*SIN(1/X) + 1/X;
IF ABS(Y2) > EPS THEN
IF Y1*Y2 > 0 THEN X1:= X ELSE X2:= X
ELSE F := FALSE END ELSE F:= FALSE;
WRITELN (‘КОРЕНЬ УРАВНЕНИЯ ’,X);
END.
Ответ 1,875
Пример программы на языке Basic
10 DIM P(9)
20 PRINT " А,В,Е " ; : INPUT А,B,Е
30 PRINT "СКОЛЬКО ПАРАМЕТРОВ"; : INPUT N
40 FOR К=1 TO N : PRINT "Р"К; : INPUT Р(К) : NEXT К
50 GOSUB 100
60 PRINT "Х=”Х
90 GOТО 20
100 Х=А : GOSUB 200
110 S=SGN(F)
120 X = (А+В)/2 : GOSUB 200
130 IF ABS(F)<Р(2) THEN RETURN
140 IF SGN(F)=S THEN A=X : GOTO 160
150 B=X
160 IF B-A>E THEN 120
190 RETURN
200 R=1 : R1=SQR(1-Х)
210 R2=(R+R1) /2 : R1=SQR (R*R1) : R=R2