Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
72
Task/Euler-method/REXX/euler-method-1.rexx
Normal file
72
Task/Euler-method/REXX/euler-method-1.rexx
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
/* REXX ***************************************************************
|
||||
* 24.05.2013 Walter Pachl translated from PL/I
|
||||
**********************************************************************/
|
||||
Numeric Digits 100
|
||||
T0=100
|
||||
Tr=20
|
||||
k=0.07
|
||||
|
||||
h=2
|
||||
x=t0
|
||||
Call head
|
||||
do t=0 to 100 by 2
|
||||
Select
|
||||
When t<=4 | t>=96 Then
|
||||
call o x
|
||||
When t=8 Then
|
||||
Say '...'
|
||||
Otherwise
|
||||
Nop
|
||||
End
|
||||
x=x+h*f(x)
|
||||
end
|
||||
|
||||
h=5
|
||||
y=t0
|
||||
Call head
|
||||
do t=0 to 100 by 5
|
||||
call o y
|
||||
y=y+h*f(y)
|
||||
end
|
||||
|
||||
h=10
|
||||
z=t0
|
||||
Call head
|
||||
do t=0 to 100 by 10
|
||||
call o z
|
||||
z=z+h*f(z)
|
||||
end
|
||||
Exit
|
||||
|
||||
f: procedure Expose k Tr
|
||||
Parse Arg t
|
||||
return -k*(T-Tr)
|
||||
|
||||
head:
|
||||
Say 'h='h
|
||||
Say ' t By formula By Euler'
|
||||
Return
|
||||
|
||||
o:
|
||||
Parse Arg v
|
||||
Say right(t,3) format(Tr+(T0-Tr)/exp(k*t),5,10) format(v,5,10)
|
||||
Return
|
||||
|
||||
exp: Procedure
|
||||
Parse Arg x,prec
|
||||
If prec<9 Then prec=9
|
||||
Numeric Digits (2*prec)
|
||||
Numeric Fuzz 3
|
||||
o=1
|
||||
u=1
|
||||
r=1
|
||||
Do i=1 By 1
|
||||
ra=r
|
||||
o=o*x
|
||||
u=u*i
|
||||
r=r+(o/u)
|
||||
If r=ra Then Leave
|
||||
End
|
||||
Numeric Digits (prec)
|
||||
r=r+0
|
||||
Return r
|
||||
25
Task/Euler-method/REXX/euler-method-2.rexx
Normal file
25
Task/Euler-method/REXX/euler-method-2.rexx
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
/*REXX pgm solves example of Newton's cooling law via Euler's method (diff. step sizes).*/
|
||||
e=2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138
|
||||
numeric digits length(e) - length(.) /*use the number of decimal digits in E*/
|
||||
parse arg Ti Tr cc tt ss /*obtain optional arguments from the CL*/
|
||||
if Ti='' | Ti="," then Ti= 100 /*given? Default: initial temp in ºC.*/
|
||||
if Tr='' | Tr="," then Tr= 20 /* " " room " " " */
|
||||
if cc='' | cc="," then cc= 0.07 /* " " cooling constant. */
|
||||
if tt='' | tt="," then tt= 100 /* " " total time seconds. */
|
||||
if ss='' | ss="," then ss= 2 5 10 /* " " the step sizes. */
|
||||
@= '═' /*the character used in title separator*/
|
||||
do sSize=1 for words(ss); say; say; say center('time in' , 11)
|
||||
say center('seconds' , 11, @) center('Euler method', 16, @) ,
|
||||
center('analytic', 18, @) center('difference' , 14, @)
|
||||
$=Ti; inc= word(ss, sSize) /*the 1st value; obtain the increment.*/
|
||||
do t=0 to Ti by inc /*step through calculations by the inc.*/
|
||||
a= format(Tr + (Ti-Tr)/exp(cc*t),6,10) /*calculate the analytic (exact) value.*/
|
||||
say center(t,11) format($,6,3) 'ºC ' a "ºC" format(abs(a-$)/a*100,6,2) '%'
|
||||
$= $ + inc * cc * (Tr-$) /*calc. next value via Euler's method. */
|
||||
end /*t*/
|
||||
end /*sSize*/
|
||||
exit /*stick a fork in it, we're all done. */
|
||||
/*──────────────────────────────────────────────────────────────────────────────────────*/
|
||||
exp: procedure expose e; arg x; ix= x%1; if abs(x-ix)>.5 then ix=ix+sign(x); x= x-ix; z=1
|
||||
_=1; w=1; do j=1; _= _*x/j; z= (z+_)/1; if z==w then leave; w=z
|
||||
end /*j*/; if z\==0 then z= e**ix * z; return z
|
||||
Loading…
Add table
Add a link
Reference in a new issue