|
|
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: 16128 (0x3f00)
Types: TextFile
Names: »pftx1«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦this⟧ »pftx1«
Fit to Planck function of temperature
begin
boolean cel,dow,nup,ter;
integer i,j,l,m,mm,mp,n,p,q,r,s,u,w,we,wf,wt;
long dT,D,F,S,T,T0,T1,T2,U;
real a,b,C,d,e,eng,f,fix,g,h,K,K1,K2,R,t0,v,x,y,y0,z;
array c(1:3,0:7),cx(1:3,1:6);
real procedure joke(o);
value o; integer o;
begin
f:=h:=0;
z:=(T-T0)/T;
v:=(T-T0)/(T+T0);
y:=v*v;
if y<.554 then begin
b:=T0/(T+T0);
for i:=15 step -1 until 3 do h:=i*i*y/(i+i+1-h);
g:=y*4/(5-h); e:=y/(3-g);
for i:=mp step -1 until o do case 8-i of begin
f:=((((v*15-h*12+48)*v+h*23-87)*v-h*4)*v+h)*c(m,i)/b/80;
f:=((((v*15-h*8+27)*v+h*15-60)*v-h)*c(m,i)/48 + f)*g/b;
f:=((((v*4+g*3-8)*v-g*2)*v+g)*c(m,i)/6 + f)/b;
f:=(((v*2+g*3-6)*v-g)*c(m,i)/4 + f)*e/b;
f:=((y-e)*c(m,i) - f)/b;
f:=((v+e)*c(m,i) + f)/(1-e);
f:=(c(m,i) + f)*z + c(m,0)
end;
joke:=case o of (f,f*z);
end else begin
for i:=mp-1 step -1 until 1 do f:=f*x + cx(m,i);
joke:=case o of ((c(m,1) + f)*z + ln(T0/T)*cx(m,1) + c(m,0),
f*z + ln(T0/T)*cx(m,1))
end
end;
real procedure rent(o);
value o; integer o;
begin
f:=0;
for i:=mp step -1 until o do f:=f*x + c(m,i);
rent:=f
end;
real procedure mhcp(o);
value o; integer o;
begin
f:=0;
for i:=mp step -1 until o do f:=f*x + c(m,i)*(i-1);
mhcp:=f
end;
procedure devi;
begin
if g=0 then g:='-12;
l:=entier(ln(g)/ln10 + 13);
q:=if m=mm then 12 else 10;
l:=if l>q then q else if l<0 then 0 else l;
if f<0 then begin
write(out,"sp",q-l);
for i:=1 step 1 until l do outchar(out,35)
end else write(out,"sp",q);
outchar(out,54);
if f>0 then begin
for i:=1 step 1 until l do outchar(out,35);
write(out,"sp",q-l)
end else write(out,"sp",q)
end;
procedure tbhd(o);
value o; integer o;
begin
write(out,<:
temp./:>,if cel then <:C:> else <:K:>,"sp",wt-7);
if o//100>0 then begin
we:=wf//100+2;
we:=we+we//3+(if o//100=1 then 5 else 1);
write(out,<: !:>,"sp",we-we//2,case o//100 of (<:K:>,
<:pK:>,<:Yø:>),"sp",if o mod 100=0 then 0 else we//2)
end;
if o mod 100>9 then begin
we:=wf mod 100//10+2;
we:=we+we//3-2;
write(out,<: !:>,"sp",we-we//2,<:Hø/'3:>,
"sp",if o mod 10=0 then 0 else we//2)
end;
if o mod 10>0 then begin
we:=wf mod 10+2;
we:=we+we//3;
write(out,<: !:>,"sp",we-we//2,<:Cpø:>)
end;
write(out,"nl",1)
end;
procedure tbln(o);
value o; integer o;
begin
firm(w);
if n=1 then write(out,"sp",wt) else write(out,"nl",1,string fix,
T/F-C,"sp",if w=0 then 2 else 0);
x:=(T-T0)/T0;
if o//100>0 then begin
if o//100=1 then flow(wf//100) else firm(wf//100);
write(out,<: !:>,if o//100=1 then string eng else string fix,
case o//100 of (exp(joke(1))*y0,-joke(1)/ln10,joke(1)*R))
end;
if o mod 100>9 then begin
firm(wf mod 100//10);
write(out,<: !:>,string fix,rent(1)*T0*R/(F*1000))
end;
if o mod 10>0 then begin
firm(wf mod 10);
write(out,<: !:>,string fix,mhcp(2)*R)
end
end;
procedure flow(o);
value o; integer o;
eng:=real(case o+1 of (<<-d00'-dd>,<<-dd0.0'-dd>,<<-ddd.00'-dd>,
<<-ddd.d00'-dd>,<<-ddd.dd0_0'-dd>,<<-ddd.ddd_00'-dd>,
<<-ddd.ddd_d00'-dd>,<<-ddd.ddd_dd0_0'-dd>,
<<-ddd.ddd_ddd_00'-dd>,<<-ddd.ddd_ddd_d00'-dd>));
procedure firm(o);
value o; integer o;
fix:=real(case o+1 of (<<-dddd>,<<-dddd.d>,<<-dddd.dd>,
<<-dddd.ddd>,<<-dddd.ddd_d>,<<-dddd.ddd_dd>,<<-dddd.ddd_ddd>,
<<-dddd.ddd_ddd_d>,<<-dddd.ddd_ddd_dd>,<<-dddd.ddd_ddd_ddd>));
for r:=readi(<:
input mode:>) while r>0 and r<5 do begin
nup:=r<4;
if nup then begin
n:=readi(case r of
(<: number of free energy values to be fitted:>,
<: number of enthalpy values to be fitted:>,
<: number of heat capacity values to be fitted:>));
if n<3-r then goto L0;
R:=if readi(<: SI ?:>) = 0 then readr(<: R:>)
else gasconstant;
cel:=readi(<:
Celsius ?:>) = 1;
C:=if cel then 273.15 else 0;
w:=readi(<: temp.decimals:>);
if w<0 or w>4 then goto L0;
firm(w); flow(2);
F:=10**w;
wt:=case w+1 of (7,7,8,9,11);
case r//2+1 of begin
begin
long array N(1:n);
array U,U2,UU,KU(1:3),k(1:n);
mp:=if n>3 then 3 else n-1;
mm:=if n>3 then 1 else 5-n;
u:=(n+1)//2;
dow:=readi(<: equidistant temp.s ?:>)=1;
if dow then begin
T1:=(readr(<: first temp.:>) + C)*F;
dT:=readr(<: temp.interval:>)*F;
if T1<=0 or dT<=0 then goto L0
end;
p:=readi(<:
free energy type:>);
if p<1 or p>3 then goto L0;
if p=1 then y0:=readr(<: K/Kø:>);
d:=case p of (ln(readr(<: K0:>)/y0),
-readr(<: pK0:>)*ln10,readr(<: Y0:>)/R);
ter:=readi(<: term.input?:>)=1;
if -,ter then connectcuri(<:pfind:>);
for j:=1 step 1 until n do begin
if ter then write(out,"nl",1,<<ddddd>,j,"sp",2);
if dow then begin
N(j):=T:=(j-1)*dT + T1;
if ter then write(out,string fix,T/F-C,
if cel then <:C :> else <:K :>);
if ter then setposition(out,0,0)
end else begin
if ter then setposition(out,0,0);
read(in,a);
N(j):=T:=(a+C)*F
end;
if j<=u then T0:=T;
if T+T0>11863283 then goto L0;
read(in,h);
if case p of (h<=0,abs h>'10,abs h>'10) then goto L0;
k(j):=case p of (ln(h),-h*ln10,h/R)
end;
if -,ter then unstackcuri;
for l:=1,2,3 do U(l):=U2(l):=UU(l):=KU(l):=0;
K:=k(u);
m:=1;
for j:=u+m while j>0 and j<=n do begin
m:=if m>0 then -m else 1-m;
T:=N(j);
D:=T-T0;
S:=T+T0;
f:=D/T;
y:=(D*D)/(S*S);
if y<.445 then begin
e:=0;
for i:=13 step -1 until 1 do e:=i*i*y/(i+i+1-e);
b:=1-e;
g:=(D/S+e)/b*f;
h:=(y-e)/(T0/S)/b*f
end else begin
g:=ln(T/T0) - f;
h:=(D*S)/(T*T0) - ln((T*T)/(T0*T0))
end;
e:=k(j);
U(1):=U(1) + f;
U(2):=U(2) + g;
U(3):=U(3) + h;
U2(1):=U2(1) + f*f;
U2(2):=U2(2) + g*g;
U2(3):=U2(3) + h*h;
KU(1):=KU(1) + e*f;
KU(2):=KU(2) + e*g;
KU(3):=KU(3) + e*h;
UU(1):=UU(1) + g*h;
UU(2):=UU(2) + f*h;
UU(3):=UU(3) + f*g;
K:=e+K
end;
b:=U(2); e:=U(3);
for l:=1,2,3 do begin
a:=U(l);
U2(l):=U2(l)*n - a*a;
KU(l):=KU(l)*n - a*K;
UU(l):=UU(l)*n - b*e;
b:=e; e:=a
end;
f:=U2(2)*U2(1) - UU(3)*UU(3);
g:=UU(1)*U2(1) - UU(2)*UU(3);
h:=KU(2)*U2(1) - KU(1)*UU(3);
for m:=3 step -1 until mm do begin
c(m,3):=cx(m,2):=if m<mm+2 then 0 else
((KU(3)*U2(1) - KU(1)*UU(2))*f - g*h)/
((U2(3)*U2(1) - UU(2)*UU(2))*f - g*g);
c(m,2):=if m<mm+1 then 0 else (h - c(m,3)*g)/f;
cx(m,1):=c(m,3)*2 - c(m,2);
c(m,1):=(KU(1) - c(m,2)*UU(3) - c(m,3)*UU(2))/U2(1);
c(m,0):=(K - c(m,1)*U(1) - c(m,2)*U(2) - c(m,3)*U(3))/n
end;
write(out,<:
number of parameters in H:
:>);
for m:=mm step 1 until 3 do begin
KU(m):=0;
write(out,<<d>,m-mm+1,"sp",case m of (mm*2+20,mm*2+18,0))
end;
write(out,"nl",1);
for j:=1 step 1 until n do begin
write(out,"nl",1,<<ddd>,j);
T:=N(j);
x:=(T-T0)/T0;
for m:=mm step 1 until 3 do begin
f:=k(j)-joke(1);
g:=f*f;
KU(m):=KU(m) + g;
devi
end
end;
write(out,"nl",2,"sp",3);
for m:=mm step 1 until 3 do c(m,0):=c(m,0) + d;
for m:=mm step 1 until if n>4 then 3 else 2 do
write(out,"sp",7,string eng,sqrt(KU(m)/(n-mp-m+2)),"sp",5)
end;
begin
long array M,N(0:6);
array KU,KV,F0(0:6),k(1:if n>0 then n else 1);
mp:=if n>6 then 7 else n+r-2;
s:=mp-r+1;
if s*9+n>79 then goto L0;
mm:=if n>2 then 1 else 6-r-n;
T0:=(readr(if cel then <: ref.temp./C:>
else <: ref.temp./K:>) + C)*F;
p:=readi(<:
free energy type:>);
if p<1 or p>3 then goto L0;
if p=1 then y0:=readr(<: K/Kø:>);
dow:=if r=3 then false
else readi(<: Hø(T0) known exactly ?:>)=1;
K1:=case p of (ln(readr(<: K(T0):>)/y0),
-readr(<: pK(T0):>)*ln10,readr(<: Yø(T0):>)/R);
K2:=if dow or r=3 then readr(<: Hø(T0):>) else 0;
T1:=if n<1 then T0 else (readr(<:
first temp.:>) + C)*F;
dT:=if n<2 then T0 else readr(<: temp.interval:>)*F;
if T1<=0 or dT<=0 then goto L0;
for i:=0 step 1 until s do begin
KU(i):=0;
N(i):=n*n-i*i
end;
ter:=readi(<: term.input?:>)=1;
if -,ter then connectcuri(<:pfind:>);
for j:=1 step 1 until n do begin
if ter then
write(out,"nl",1,<<ddddd>,j,"sp",2,string fix,((j-1)*dT+T1)/F - C,
if cel then <:C :> else <:K :>);
if ter then setposition(out,0,0);
read(in,b);
if abs b>'10 then goto L0;
a:=k(j):=if r=3 then b/R else (b-K2)*F/T0/R;
m:=j*2-n-1;
S:=0; T:=1;
for i:=0 step 1 until s do begin
KU(i):=KU(i) + a*T;
D:=S; S:=T;
u:=i+i+1;
T:=(u*m*S - N(i)*D)//(i*i+u)
end
end;
if -,ter then unstackcuri;
for i:=0 step 1 until s do begin
D:=if i=0 then n else D*N(i)//(i*i);
M(i):=D//(i+i+1);
KU(i):=KU(i)/M(i)
end;
U:=(T0-T1)*2 - dT*(n-1);
g:=U/2/dT;
h:=(U*U)/4/(dT*dT);
D:=N(0); S:=D*3;
T:=(S*5-230)*D+407;
U:=(D*5-110)*D+329;
for i:=0 step 1 until s do case i+1 of begin
F0(i):=1;
F0(i):=g*2;
F0(i):=h*3 - N(1)/4;
F0(i):=(h*10 - (S-7)/2)*g/3;
F0(i):=(h*7 - (S-13)/2)*h*5/12 + N(1)*N(3)/64;
F0(i):=((h*.3 - (D-7)/12)*h*7 + T/480)*g;
F0(i):=((h*11/60-(S-31)/48)*h + U/960)*h*7 - N(1)*N(3)*N(5)/2304
end;
f:=T0/dT;
for m:=3 step -1 until mm do begin
if dow then begin
a:=b:=0;
for i:=s step -1 until 0 do begin
d:=F0(i);
a:=KU(i)*d + a;
b:=d*d/M(i) + b
end;
d:=a/b
end;
for i:=0 step 1 until 6 do
KV(i):=if i>s then 0
else if dow then KU(i) - F0(i)/M(i)*d else KU(i);
for i:=0 step 1 until s do case i+1 of begin
begin
a:=0;
for j:=s step -1 until 0 do a:=F0(j)*KV(j) + a;
KV(i):=a
end;
KV(i):=f*(((h*1.1 - (S-31)/12)*h + U/480)*g*7*KV(6)
+ ((h*3 - (D-7)/2)*h*3.5 + T/480)*KV(5)
+ (h*7 - (S-13)/4)*g*5/3*KV(4)
+ (h*10 - (S-7)/6)*KV(3)
+ g*6*KV(2)
+ 2*KV(1));
KV(i):=f*f*(((h*11 - (S-31)/2)*h + U/240)*1.75*KV(6)
+ (h*3 - (D-7)/4)*g*7*KV(5)
+ (h*7 - (S-13)/12)*2.5*KV(4)
+ g*10*KV(3)
+ 3*KV(2));
KV(i):=f**3*((h*11 - (S-31)/4)*g*7/3*KV(6)
+ (h*3 - (D-7)/12)*7*KV(5)
+ g*35/3*KV(4)
+ 10/3*KV(3));
KV(i):=f**4*((h*11 - (S-31)/12)*1.75*KV(6)
+ g*10.5*KV(5)
+ 35/12*KV(4));
KV(i):=f**5*(g*7.7*KV(6) + 2.1*KV(5));
KV(i):=f**6*77/60*KV(6)
end;
c(m,0):=K1;
c(m,1):=if dow or r=3 then K2*F/T0/R else KV(0);
for i:=2 step 1 until mp do
c(m,i):=if r=3 then KV(i-2)/(i-1) else KV(i-1);
s:=s-1
end;
write(out,<:
number of parameters in H:
:>);
for m:=mm step 1 until 3 do begin
KU(m):=0;
write(out,<<d>,m+mp-3,"sp",case m of (mm*2+20,mm*2+18,0))
end;
write(out,"nl",1);
for j:=1 step 1 until n do begin
write(out,"nl",1,<<ddd>,j);
x:=((j-1)*dT + T1 - T0)/T0;
for m:=mm step 1 until 3 do begin
f:=if r=3 then k(j)-mhcp(2) else
if dow then k(j) - rent(2)*x else k(j) - rent(1);
g:=f*f;
KU(m):=KU(m) + g;
devi
end
end;
write(out,"nl",2,"sp",3);
s:=if r=3 or dow then n-mp+4 else n-mp+3;
for m:=mm step 1 until if s<4 then s-1 else 3 do
write(out,"sp",7,string eng,sqrt(KU(m)/(s-m)),"sp",5)
end end end;
if -,nup then begin
mp:=7; mm:=-3
end;
for q:=readi(<:
number of parameters in H:>) while q>mp+mm-4 and q<=mp do begin
if r<4 then flow(9) else begin
mp:=q; mm:=4-q
end;
m:=q-mp+3;
ter:=readi(<: term.coef.?:>)=1;
if -,ter and r=4 then connectcuri(<:pfcoef:>);
if -,ter and r<4 then connectcuro(<:pfcoef:>);
if r<4 or ter then write(out,<:
ref.temp./K = :>);
if nup then begin
t0:=T0/F;
firm(w);
write(out,string fix,t0,"nl",1)
end else begin
if ter then setposition(out,0,0);
read(in,t0)
end;
for l:=0 step 1 until q do begin
if r<4 or ter then write(out,"nl",1);
if ter then write(out,<: c(:>,<<d>,l,<:) = :>);
if r<4 then write(out,string eng,c(m,l)) else begin
if ter then setposition(out,0,0);
read(in,c(m,l))
end
end;
if -,ter and r=4 then unstackcuri;
if -,ter and r<4 then closeout;
if r>1 then begin
h:=0;
for i:=mp-1 step -1 until 1 do begin
h:=c(m,i+1)*i - h;
cx(m,i):=if i>1 then h/i/(i-1) else -h
end
end;
write(out,"nl",1);
for l:=readi(<:
output type:>) while l>0 and l<312 do begin
if nup then nup:=l//100<>1 or p=1;
p:=l//100;
wf:=readi(<: decimals:>);
if wf<0 or wf>999 then goto L1;
if nup then nup:=readi(<: new K/Kø,R,C!K,t.dec.?:>)<>1;
if-,nup then begin
if p=1 then y0:=readr(<: K/Kø:>);
R:=if readi(<: SI ?:>) = 0 then readr(<: R:>)
else gasconstant;
cel:=readi(<:
Celsius ?:>) = 1;
C:=if cel then 273.15 else 0;
w:=readi(<: temp.decimals:>);
if w<0 or w>9 then goto L1;
F:=10**w;
T0:=t0*F;
wt:=case w+1 of (7,7,8,9,11,12,13,15,16,17);
nup:=true
end;
if wf//100 + wf mod 100//10 + wf mod 10 + w
> (if p=1 then 32 else 34) then goto L1;
for n:=readi(<:
output mode:>) while n>0 and n<4 do case n of begin
begin
tbhd(l);
write(out,"nl",1);
setposition(out,0,0);
read(in,a);
for T:=(a+C)*F while T>0 do begin
tbln(l);
write(out,"nl",2);
setposition(out,0,0);
read(in,a)
end
end;
begin
T1:=(readr(<: first temp.:>) + C)*F;
dT:=readr(<: temp.interval:>)*F;
if T1<=0 or dT<=0 then goto L2;
T2:=(readr(<: last temp.:>) + C)*F;
if T2<T1 then goto L2;
ter:=readi(<: term.output?:>)=1;
if -,ter then connectcuro(<:pfud:>);
tbhd(l);
for T:=T1 step dT until T2 do tbln(l);
closeout
end;
begin
if l<100 then goto L1;
T1:=(readr(<: lower temp.:>) + C)*F;
if T1<=0 then goto L2;
D:=S:=T2:=(readr(<: higher temp.:>) + C)*F;
if T2<=T1 then goto L2;
x:=(T1-T0)/T0;
j:=sgn(rent(1));
s:=sgn(mhcp(2));
dow:=j<>s;
x:=(T2-T0)/T0;
u:=if j<>sgn(rent(1)) then 3
else if s<>sgn(mhcp(2)) and dow then 4 else 2;
d:=maxlong/2;
for j:=1 step 1 until u-2 do begin
T:=if j=1 and dow then T1 else T2;
for s:=0,s+1 while dT<>T do begin
x:=(T-T0)/T0;
a:=mhcp(3)*x;
b:=((a-rent(3)*x)*x-c(m,1))/(c(m,2)+a)*T0 + T0;
if b<.5 or b>d or s>99 then begin
u:=2;
goto L5
end;
dT:=T;
T:=b
end;
case j of begin
D:=T; S:=T
end
end;
L5: K1:=maxreal; K2:=-K1;
tbhd(p*100);
for j:=1 step 1 until u do begin
T:=case j of (T1,D,S,T2);
tbln(p*100);
if f>K2 then K2:=f;
if f<K1 then K1:=f
end;
write(out,"nl",3);
tbhd(l);
L4: write(out,"nl",1,"sp",wt+2);
setposition(out,0,0);
read(in,h);
if p=1 and h<=0 then goto L2;
K:=case p of (ln(h/y0),-h*ln10,h/R);
if K<K1 or K>K2 then goto L2;
K:=c(m,0) + (c(m,1) - K);
L3: write(out,"sp",4);
setposition(out,0,0);
read(in,a);
T:=(a+C)*F;
if T<T1 or T>T2 then goto L4;
for s:=0,s+1 while dT<>T do begin
x:=(T-T0)/T0;
a:=rent(2);
b:=(a*x + c(m,1))/(joke(2) + a*z + K)*T0;
if b<.5 or b>d or s>99 then goto L3;
dT:=T;
T:=b
end;
tbln(l);
write(out,"nl",2);
goto L3
end;
L2: end;
L1: end
end;
L0: end end
IN1: en▶EOF◀