лаба 2 (Готовые лабы в ПАСКАЛЕ (описание внутри))
Описание файла
Файл "лаба 2" внутри архива находится в следующих папках: e, Lab2 (2ая). Документ из архива "Готовые лабы в ПАСКАЛЕ (описание внутри)", который расположен в категории "". Всё это находится в предмете "численные методы" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "численные методы" в общих файлах.
Онлайн просмотр документа "лаба 2"
Текст из документа "лаба 2"
Лабораторная работа № 2.
Построение кубического сплайна
для таблично заданной функции.
Вариант № 12
Группа МТ1-32
Кондрашов А.П.
program laba2;
var h,r,aa,bb,x,o,sp,sp1,sp2,sp3,sp4,f,e,e1:real;
n,i,w:longint;
a1,b1,c1,a,b,c,s,x1,al,y,bet,d:array[0..100] of real;
procedure vvod;
begin
writeln('':4000);
write('n=');
readln(n);
write('x=');
readln(x);
aa:=0;
bb:=4;
if (x<aa) or (x>bb) then halt;
h:=(bb-aa)/(n);
x1[0]:=aa;
for i:=0 to n do
begin
y[i]:=(4*x1[i]*x1[i]*x1[i])/(x1[i]*x1[i]*x1[i]*x1[i]*x1[i]
*x1[i]*x1[i]*x1[i]+1);
x1[i+1]:=x1[i]+h;
end;
for i:=1 to n-1 do
begin
a1[i]:=1;
b1[i]:=4;
c1[i]:=1;
s[i]:=3*(y[i+1]-2*y[i]+y[i-1])/(h*h);
end;
a1[0]:=0;
c1[n]:=0;
end;
procedure work;
var r:real;i:longint;
begin
al[1]:=-c1[1]/b1[1];
bet[1]:=s[1]/b1[1];
for i:=2 to n-1 do
begin
r:=a1[i]*al[i-1]+b1[i];
al[i]:=-c1[i]/r;
bet[i]:=(s[i]-a1[i]*bet[i-1])/r;
end;
c[n]:=bet[n];
for i:=n-1 downto 1 do c[i]:=al[i]*c[i+1]+bet[i];
end;
procedure raschet;
begin
for i:=0 to n-1 do
begin
a[i]:=y[i];
b[i]:=(y[i+1]-y[i])/h-h*(c[i+1]+2*c[i])/3;
d[i]:=(c[i+1]-c[i])/(3*h);
end;
end;
procedure vivod;
begin
writeln('--------------------------------------------');
writeln(' x f(x) s(x) e(x) ');
writeln('--------------------------------------------');
for i:=1 to n do
begin
sp3:=a[i-1]+b[i-1]*(x1[i]-x1[i-1])+c[i-1]*(x1[i]-
x1[i-1])*(x1[i]-x1[i-1]);
sp4:=d[i-1]*(x1[i]-x1[i-1])*(x1[i]-x1[i-1])*(x1[i]-x1[i-1]);
sp:=sp3+sp4;
e:=abs(sp-y[i]);
writeln(x1[i]:8:4,' ',y[i]:8:4,' ',sp:8:4,' ',e:8:4);
end;
writeln('--------------------------------------------');
writeln(' ');
writeln('--------------------------------------------');
writeln(' x* f(x*) s(x*) e(x*) ');
writeln('--------------------------------------------');
for i:=1 to n do
begin
o:=aa+(i-0.5)*h;
f:=4*o*o*o/(o*o*o*o*o*o*o*o+1);
sp1:=a[i-1]+b[i-1]*(o-x1[i-1])+c[i-1]*(o-x1[i-1])*
(o-x1[i-1])+d[i-1]*(o-x1[i-1])*(o-x1[i-1])*(o-x1[i-1]);
e1:=abs(sp1-f);
writeln(o:8:4,' ',f:8:4,' ',sp1:8:4,' ',e1:8:4);
end;
writeln('--------------------------------------------');
for i:=0 to n-1 do if (x>i*h) and (x<(i+1)*h) then w:=i;
writeln('f(',x:2:2,')=',4*x*x*x/(x*x*x*x*x*x*x*x+1):2:4);
sp2:=a[w]+b[w]*(x-x1[w])+c[w]*(x-x1[w])*(x-x1[w])+
d[w]*(x-x1[w])*(x-x1[w])*(x-x1[w]);
writeln('splain(',x:2:2,')=',sp2:2:4);
writeln('e#=',abs(sp2-4*x*x*x/(x*x*x*x*x*x*x*x+1)):2:4);
end;
BEGIN
vvod;
work;
raschet;
vivod;
END.
Результат работы программы.
n=10 x=2.5
Результат для базовых точек.
---------------------------------------------------------------
x f(x) s(x) e(x)
---------------------------------------------------------------
0.4000 0.2558 0.2558 0.0000
0.8000 1.7538 1.7538 0.0000
1.2000 1.3042 1.3042 0.0000
1.6000 0.3728 0.3728 0.0000
2.0000 0.1245 0.1245 0.0000
2.4000 0.0502 0.0502 0.0000
2.8000 0.0232 0.0232 0.0000
3.2000 0.0119 0.0119 0.0000
3.6000 0.0066 0.0066 0.0000
4.0000 0.0039 0.0039 0.0000
----------------------------------------------------------------
Результат для промежуточных точек.
----------------------------------------------------------------
x* f(x*) s(x*) e(x*)
----------------------------------------------------------------
0.2000 0.0320 -0.0446 0.0766
0.6000 0.8497 1.0566 0.2069
1.0000 2.0000 1.7588 0.2412
1.4000 0.6965 0.7783 0.0817
1.8000 0.2098 0.1842 0.0256
2.2000 0.0775 0.0839 0.0065
2.6000 0.0337 0.0318 0.0018
3.0000 0.0165 0.0169 0.0005
3.4000 0.0088 0.0087 0.0001
3.8000 0.0050 0.0051 0.0001
-----------------------------------------------------------------
Значения функции и сплайна в точке
вводимой с экрана, x=2.5.
f(2.50)=0.0409 splain(2.50)=0.0392 e#=0.0017