Курсач Юлин / Метод парабол
.docФедеральное агентство образования Российской Федерации
Пермский государственный технический университет
Кафедра «Динамика и прочность машин»
ПРАКТИЧЕСКАЯ РАБОТА
«Программная реализация метода парабол отыскания корней алгебраических и трансцендентных уравнений»
Выполнила:
ст. ФПММ гр. ДПМ-03
Михута Ю.С.
Проверила:
Шевелев Н. А.
Пермь 2007
Программа:
program metod_parabol;
uses crt;
const eps=0.00001; n=6;
var f0,f1,f2,fm,x0,x1,x2,x3,z,g,l,l12,d,h1,h2: extended;
root: array [1..n] of extended;
quantity: array[1..n] of integer;
i: integer;
function f(x: extended; n:integer): extended;
var ii: integer;
ff: extended;
begin
ff:=cos(x);
if n<>1 then for ii:=1 to n-1 do ff:=ff/(x-root[ii]);
f:=ff;
end;
begin
clrscr;
textcolor(4);
writeln('KopHu ypaBHeHu9I:');
writeln;
for i:=1 to n do
begin
x1:=-2; x2:=3; x3:= 5;
f1:=f(x1,i);
f2:=f(x2,i);
repeat
quantity[i]:=quantity[i]+1;
fm:=f(x3,i);
x0:=x1; x1:=x2; x2:=x3;
f0:=f1; f1:=f2; f2:=fm;
h1:=x1-x0; h2:=x2-x1; l:=h2/h1; d:=1+l;
g:=f0*l*l-f1*d*d+f2*(d+l);
z:=g*g-4*f2*d*l*(f0*l-f1*d+f2);
if g>0 then l12:=(-2*f2*d)/(g+sqrt(abs(z))) else l12:=(-2*f2*d)/(g-sqrt(abs(z)));
x3:=x2+l12*h2;
if x3=0 then exit;
until abs((x2-x3)/x3)<eps;
root[i]:=x3;
textcolor(15);
write(i,':');
write(root[i]:4:6);
writeln(' iterations quantity:=',quantity[i]);
end;
writeln;
textcolor(14);
writeln('press any key to exit...');
readln;
end.
Примеры:
№1. f(x) = sin(x)*sh(x)
Корни уравнения:
x1 = 0
x2 = 0
x3 = 3.141593
x4 = -3.141593
x5 = 6.283185
x6 = -6.283185
№2. f(x) = 1+2sin(x)
Корни уравнения:
x1 = -0.523599
x2 = -2.617994
x3 = 5.759587
x4 = -6.806784
x5 = 9.948377
№3. f(x) = cos(x)
Корни уравнения:
x1 = -1.570796
x2 = 4.712389
x3 = 1.570796
x4 = -4.712389
x5 = -7.853982