215 IF RND(1) 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 220 IF R-R1 >P(2) THEN 210 230 F=R*P(1)-PI/2 290 RETURN Пример программы на языке Pascal VAR P: ARRAY [1..9] OF REAL; A,B,X,E:REAL;N,K:INTEGER; FUNCTION F(X:REAL):REAL; VAR R,R1,R2: REAL; BEGIN R:=1.0; R1:=SQRT (1.0-X); WHILE R-R1 >P[2] DO BEGIN R2:=(R+R1)/2; R1:=SQRT(R*R1); R:=R2; END; F:=(R+R1)*P[1]-3.14159265; END; FUNCTION SGN(X:REAL):INTEGER; BEGIN SGN:=0; IF X<0.0 THEN SGN:=-1; IF X>0.0 THEN SGN:=1; END; PROCEDURE DICH(VAR A,В,X,E,E1:REAL; FUNCTION F:REAL); VAR I:INTEGER; R:REAL; BEGIN I:=SGN(F(A)); WHILE B-A>E DO BEGIN X:= (A+B) /2; R:=F(X); IF ABS(R) IF SGN(R)=I THEN A:=X ELSE B:=X;END;END; BEGIN REPEAT WRITE(‘A,B,E?'); READLN(A,В,E); WRITE('СКОЛЬКО ПАРАМЕТРОВ? '); READLN(N); FOR K:=1 TO N DO BEGIN WRITE(‘P(‘,K:2, ')? '); READLN (Р[К]);END; DICH(A,B,X,E,P[2],F); WRITELN('X=’,X); UNTIL FALSE; END. Метод итераций Уравнение f(x)=0 представляется в виде x=(x),где (x)определяется одним из способов: (x)= x – f(x),где =const (x)= x + (x)f(x), где (x)-произвольная функция не имеющая корней на отрезке (a/b). Метод простой итерации определяется формулой: xn+1=(xn), n=0,1,2,3… где n-номер итерации,x0-произвольно заданное начальное приближение. Процесс сходится к корню уравнения, если на отрезке (ab) выполняется условие: '(x) <= q < 1.