|
DataMuseum.dkPresents historical artifacts from the history of: RegneCentralen GIER Computer |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RegneCentralen GIER Computer Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 6224 (0x1850) Description: Bits:30000655 P15 1. del Types: 8-hole paper tape Notes: Gier Text, Has10
Program P15 - ALGOL 4 - 22-5-1967 Jens Thyge Kristensenbegin _____integer by,d1,d2,d3,del,i,j,maxdel,maxlin,n,n0,nlin,nm1,p,side,to; _______real c,epsilon,error,h,h0,k1,k2,k3,k4,m,x,x0,x1,xb,xb1,xm,xs,xs1, ____y,y0,y1,yb,ym;boolean boole; _______comment _______Programmet løser differentialligningen dy/dx = f(x,y,c) med givne begyn- delsesbetingelser (xb,yb) fra xb til slutværdien xs ved anvendelse af en fjerde ordens Runge-Kutta-formel: y[n+1] = y[n] + (k1+2(k2+k3)+k4)/6 , hvor k1 = h⨯f(x[n],y[n],c) , k2 = h⨯f(x[n]+h/2,y[n]+k1/2,c) , k3 = h⨯f(x[n]+h/2,y[n]+k2/2,c) , og k4 = h⨯f(x[n]+h,y[n]+k3,c). h = x[n+1] - x[n] , og c er en arbitrær konstant. PAPIRFORMAT: A4-høj med 60 linier per side, første linie sættes 5 linier under papirets overkant og med margin paa 10 bogstaver. INPUTSTRIMMEL: For hver funktion, der ønskes behandlet, anføres begyndelses- værdierne xb, yb , slutværdi xs , hvortil der integreres (der krævesxb | xs), antallet n0 af x,y-sæt, der ønskes beregnet per enhedsinterval =i x, relativ tolerence epsilon , og parameteren c . OUTPUT: Tabel over sammenhørende værdier af x og y = y(x,c) i inter- vallet mellem xb og xs , samt antallet af skridt benyttet ved integra- tion af differentialligningen mellem to paa hinanden følgende x-værdier i tabellen. KRYDSFELTET: 0 0 0 x 0 x 0 0 0 0 x 0 0 0 0 0 ;procedure RK(f,S); _________real f; string S; ____ ______begin _____procedure text; _________begin writetext(|< _____ <Runge-Kutta-metode af fjerde orden til integration af differential- ligningen dy/dx = f(x,y,c)Side |); write(|dd|,side); write(| dd|,d1); > < > < >writetext(|< - |); write(|dd|,d2); writetext(|< - |); < > < > < >write(|dddd|,d3); writetext(|< Jens Thyge Kristensen|); < > < >writecr; writecr; writecr; nlin:= nlin+7end text; ___xb:= read real; yb:= read real; xs:= read real; n0:= read integer; epsilon:= read real; c:= read real; h0:= 1/n0;if xb<xs then __ ____begin xb1:= entier(xb⨯n0)+1; _____if abs(xb1-xb⨯n0)<1/to then xb1:= xb1+1; xs1:= entier(xs⨯n0); __ ____if abs(xs1-xs⨯n0)<1/to then xs1:= xs1-1 end __ ____ ___else ____begin xb1:= entier(xb⨯n0); h0:= -h0; _____if abs(xb1-xb⨯n0)<1/to then xb1:= xb1-1; xs1:= entier(xs⨯n0)+1; __ ____if abs(xs1-xs⨯n0)<1/to then xs1:= xs1+1 end; __ ____ ___n:= abs(xs1-xb1)+1; nm1:= n-1; xb1:= xb1/n0; xs1:= xs1/n0; error:= epsilon/(n+1); x0:= xm:= xb; y0:= ym:= yb;for i:= 0 step 1 until n do ___ ____ _____ __begin _____x1:= if i>0 ∧ i<n then (xb1⨯(nm1-i)+xs1⨯i)/nm1 else if i=0 then xb1 else xs; __ ____ ____ __ ____ ____h:= if i=0 ∨ i=n then x1-x0 else h0; m:= (x0+x1)/to; __ ____ ____x:= x0; y:= y0; k1:= f⨯h; x:= m; y:= y0+k1/to; k2:= f⨯h; y:= y0+k2/to; k3:= f⨯h; x:= x1; y:= y0+k3; k4:= f⨯h; y1:= y0 + (k1+to⨯(k2+k3)+k4)/6; p:= to; del:= 1; h:= h/p; INDDEL:for j:= 1 step 1 until p do ___ ____ _____ __begin _____x0:= if j<p then (xb⨯(p-j)+x1⨯j)/p else x1; m:= (x0+xm)/to; __ ____ ____x:= xm; y:= ym; k1:= f⨯h; x:= m; y:= ym+k1/to; k2:= f⨯h; y:= ym+k2/to; k3:= f⨯h; x:= x0; y:= ym+k3; k4:= f⨯h; ym:= ym + (k1+to⨯(k2+k3)+k4)/6; xm:= x0end j; ___if abs(y1-ym)>error⨯abs(y1) then __ ____begin xm:= xb; y1:= ym; del:= del+1; h:= h/to; _____if del_maxdel then __ < ____begin p:= p+p; ym:= y0; go to INDDEL end; end; _____ __ __ ___ ___if boole then __ ____begin text; writetext(|< _____ <Den givne funktion er |); writecr; writetext(S); writetext(|< , hvo > <rc = |); write(|-d.ddd dddVed integrationen er i hele x-intervallet den relative tolerence10 -d|,c); writecr; writetext(|< > < > <paa y = y(x,c) mindre end epsilon = |); write(|d.d10 -dd|,epsilon); > < >writecr; writecr; writecr; writetext(|< <Abscisse Ordinat Antal delskridt mellem forrigex y = y(x,c) og nærværende abscisse, p|); >writecr; writecr; nlin:= nlin+13; boole:= false end; _____ ___if i=0 then __ ____begin write(| -d.ddd ddd10 -d|,xb,yb); writecr; nlin:= nlin+1 end; _____ < > ___write(| -d.ddd dddwritecr; nlin:= nlin+1;10 -d|,x1,ym); write(| dd|,p); < > < >if nlin_maxlin then __ > ____begin nlin:= 0; writechar(65); side:= side+1; boole:= true end; _____ ____ ___y0:= ym; xb:= xm:= x1;if del>maxdel then begin writetext(|< __ ____ _____ <Antallet af delskridt blev desværre lig med|); write(| dd|,p); > < >go to UD end; __ __ ___end i; ___UD:end procedure RK; ___ _________select(40); by:= select(17); writetext(|< <INDLÆG datastrimmel og skriv dato, maaned, aar her : |); >d1:= read integer; d2:= read integer; d3:= read integer; select(by); side:= 0; maxlin:= 60; to:= 2;copyt< ____[ s t o p ]