Лабораторная работа №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.
Метод простых итераций.


