22 lines
586 B
Clojure
22 lines
586 B
Clojure
(ns newton-cooling
|
|
(:gen-class))
|
|
|
|
(defn euler [f y0 a b h]
|
|
"Euler's Method.
|
|
Approximates y(time) in y'(time)=f(time,y) with y(a)=y0 and t=a..b and the step size h."
|
|
(loop [t a
|
|
y y0
|
|
result []]
|
|
(if (<= t b)
|
|
(recur (+ t h) (+ y (* (f (+ t h) y) h)) (conj result [(double t) (double y)]))
|
|
result)))
|
|
|
|
(defn newton-coolling [t temp]
|
|
"Newton's cooling law, f(t,T) = -0.07*(T-20)"
|
|
(* -0.07 (- temp 20)))
|
|
|
|
; Run for case h = 10
|
|
(println "Example output")
|
|
(doseq [q (euler newton-coolling 100 0 100 10)]
|
|
(println (apply format "%.3f %.3f" q)))
|