Информатика. Часть 2 • Лекций – 6 часов • Лабораторных работ – 8 часов Экзамен Применение численных методов при моделировании ХТП. Отделение корней уравнения. Метод «бисекций». Общие сведенья • • • • f ( x ) = 0. f (x) =а0xn + а1хn-1 + ... + аn =0. х3 + х2 + 2х = 0. f()=0 Отделение корней • f (x) = 1(x) – 2(x) = 0 • 1(x) = 2(x) • y1=1(x); y2=2(x) • f(x)= x∙lgx – 1 = 0 • y1 = lg x и y2 = 1/x Метод деления отрезка пополам (метод бисекций) x 6x 2 0 3 • • • • • • • • [–3, –1] =0.1 f(–3)= –27+18+2= –7; f(–1)= –1+6+2=+7 (–3, –1)/2= –2 f(–2)= –8+12+2=6 (–3–2)/2= –2.5 [–3,–2.5] (–3–2.5)/2= –2.75 [–2,75,–2,5] (–2.75–2.5)/2= –2.625 [–2.625, –2.5] (–2.625–2.5)/2=–2.536 |b–a| 0.062<0.1 Программа решения уравнений методом деления отрезка пополам. Задание: решить уравнение ex - 10x = 0. PROGRAM del; LABEL 1,2; VAR a, b, x0, eps, r1, r2: Real; k: Integer; FUNCTION f(x:real): Real; { Исследуемая функция } BEGIN f:=exp(x)-(10*x); END; BEGIN read(a,b,eps); k:=0; 1:k:=k+1; x0:=(a+b)/2; IF f(x0)=0 THEN GOTO 2; IF abs(b-a)<eps THEN GOTO 2; r1:=f(x0); r2:=f(a); IF (r1*r2)<0 THEN b:=x0 ELSE a:=x0; GOTO 1; 2:writeln(X0:5:2); END. Метод Ньютона (метод касательных) Пусть функция f(x) имеет первую и вторую производные на отрезке [a, b], причем выполнено условие знакопеременности функции f(a)f(b)<0, а производные f '(x), f ''(x) сохраняют знак на отрезке [a, b]. Тогда, исходя из начального приближения x0[a, b], удовлетворяющего неравенству f(x)f "(x)>0, можно построить итерационную последовательность xn 1 xn f ( xn ) , n 0,1, 2..., / f ( xn ) В данном методе процесс итераций состоит в том, что в качестве приближений к корню принимаются значения x0, x1 ,x2... точек пересечения касательной к кривой y = f(x) с осью абсцисс. То есть, геометрически метод Ньютона эквивалентен замене небольшой дуги кривой y = f(x) касательной. При этом не обязательно задавать отрезок [a, b], содержащий корень уравнения, а достаточно лишь найти некоторое начальное приближение корня х = х0 f ( x) 5x3 20 x 2 55x 150 0. • • [4, 6] =0.001 f’(x)=15x2 – 40x – 55; f’’(x)=30x – 40 x=4 f(4)= – 70; f(4)=80; x=6 f(6)=180; f(6)=140. 1. x1 = x0 – f(x0)/f '(x0); f(6) = 180; f(6)=245; x1 = 6 – 180/245=5.2653; 2. f(5.265) = 35.8; f ' (5.265)=150.2; x2 = 5.265 – 35.8/150.2=5.027; 3. f(5.027) = 3.281; f(5.027)=123; x3 = 5.027 – 3.281/123=5.0003; 4. f(5.0003)=0.0394; f ' (5.0003)=120; x4 = 5.0003 – 0.0394/120=5.000. x3- 2x2 + 1.3x = 0 PROGRAM newton; LABEL m1, m2; VAR x, x0, eps:real; k:integer; FUNCTION f(x0:real):real; BEGIN f:=x*x*x-2*x*x+1.3*x-0.2; END; FUNCTION f1(x0:real):real; BEGIN f1:=3*x*x-4*x+1.3; END; BEGIN read(x0,eps); k:=0; m2: x:=x0; x0:=x-f(x)/f1(x); k:=k+1; IF abs(x-x0) <= eps THEN GOTO m1 ELSE GOTO m2; m1: writeln('корень уравнения',x); END.