Лабораторная работа №1

Вариант № 19

Выполнил: Белов Алексей, 2ПМ

Задание: Исследовать корни уравнения

x5 - 3,2x4 +2,1x3 +ax2 -2,458x+1,314=0, a = 2+0,1k, k=0, 1, 2,…15

Решение:

Метод половинного деления.

Запишем уравнение в виде: x5 - 3,2x4 + 2,1x3 - 2,458x = - ax2 - 1,314

Отделим корни графически:

При а = 2

При а = 2,5

Уравнение имеет 1 корень при любом а из диапазона [2; 2,5]. Очевидно, отрезок [-1,5; -0,5] отделяет этот корень.

a x

8

7

2

1

5

4

Программа на Паскале:

program HalfDiv;

const

E = 0.00001;

sta = 2;

fin = 2.5;

step = 0.1;

beg = -1.5;

en = -0.5;

var

a, b, c : real;

Param : real;

F : text;

Function MyFunc(a, x : real) : real;

begin

MyFunc := x*x*x*x*x - 3.2*x*x*x*x + 2.1*x*x*x + a*x*x - 2.458*x + 1.314;

end;

begin

Param := sta;

Assign(F, 'HalfDiv. txt');

Rewrite(F);

Write(F, ' a ');

Writeln(F, ' x');

Writeln(F);

while Param <= fin do begin

a := beg;

b := en;

while (b-a)/2 > E do begin

c := (b+a)/2;

if MyFunc(Param, c)*MyFunc(Param, b) > 0 then

b := c

else

a := c;

end;

Write(F, Param : 5 : 1);

Writeln(F, c : 15 : 10);

Param := Param + step;

end;

Close(F);

end.

Метод Ньютона.

F(x) = x5 - 3,2x4 + 2,1x3 - 2,458x + ax2 + 1,314

F'(x) = 5x4 - 12,8x3+ 6,3x2 +2ax - 2,458

F''(x) = 20x3 38,4x2+ 12,6x +2a

Уравнение имеет 1 корень при любом а из диапазона [2,6; 3]. Очевидно, отрезок [-1,5; -0,5] отделяет этот корень.

a x

3

1

1

4

7

Программа на Паскале:

program Newton;

const

E = 0.00001;

sta = 2.6;

fin = 3;

step = 0.1;

beg = -1.5;

en = -0.5;

var

x0, x, r, m1, M2, i : real;

Param : real;

F : text;

Function MyFunc(a, x : real) : real;

begin

MyFunc := x*x*x*x*x - 3.2*x*x*x*x + 2.1*x*x*x + a*x*x - 2.458*x + 1.314;

end;

Function MyFuncS(a, x : real) : real;

begin

MyFuncS := 5*x*x*x*x - 12.8*x*x*x + 6.3*x*x + 2*a*x - 2.458;

end;

Function MyFuncSS(a, x : real) : real;

begin

MyFuncSS := 20*x*x*x - 38.4*x*x + 12.6*x + 2*a;

end;

begin

Param := sta;

Assign(F, 'Newton. txt');

Rewrite(F);

Write(F, ' a ');

Writeln(F, ' x');

Writeln(F);

while Param <= fin do begin

i := beg;

m1 := MyFuncS(Param, i);

M2 := MyFuncSS(Param, i);

while i < en do begin

i := i+step*step*step;

if m1 > MyFuncS(Param, i) then

m1 := MyFuncS(Param, i);

if M2 < MyFuncSS(Param, i) then

M2 := MyFuncSS(Param, i);

end;

x0 := beg;

r := 1;

while r > E do begin

x := x0 - MyFunc(Param, x0)/MyFuncS(Param, x0);

r := M2*sqr(x-x0)/2/m1;

x0 := x;

end;

Write(F, Param : 5 : 1);

Writeln(F, x : 15 : 10);

Param := Param + step;

end;

Close(F);

end.

Метод простых итераций.