Another update from ingydotnet^djgoku
This commit is contained in:
parent
91df62d461
commit
948b86eafa
7604 changed files with 108452 additions and 22726 deletions
15
Task/Euler-method/BASIC/euler-method-1.basic
Normal file
15
Task/Euler-method/BASIC/euler-method-1.basic
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
PROCeuler("-0.07*(y-20)", 100, 0, 100, 2)
|
||||
PROCeuler("-0.07*(y-20)", 100, 0, 100, 5)
|
||||
PROCeuler("-0.07*(y-20)", 100, 0, 100, 10)
|
||||
END
|
||||
|
||||
DEF PROCeuler(df$, y, a, b, s)
|
||||
LOCAL t, @%
|
||||
@% = &2030A
|
||||
t = a
|
||||
WHILE t <= b
|
||||
PRINT t, y
|
||||
y += s * EVAL(df$)
|
||||
t += s
|
||||
ENDWHILE
|
||||
ENDPROC
|
||||
24
Task/Euler-method/BASIC/euler-method-2.basic
Normal file
24
Task/Euler-method/BASIC/euler-method-2.basic
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
'Freebasic .9
|
||||
'Custom rounding
|
||||
#define round(x,N) Rtrim(Rtrim(Left(Str((x)+(.5*Sgn((x)))/(10^(N))),Instr(Str((x)+(.5*Sgn((x)))/(10^(N))),".")+(N)),"0"),".")
|
||||
|
||||
#macro Euler(fn,_y,min,max,h,printoption)
|
||||
Print "Step ";#h;":":Print
|
||||
Print "time","Euler"," Analytic"
|
||||
If printoption<>"print" Then Print "Data omitted ..."
|
||||
Scope
|
||||
Dim As Double temp=(min),y=(_y)
|
||||
Do
|
||||
If printoption="print" Then Print temp,round(y,3),20+80*Exp(-0.07*temp)
|
||||
y=y+(h)*(fn)
|
||||
temp=temp+(h)
|
||||
Loop Until temp>(max)
|
||||
Print"________________"
|
||||
Print
|
||||
End Scope
|
||||
#endmacro
|
||||
|
||||
Euler(-.07*(y-20),100,0,100,2,"don't print")
|
||||
Euler(-.07*(y-20),100,0,100,5,"print")
|
||||
Euler(-.07*(y-20),100,0,100,10,"print")
|
||||
Sleep
|
||||
14
Task/Euler-method/BASIC/euler-method-3.basic
Normal file
14
Task/Euler-method/BASIC/euler-method-3.basic
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
|
||||
13
Task/Euler-method/Elixir/euler-method.elixir
Normal file
13
Task/Euler-method/Elixir/euler-method.elixir
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
defmodule Euler do
|
||||
def method(_, _, t, b, _) when t>b, do: :ok
|
||||
def method(f, y, t, b, h) do
|
||||
:io.format "~7.3f ~7.3f~n", [t,y]
|
||||
method(f, y + h * f.(t,y), t + h, b, h)
|
||||
end
|
||||
end
|
||||
|
||||
f = fn _time, temp -> -0.07 * (temp - 20) end
|
||||
Enum.each([10, 5, 2], fn step ->
|
||||
IO.puts "\nStep = #{step}"
|
||||
Euler.method(f, 100.0, 0.0, 100.0, step)
|
||||
end)
|
||||
16
Task/Euler-method/Julia/euler-method.julia
Normal file
16
Task/Euler-method/Julia/euler-method.julia
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
euler(f,T,t0,t1,h)=[(T,T+=h*f(T))[1] for t=t0:h:t1]
|
||||
|
||||
# Prints a series of arbitrary values in a tabular form, left aligned in cells with a given width
|
||||
tabular(width,cells...)=println(join(map(s->rpad(s,width),cells),""))
|
||||
|
||||
# prints the table according to the task description for h=5 and 10 sec
|
||||
for h=(5,10)
|
||||
print("Step $h:\n\n")
|
||||
tabular(15,"Time","Euler","Analytic")
|
||||
t=0
|
||||
for T=euler(y->-0.07*(y-20.0),100.0,0,100,h)
|
||||
tabular(15,t,round(T,6),round(20.0+80.0*exp(-0.07*t),6))
|
||||
t+=h
|
||||
end
|
||||
println()
|
||||
end
|
||||
43
Task/Euler-method/PowerShell/euler-method.psh
Normal file
43
Task/Euler-method/PowerShell/euler-method.psh
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
function euler (${f}, ${y}, $y0, $t0, $tEnd) {
|
||||
function f-euler ($tn, $yn, $h) {
|
||||
$yn + $h*(f $tn $yn)
|
||||
}
|
||||
function time ($t0, $h, $tEnd) {
|
||||
$end = [MATH]::Floor(($tEnd - $t0)/$h)
|
||||
foreach ($_ in 0..$end) { $_*$h + $t0 }
|
||||
}
|
||||
$time = time $t0 10 $tEnd
|
||||
$time5 = time $t0 5 $tEnd
|
||||
$time2 = time $t0 2 $tEnd
|
||||
$yn10 = $yn5 = $yn2 = $y0
|
||||
$i2 = $i5 = 0
|
||||
foreach ($tn10 in $time) {
|
||||
while($time2[$i2] -ne $tn10) {
|
||||
$i2++
|
||||
$yn2 = (f-euler $time2[$i2] $yn2 2)
|
||||
}
|
||||
while($time5[$i5] -ne $tn10) {
|
||||
$i5++
|
||||
$yn5 = (f-euler $time5[$i5] $yn5 5)
|
||||
}
|
||||
[pscustomobject]@{
|
||||
t = "$tn10"
|
||||
Analytical = "$("{0:N5}" -f (y $tn10))"
|
||||
"Euler h = 2" = "$("{0:N5}" -f $yn2)"
|
||||
"Euler h = 5" = "$("{0:N5}" -f $yn5)"
|
||||
"Euler h = 10" = "$("{0:N5}" -f $yn10)"
|
||||
"Error h = 2" = "$("{0:N5}" -f [MATH]::abs($yn2 - (y $tn10)))"
|
||||
"Error h = 5" = "$("{0:N5}" -f [MATH]::abs($yn5 - (y $tn10)))"
|
||||
"Error h = 10" = "$("{0:N5}" -f [MATH]::abs($yn10 - (y $tn10)))"
|
||||
}
|
||||
$yn10 = (f-euler $tn10 $yn10 10)
|
||||
}
|
||||
}
|
||||
$k, $yr, $y0, $t0, $tEnd = 0.07, 20, 100, 0, 100
|
||||
function f ($t, $y) {
|
||||
-$k *($y - $yr)
|
||||
}
|
||||
function y ($t) {
|
||||
$yr + ($y0 - $yr)*[MATH]::Exp(-$k*$t)
|
||||
}
|
||||
euler f y $y0 $t0 $tEnd | Format-Table -AutoSize
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
def euler(f,y0,a,b,h):
|
||||
t,y = a,y0
|
||||
while t < b:
|
||||
while t <= b:
|
||||
print "%6.3f %6.3f" % (t,y)
|
||||
t += h
|
||||
y += h * f(t,y)
|
||||
|
|
|
|||
|
|
@ -51,3 +51,22 @@ 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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue