Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
6
Task/Euler-method/Racket/euler-method-1.rkt
Normal file
6
Task/Euler-method/Racket/euler-method-1.rkt
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
(define (ODE-solve f init
|
||||
#:x-max x-max
|
||||
#:step h
|
||||
#:method (method euler))
|
||||
(reverse
|
||||
(iterate-while (λ (x . y) (<= x x-max)) (method f h) init)))
|
||||
2
Task/Euler-method/Racket/euler-method-2.rkt
Normal file
2
Task/Euler-method/Racket/euler-method-2.rkt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
(define (euler F h)
|
||||
(λ (x y) (list (+ x h) (+ y (* h (F x y))))))
|
||||
6
Task/Euler-method/Racket/euler-method-3.rkt
Normal file
6
Task/Euler-method/Racket/euler-method-3.rkt
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
(define (iterate-while test f x)
|
||||
(let next ([result x]
|
||||
[list-of-results '()])
|
||||
(if (apply test result)
|
||||
(next (apply f result) (cons result list-of-results))
|
||||
list-of-results)))
|
||||
14
Task/Euler-method/Racket/euler-method-4.rkt
Normal file
14
Task/Euler-method/Racket/euler-method-4.rkt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
> (define (newton-cooling t T)
|
||||
(* -0.07 (- T 20)))
|
||||
> (ODE-solve newton-cooling '(0 100) #:x-max 100 #:step 10)
|
||||
'((0 100)
|
||||
(10 44.)
|
||||
(20 27.2)
|
||||
(30 22.16)
|
||||
(40 20.648)
|
||||
(50 20.1944)
|
||||
(60 20.05832)
|
||||
(70 20.017496)
|
||||
(80 20.0052488)
|
||||
(90 20.00157464)
|
||||
(100 20.000472392))
|
||||
9
Task/Euler-method/Racket/euler-method-5.rkt
Normal file
9
Task/Euler-method/Racket/euler-method-5.rkt
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
> (require plot)
|
||||
> (plot
|
||||
(map (λ (h c)
|
||||
(lines
|
||||
(ODE-solve newton-cooling '(0 100) #:x-max 100 #:step h)
|
||||
#:color c #:label (format "h=~a" h)))
|
||||
'(10 5 1)
|
||||
'(red blue black))
|
||||
#:legend-anchor 'top-right)
|
||||
4
Task/Euler-method/Racket/euler-method-6.rkt
Normal file
4
Task/Euler-method/Racket/euler-method-6.rkt
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
(define (RK2 F h)
|
||||
(λ (x y)
|
||||
(list (+ x h) (+ y (* h (F (+ x (* 1/2 h))
|
||||
(+ y (* 1/2 h (F x y)))))))))
|
||||
7
Task/Euler-method/Racket/euler-method-7.rkt
Normal file
7
Task/Euler-method/Racket/euler-method-7.rkt
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
(define (adams F h)
|
||||
(case-lambda
|
||||
; first step using Runge-Kutta method
|
||||
[(x y) (append ((RK2 F h) x y) (list (F x y)))]
|
||||
[(x y f′)
|
||||
(let ([f (F x y)])
|
||||
(list (+ x h) (+ y (* 3/2 h f) (* -1/2 h f′)) f))]))
|
||||
10
Task/Euler-method/Racket/euler-method-8.rkt
Normal file
10
Task/Euler-method/Racket/euler-method-8.rkt
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
(define ((adaptive method ε) F h0)
|
||||
(case-lambda
|
||||
[(x y) (((adaptive method ε) F h0) x y h0)]
|
||||
[(x y h)
|
||||
(match-let* ([(list x0 y0) ((method F h) x y)]
|
||||
[(list x1 y1) ((method F (/ h 2)) x y)]
|
||||
[(list x1 y1) ((method F (/ h 2)) x1 y1)]
|
||||
[τ (abs (- y1 y0))]
|
||||
[h′ (if (< τ ε) (min h h0) (* 0.9 h (/ ε τ)))])
|
||||
(list x1 (+ y1 τ) (* 2 h′)))]))
|
||||
18
Task/Euler-method/Racket/euler-method-9.rkt
Normal file
18
Task/Euler-method/Racket/euler-method-9.rkt
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
> (define (solve-newton-cooling-by m)
|
||||
(ODE-solve newton-cooling '(0 100)
|
||||
#:x-max 100 #:step 10 #:method m))
|
||||
> (plot
|
||||
(list
|
||||
(function (λ (t) (+ 20 (* 80 (exp (* -0.07 t))))) 0 100
|
||||
#:color 'black #:label "analytical")
|
||||
(lines (solve-newton-cooling-by euler)
|
||||
#:color 'red #:label "Euler")
|
||||
(lines (solve-newton-cooling-by RK2)
|
||||
#:color 'blue #:label "Runge-Kutta")
|
||||
(lines (solve-newton-cooling-by adams)
|
||||
#:color 'purple #:label "Adams")
|
||||
(points (solve-newton-cooling-by (adaptive euler 0.5))
|
||||
#:color 'red #:label "Adaptive Euler")
|
||||
(points (solve-newton-cooling-by (adaptive RK2 0.5))
|
||||
#:color 'blue #:label "Adaptive Runge-Kutta"))
|
||||
#:legend-anchor 'top-right)
|
||||
Loading…
Add table
Add a link
Reference in a new issue