|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 2304 (0x900) Types: TextFile Names: »tspln3smth«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦09b4e9619⟧ »thcømat« └─⟦this⟧
message spln3smth spln3smth=algol message.no cubic splinesmoothing external boolean procedure spln3smth(X,YS,SD,n); value n; integer n; array X,YS,SD; begin integer i,j; real s,s0,sc,w,m,p,q,dx,dx1,a,b; array A(1:n,1:n),Q(1:n-1); integer array P(1:n); spln3smth:=false; if n<4 then goto END; for i:=2 step 1 until n do begin if X(i-1)>=X(i) then goto END end; p:=q:=dx:=dx1:=0; for i:=1 step 1 until n do begin p:=p+YS(i); q:=q+X(i)*YS(i); dx:=dx+X(i); dx1:=dx1+X(i)**2 end; a:=(n*q-dx*p)/(n*dx1-dx*dx); b:=(dx1*p-dx*q)/(n*dx1-dx*dx); YS(1):=YS(1)-a*X(1)-b; s:=s0:=YS(1); for i:=2 step 1 until n do begin YS(i):=sc:=YS(i)-a*X(i)-b; if sc<s0 then s0:=sc else if sc>s then s:=sc end; if s=s0 then goto END; sc:=(s-s0)**2/(X(n)-X(1))**3; for i:=1 step 1 until n do begin dx:=X(2)-X(1); s:=(if i=1 then -1 else if i=2 then 1 else 0)/dx; q:=m:=Q(1):=A(i,1):=0; for j:=2 step 1 until n-1 do begin dx1:=dx; dx:=X(j+1)-X(j); s0:=s; s:=(if i=j then -1 else if i=j+1 then 1 else 0)/dx; p:=2*(dx+dx1)-dx1*q; A(i,j):=m:=(6*(s-s0)-dx1*m)/p; Q(j):=q:=dx/p end j; w:=SD(i)**2/sc; A(i,n):=s0:=m/dx*w; dx1:=X(n-1); for j:=n-2 step -1 until 1 do begin q:=m; m:=A(i,j)-Q(j)*q; dx:=dx1; dx1:=X(j); s:=s0; s0:=(m-q)/(dx-dx1)*w; A(i,j+1):=s0-s end j; A(i,1):=-s0; A(i,i):=A(i,i)+1; end i; if decompose(A,P,1) then begin solve(A,P,1,YS); for i:=1 step 1 until n do YS(i):=YS(i)+a*X(i)+b; spln3smth:=true end; END: end spln3smth ; end ▶EOF◀