USES SPLIN; { Porovnava hodnoty derivace funkce Atan(x/delt) s hodnotou ziskanou pomoci splinu zadavaji se derivace na okraji jako okraj. podm. vysledek se pise do souboru SPLB1.DAT nbod = pocet zadanych hodnot, ndel pocet vypisovanych vysledky splinu} const pi = 3.141592; var X,Y, Y2 : RealArrayNP; xmax,xmin,yp1,ypn,dx,y21,xh,y1gs,y1fs,dx1,y1p,delt: Real; i,nbod,ndel : integer; f1 : text; PROCEDURE splder(VAR xa,ya,y2a: RealArrayNP; n: integer; x: real; VAR y1: real); VAR klo,khi,k: integer; h,b,a: real; BEGIN klo := 1; khi := n; WHILE khi-klo > 1 DO BEGIN k := (khi+klo) DIV 2; IF xa[k] > x THEN khi := k ELSE klo := k END; h := xa[khi]-xa[klo]; IF h = 0.0 THEN BEGIN writeln ('pause in routine SPLINT'); writeln (' ... bad XA input'); readln END; a := (xa[khi]-x)/h; b := (x-xa[klo])/h; y1:= (ya[khi]-ya[klo])/h+ (-(3*a*a-1)*y2a[klo]+(3*b*b-1)*y2a[khi])*h/6.0 END; BEGIN ASSIGN(f1,'splb1.dat'); REWRITE(f1); Writeln('ZADEJ xmin,xmax,nbod(pocet bodu v tabulce),delt'); Readln(xmin,xmax,nbod,delt); dx := (xmax-xmin)/(nbod - 1); FOR i := 1 to nbod DO BEGIN x[i] := xmin + (i-1)*dx; y[i] := ArcTan(x[i]/delt) END; Writeln (' Zadej derivaci y pro xmin; xmax;ndel(pocet vyslednych bodu'); Readln(yp1,ypn,ndel); Spline(X,Y,nbod,yp1,ypn,Y2); dx1 := (xmax-xmin)/(ndel - 1); writeln(' x y1teor y1splin x[i] y1d[i] '); FOR i := 1 to ndel DO BEGIN xh := xmin+(i-1)*dx1; y1fs := 1./(delt+sqr(xh)/delt); splder(x,y,y2,nbod,xh,y1gs); IF(i <= nbod) THEN BEGIN y1p := 1./(delt+sqr(x[i])/delt); writeln(xh,y1fs,y1gs,x[i],y1p); writeln(f1,xh:10:6,' ',y1fs:13:-4,' ',y1gs:13:-4,' ', x[i]:13:-4,' ',y1p:13:-4) END ELSE BEGIN writeln(xh,y1fs,y1gs); writeln(f1,xh:10:6,' ',y1fs:13:-4,' ',y1gs:13:-4); END; END; CLOSE(f1) END.