langs a-z
This commit is contained in:
parent
db842d013d
commit
d066446780
11389 changed files with 98361 additions and 1020 deletions
32
Task/Euler-method/Objeck/euler-method.objeck
Normal file
32
Task/Euler-method/Objeck/euler-method.objeck
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
class EulerMethod {
|
||||
T0 : static : Float;
|
||||
TR : static : Float;
|
||||
k : static : Float;
|
||||
delta_t : static : Float[];
|
||||
n : static : Float;
|
||||
|
||||
function : Main(args : String[]) ~ Nil {
|
||||
T0 := 100;
|
||||
TR := 20;
|
||||
k := 0.07;
|
||||
delta_t := [2.0, 5.0, 10.0];
|
||||
n := 100;
|
||||
|
||||
f := NewtonCooling(Float) ~ Float;
|
||||
for(i := 0; i < delta_t->Size(); i+=1;) {
|
||||
IO.Console->Print("delta_t = ")->PrintLine(delta_t[i]);
|
||||
Euler(f, T0, n->As(Int), delta_t[i]);
|
||||
};
|
||||
}
|
||||
|
||||
function : native : NewtonCooling(t : Float) ~ Float {
|
||||
return -1 * k * (t-TR);
|
||||
}
|
||||
|
||||
function : native : Euler(f : (Float) ~ Float, y : Float, n : Int, h : Float) ~ Nil {
|
||||
for(x := 0; x<=n; x+=h;) {
|
||||
IO.Console->Print("\t")->Print(x)->Print("\t")->PrintLine(y);
|
||||
y += h * f(y);
|
||||
};
|
||||
}
|
||||
}
|
||||
44
Task/Euler-method/PL-I/euler-method.pli
Normal file
44
Task/Euler-method/PL-I/euler-method.pli
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
test: procedure options (main); /* 3 December 2012 */
|
||||
|
||||
declare (x, y, z) float;
|
||||
declare (T0 initial (100), Tr initial (20)) float;
|
||||
declare k float initial (0.07);
|
||||
declare t fixed binary;
|
||||
declare h fixed binary;
|
||||
|
||||
x, y, z = T0;
|
||||
/* Step size is 2 seconds */
|
||||
h = 2;
|
||||
put skip data (h);
|
||||
put skip list (' t By formula', 'By Euler');
|
||||
do t = 0 to 100 by 2;
|
||||
put skip edit (t, Tr + (T0 - Tr)/exp(k*t), x) (f(3), 2 f(17,10));
|
||||
x = x + h*f(t, x);
|
||||
end;
|
||||
|
||||
/* Step size is 5 seconds */
|
||||
h = 5;
|
||||
put skip data (h);
|
||||
put skip list (' t By formula', 'By Euler');
|
||||
do t = 0 to 100 by 5;
|
||||
put skip edit ( t, Tr + (T0 - Tr)/exp(k*t), y) (f(3), 2 f(17,10));
|
||||
y = y + h*f(t, y);
|
||||
end;
|
||||
|
||||
/* Step size is 10 seconds */
|
||||
h = 10;
|
||||
put skip data (h);
|
||||
put skip list (' t By formula', 'By Euler');
|
||||
do t = 0 to 100 by 10;
|
||||
put skip edit (t, Tr + (T0 - Tr)/exp(k*t), z) (f(3), 2 f(17,10));
|
||||
z = z + h*f(t, z);
|
||||
end;
|
||||
|
||||
f: procedure (dummy, T) returns (float);
|
||||
declare dummy fixed binary;
|
||||
declare T float;
|
||||
|
||||
return ( -k*(T - Tr) );
|
||||
end f;
|
||||
|
||||
end test;
|
||||
37
Task/Euler-method/Perl-6/euler-method.pl6
Normal file
37
Task/Euler-method/Perl-6/euler-method.pl6
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
sub euler ( &f, $y0, $a, $b, $h ) {
|
||||
my $y = $y0;
|
||||
my @t_y;
|
||||
for $a, * + $h ... * > $b -> $t {
|
||||
@t_y[$t] = $y;
|
||||
$y += $h * f( $t, $y );
|
||||
}
|
||||
return @t_y;
|
||||
}
|
||||
|
||||
my $COOLING_RATE = 0.07;
|
||||
my $AMBIENT_TEMP = 20;
|
||||
my $INITIAL_TEMP = 100;
|
||||
my $INITIAL_TIME = 0;
|
||||
my $FINAL_TIME = 100;
|
||||
|
||||
sub f ( $time, $temp ) {
|
||||
return -$COOLING_RATE * ( $temp - $AMBIENT_TEMP );
|
||||
}
|
||||
|
||||
my @e;
|
||||
@e[$_] = euler( &f, $INITIAL_TEMP, $INITIAL_TIME, $FINAL_TIME, $_ ) for 2, 5, 10;
|
||||
|
||||
say 'Time Analytic Step2 Step5 Step10 Err2 Err5 Err10';
|
||||
|
||||
for $INITIAL_TIME, * + 10 ... * >= $FINAL_TIME -> $t {
|
||||
|
||||
my $exact = $AMBIENT_TEMP + ($INITIAL_TEMP - $AMBIENT_TEMP)
|
||||
* (-$COOLING_RATE * $t).exp;
|
||||
|
||||
my $err = sub { @^a.map: { 100 * abs( $_ - $exact ) / $exact } }
|
||||
|
||||
my ( $a, $b, $c ) = map { @e[$_][$t] }, 2, 5, 10;
|
||||
|
||||
say $t.fmt('%4d '), ( $exact, $a, $b, $c )».fmt(' %7.3f'),
|
||||
$err.([$a, $b, $c])».fmt(' %7.3f%%');
|
||||
}
|
||||
25
Task/Euler-method/PureBasic/euler-method.purebasic
Normal file
25
Task/Euler-method/PureBasic/euler-method.purebasic
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
Define.d
|
||||
Prototype.d Func(Time, t)
|
||||
|
||||
Procedure.d Euler(*F.Func, y0, a, b, h)
|
||||
Protected y=y0, t=a
|
||||
While t<=b
|
||||
PrintN(RSet(StrF(t,3),7)+" "+RSet(StrF(y,3),7))
|
||||
y + h * *F(t,y)
|
||||
t + h
|
||||
Wend
|
||||
EndProcedure
|
||||
|
||||
Procedure.d newtonCoolingLaw(Time, t)
|
||||
ProcedureReturn -0.07*(t-20)
|
||||
EndProcedure
|
||||
|
||||
|
||||
If OpenConsole()
|
||||
Euler(@newtonCoolingLaw(), 100, 0, 100, 2)
|
||||
Euler(@newtonCoolingLaw(), 100, 0, 100, 5)
|
||||
Euler(@newtonCoolingLaw(), 100, 0, 100,10)
|
||||
|
||||
Print(#CRLF$ + #CRLF$ + "Press ENTER to exit"): Input()
|
||||
CloseConsole()
|
||||
EndIf
|
||||
14
Task/Euler-method/Run-BASIC/euler-method.run
Normal file
14
Task/Euler-method/Run-BASIC/euler-method.run
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
x = euler(-0.07,-20, 100, 0, 100, 2)
|
||||
x = euler-0.07,-20, 100, 0, 100, 5)
|
||||
x = euler(-0.07,-20, 100, 0, 100, 10)
|
||||
end
|
||||
|
||||
FUNCTION euler(da,db, y, a, b, s)
|
||||
print "===== da:";da;" db:";db;" y:";y;" a:";a;" b:";b;" s:";s;" ==================="
|
||||
t = a
|
||||
WHILE t <= b
|
||||
PRINT t;chr$(9);y
|
||||
y = y + s * (da * (y + db))
|
||||
t = t + s
|
||||
WEND
|
||||
END FUNCTION
|
||||
38
Task/Euler-method/XPL0/euler-method.xpl0
Normal file
38
Task/Euler-method/XPL0/euler-method.xpl0
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
include c:\cxpl\codes; \intrinsic 'code' declarations
|
||||
|
||||
proc Euler(Step); \Display cooling temperatures using Euler's method
|
||||
int Step;
|
||||
int Time; real Temp;
|
||||
[Text(0, "Step "); IntOut(0, Step); Text(0, " ");
|
||||
Time:= 0; Temp:= 100.0;
|
||||
repeat if rem(Time/10) = 0 then RlOut(0, Temp);
|
||||
Temp:= Temp + float(Step) * (-0.07*(Temp-20.0));
|
||||
Time:= Time + Step;
|
||||
until Time > 100;
|
||||
CrLf(0);
|
||||
];
|
||||
|
||||
real Time, Temp;
|
||||
[Format(6,0); \display time heading
|
||||
Text(0, "Time ");
|
||||
Time:= 0.0;
|
||||
while Time <= 100.1 do \(.1 avoids possible rounding error)
|
||||
[RlOut(0, Time);
|
||||
Time:= Time + 10.0;
|
||||
];
|
||||
CrLf(0);
|
||||
|
||||
Format(3,2); \display cooling temps using differential eqn.
|
||||
Text(0, "Dif eq "); \ dTemp(time)/dtime = -k*Temp
|
||||
Time:= 0.0;
|
||||
while Time <= 100.1 do
|
||||
[Temp:= 20.0 + (100.0-20.0) * Exp(-0.07*Time);
|
||||
RlOut(0, Temp);
|
||||
Time:= Time + 10.0;
|
||||
];
|
||||
CrLf(0);
|
||||
|
||||
Euler(2); \display cooling temps for various time steps
|
||||
Euler(5);
|
||||
Euler(10);
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue